Lambda関連のことを調べてみた2021年05月13日

Lambda関連のことを調べてみた2021年05月13日
目次

AWS CloudFormationでLambda Layerを使用したSlack通知定期実行Lambdaを構築しよう

# はじめに
AWS CloudFormationを利用してLambda Layerを使用したSlack通知定期実行Lambdaの構築のテンプレートのサンプルです。
CloudWatchにて、Lambdaを定期実行します。また、Lambdaは、S3アーティファクトを使用します。
通知内容は起動しているEC2インスタンスを停止する際の情報になります。

テンプレートの概要が分からない場合は、[はじめてのAWS CloudFormationテンプレートを理解する](https://qiita.com/miyabiz/items/eb7b0fa1675b5199b9b7)を参考にしてください。

コードは[GitHub](https://github.com/miyabiz-room/CloudFormation-Template/tree/lambda-02)にもあります。

今回は、akane というシステムの dev 環境を想定しています。
同じ構成で違う環境を作成する場合は、{環境名}-parameters.jsonを別途作成します。

“`text:ディレクトリ構成
akane

元記事を表示

AWS Lambda (Python 3.8)&Wrike APIで取得したjsonをパースし任意のキーで取り出してみる。

#この記事の概要
https://qiita.com/katoiek/items/b2fb9ce7ad759e5fb5aa
の続き。

せっかくなのでほしい要素を取り出してみる。

#本記事の投稿者
前も来ましたがPython&Lambda初心者(両方とも初めて書いてみた)なのでセオリー的なPerseの仕方などはわからないので地下わら技です。

#大まかな手順
Wrikeで永続トークンを生成し、LabmdaでPythonの関数つくって実行し、かえって来たクエリの任意のキーを取り出す。

#今回の目的
サンプルソースからpermalink要素を抜き出す。
今回はpermalinkをキーとしましたが、その他クエリに使えそうなキーはWrike公式APIリファレンスを参照してください
https://developers.wrike.com/api/v4/tasks/#query-tasks
→こちらのResponseです。

#APIからのレスポンス(例)
“`sample.json
{
“kind”: “tasks”,
“data”: [
{

元記事を表示

Python lambdaでの処理

# はじめに
Pythonのlambda式を自身がよく忘れてしまいがちなので, メモとして残しておきます.
他の方の参考にもなればと思います.
`間違っている箇所もあると思いますので, コメントしていただけると幸いです.`

Pythonはdef()で関数を定義しますが, lambda式で無名関数を定義することができます.
**def()** を用いた関数の場合、引数として直接他の関数に渡すことができず, 違う場所で定義してから値を渡す必要があるのに対して, **lambda式**は, あくまで「式」であるので, 関数の引数として直接渡すことができます!!!!

次の節から例を紹介していきます.

# def文とlambda式の対応関係

“`python
def add(x, y=1):
return x+y

print(add(1,2))
# 3

print(add(100))
# 101
“`

上記のdef文を, lambda式に変換した場合

“`python
f = lambda x, y=1: x+y

print(f(1,2))
# 3

print

元記事を表示

Lambdaで I/O Errorが発生した場合の対応

# はじめに
個人的な備忘録が目的です。
言語は Python のみですが、考え方は他の言語にも流用できるかなと思います。

# 問題点
Lambdaでファイル作成系のコマンドを実行すると、たまに `I/O Error` 発生したりします。
例えば、 `poppler` にある `pdftohtml` を実行すると、

“`bash
pdftohtml test.pdf output
I/O Error: Couldn’t open html file ‘outputs.html
“`

原因は、Lambdaではカレントディレクトリにファイルを作成することができないからです。

https://stackoverflow.com/questions/39383465/python-read-only-file-system-error-with-s3-and-lambda-when-opening-a-file-for-re

# 対応策

上記のStackOverflowの記事にも書かれている通り、 `/tmp` に作成するようにしたら良いです。
`subprocess` を使う

元記事を表示

AWS Cognitoでユーザー情報をAWS Lambda(Golang)から取得する方法

# 目的
APIを叩いてきたユーザー名によって変えたいということがありました。
そこで、Cognitoでオーソライズを行っているLambda関数にて、API Gatewayの認証情報をLambda(Golang)の中で取得する方法を調べました。

# 結論

以下のコードでユーザー名を取得できます。

“`go
func handler(ctx context.Context, apiGWEvent events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {

ユーザー名取得
diaryGetter := apiGWEvent.RequestContext.Authorizer[“claims”].(map[string]interface{})[“cognito:username”].(string)

/// …略
}
“`

割と途中のコードとかが謎ですので、以下に解説を載せておきます。(これより単純に取得できる方法がありましたらご教授いただけると幸いです。)

# 解説

元記事を表示

AWS SAMテンプレートのサンプルをベースにLambda Authorizerを組み込む

LambdaやDynamoDBを使ったサーバレスアーキテクチャを構築するうえでとても便利なIaaC(Infrastructure as a Code)ツールであるSAM(Serverless Application Model)を使って、Lambda Authorizerを使った認証付きAPIを作成したいと思います。
今回はトークンベースの認証とします。
SAMには、いくつかのテンプレートが用意されています。その中でも最もシンプルなhello-worldテンプレートからスタートしてみます。

“`
sam init
“`

上記のコマンドでプロジェクトの作成を開始します。
今回は、AWS Quick Start Templatesを選び、Zipでデプロイする方式で、ランタイムはnodejs14.x、使用するテンプレートはHello World Exampleとしました。
ちなみに、ここでとってくるSAMのtemplateは、以下のリポジトリからクローンされます。
https://github.com/aws/aws-sam-cli-app-templates

結果として、次のよう

元記事を表示

【BacklogAPIレート制限対応】ユーザーごとのAPIレートの監視をする仕組みを作った

# 背景
**2021年7月末**からBacklog APIに対するレート制限が実装される。

レート制限に関するブログ : https://backlog.com/ja/blog/backlog-api-rate-limit-announcement/

このレート制限は、APIの種類ごと・ユーザー単位・分単位での制限となる。

この対応のために、まずBacklog APIを利用している各サービスでのAPI利用状況を把握し影響箇所を調査する必要がある。

# 方法
「レート制限情報の取得」APIが用意されている。このAPIを利用することで、その時点のAPI利用状況が把握できる。
https://developer.nulab.com/ja/docs/backlog/api/2/get-rate-limit/#

ただし、**得られる情報はAPIのリクエストを送った時点の情報のみ**であり、特定期間内における利用状況を把握するためには、その期間中に**定期的にこのAPIを実行し情報を取得する必要がある**。

そのために、以下の簡易な監視システムを構築した。

## 監視システム
![

元記事を表示

CloudWatchLogsの特定の文字列を含むログをSlackに転送する -前編-

#完成例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659469/a4a5dcca-81c0-1b7e-3bef-4e6a6a21c8a5.png)

#slack apiにアクセスしてアプリを作成
botの作成の仕方やslackへのメッセージ投稿の仕方は以下の記事で紹介しています。

https://qiita.com/ms2geki/items/f63757edf705dc5df537

#Pythonのコードのディレクトリ構造

ディレクトリ構造は以下のようになっています

“`shell:ディレクトリ構造
sendLogToSlack
├── lambda_function.py
├── postslack.py
└── slack_sdk
“`

#slack_sdkのインストール
slack_sdkはlambdaの標準モジュールではないので、
pipでインストールしてからzipでパッケージ化する必要があります。

“`bash:slack_sdkをパッケー

元記事を表示

njsでAPIGatewayっぽいものを作ってローカルでLambdaを動かしてみる

そもそもnjsとはなんぞや?という感じですが、簡単に言うとNginxをJavaScriptで制御できるようにするためのモジュールです。
njsだけでなくメジャーなものでLuaというスクリプト言語があり、そちらの方が歴史も古く、nginxに対する制御も色々できるようですが、新しい構文を覚えるのが面倒だったので選択しませんでした。
njs自体の初出がここ最近ということもあり、ほとんどネット上に情報がなかったので筆を取りました。
## 経緯とか
個人でNext.jsで開発をしていたのですが、ローカルでLambda関数の実行ができてそのコードをそのままAWSに上げて実行することができた方が楽なのでまずバックエンド側の開発環境を作ろうというところが始まりでした。

まぁ既にDockerイメージにそういう感じのがあるだろうと思って探すと、`amazon/aws-lambda-ruby:2.7`というイメージがありました。

早速使ってみると

“`Bash
curl -XPOST “http://localhost:9000/2015-03-31/functions/function/invoc

元記事を表示

CloudWatchEvents+lambda+boto3でサーバー代を節約する

#目的→サーバー代の節約

http://myhero2.s3-website-us-west-2.amazonaws.com
Angularのチュートリアルを参考に作成したポートフォリオです。
バックエンドでSpringBoot(EC2)とKeyCloak(FARGATE)とMySQLが動いています。
特にFARGATEは個人で運用する分にはサーバ代が高い為、
CloudWatchEvents+lambdaで決まった時間にタスクをストップさせる構成を実装します。

#lambdaの作成と設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659469/98c2a448-de5b-6d34-f0a6-90dfcb0cfef7.png)

AWS Lambdaのコンソール画面より関数の作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659469/136e4532-

元記事を表示

Amplify CLI + Lambda + TypescriptのローカルモックをVisual Studio Codeでデバッグする

Amplify CLIでLambda(Function)をTypescriptで書くときに、ローカルモックでLambdaを実行してVisual Studio Codeでデバッグする方法です。
(**デバッグする** とは、VSCode上でブレークポイントを止めてステップ実行、といったことを指します。)

* [Mocking and testing – Function mocking setup](https://github.com/aws-amplify/amplify-cli/issues/6894)

### 注意点

Amplify CLI(@aws-amplify/cli)のv4.44.0以降では、シンプルなJavascriptの状態でもデバッグできていません。
ブレークポイントをが止まらないという[Issue](https://github.com/aws-amplify/amplify-cli/issues/6894)が上がっていますが、解決策が見つかっていない状態です。
このため、v4.43.0の環境での確認結果になります。

### Lambdaを追加してJava

元記事を表示

おうちにLambdaが欲しい!

はじめて投稿します、はるかなぎと申します。最近になり本格的にAWSを触り始めたいわばにわか勢です。

## AWS Lambdaってなあに?

AWS Lambdaは、サーバレス型と呼ばれるサービスのひとつで(利用者が)サーバを用意せずに、プログラムを実行できるサービスです。Faas(Function as a Service)と呼ばれる種類のサービスと説明されることもあります。

詳しい内容は、AWS公式の紹介ページを見た方が早いと思います。

[AWS Lambda(イベント発生時にコードを実行)| AWS](https://aws.amazon.com/jp/lambda/)

## ところで、ローカルで動くの?

この手のものを見ると、自宅に環境が欲しくなりますね。調べたところ、[AWS SAM CLI](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)というローカルでテストを行うツールがあるよ

元記事を表示

AWS CloudFormationでLambdaを使用するAPI Gatewayを構築しよう

# はじめに
AWS CloudFormationを利用してLambdaを使用するAPI Gateway構築のテンプレートのサンプルです。
Lambdaは、S3アーティファクトを使用します。

テンプレートの概要が分からない場合は、[はじめてのAWS CloudFormationテンプレートを理解する](https://qiita.com/miyabiz/items/eb7b0fa1675b5199b9b7)を参考にしてください。

コードは[GitHub](https://github.com/miyabiz-room/CloudFormation-Template/tree/apigw-01)にもあります。

今回は、akane というシステムの dev 環境を想定しています。
同じ構成で違う環境を作成する場合は、{環境名}-parameters.jsonを別途作成します。

“`text:ディレクトリ構成
akane (システム)
├── apigw (スタック)
│ ├── apigw.yml (CFnテンプレート)
│ └── dev-parameter

元記事を表示

AWS CloudFormationでS3アーティファクトを使用したLambdaを構築しよう

# はじめに
AWS CloudFormationを利用してS3アーティファクトを使用したLambda構築のテンプレートのサンプルです。

テンプレートの概要が分からない場合は、[はじめてのAWS CloudFormationテンプレートを理解する](https://qiita.com/miyabiz/items/eb7b0fa1675b5199b9b7)を参考にしてください。

コードは[GitHub](https://github.com/miyabiz-room/CloudFormation-Template/tree/lambda-01)にもあります。

今回は、akane というシステムの dev 環境を想定しています。
同じ構成で違う環境を作成する場合は、{環境名}-parameters.jsonを別途作成します。

“`text:ディレクトリ構成
akane (システム)
├── lambda (スタック)
│ ├── code
│ │ └── getTiAmo.py (S3アーティファクトソース)
│ ├── code-lambda-g

元記事を表示

AWS Lambdaのログのタイムゾーンをいい感じにしたい

# 背景
Lambda Powertoolsを使ってログ出力していたが、タイムゾーンがUTCになっていたのでこれをどうにかしたい、という要望が出た。

どうにかしたい、という微妙な言い回しになっているのは、

– タイムゾーンをJSTに変更する
– UTCのままでタイムゾーン情報を追加で出力する

という2パターンが選択肢として存在したため。最終的には後者で終えた。理由は後段で述べる。

# Lambda Powertools の簡単な使い方

前提知識としてざっくり書いておく。以下の様にデコレータをつけると詳細なログを出してくれる。

“`python
from aws_lambda_powertools import Logger

logger = Logger()

@logger.inject_lambda_context
def handler(event, context):
logger.info(“This is an information”)

logger.error(“This is an error”)
“`

出力される

元記事を表示

サーバーレスを利用した従量課金で動くシステム開発

# はじめに
AWSにおいて、下記のサービスを組み合わせてシステムを開発すると従量課金で動くシステムが作成できます。理論上は。

– AWS Lambda (リクエスト回数および実行時間に応じた課金)
– Amazon API Gateway (APIコール回数および転送データ量に応じた課金)
– Amazon DynamoDB (書き込み読み込みリクエスト回数および利用ストレージに応じた課金)

しかし、オープンソースでないということもあるのか、DynamoDBを利用したシステム例をあまり見かけません。そこで、上記3サービスを利用してブログシステム(CMSっぽいなにか)を構築してみたので、感想をまとめます。

# ソースコード

https://github.com/tabikurage/slsblog

いわゆるフロントエンドエンジニアと呼ばれるようなことをやってなかったので、HTML書いたりCSS書いたりするのが大変でした……
まだまだ直す部分はありますが、とりあえず全体の思考だけでも先にQiitaにまとめます。

# 構成
adminpage(管理用ページの構築)、we

元記事を表示

Node.js 10→14にアップデートしてみた

#背景
備忘録。
AWSLambdaの対応ランタイムは10が、7月ごろ対応期限だったから急遽アップデート。

# 1. brewのアップデート
brew update
brew upgrade
brew doctorでこの際にチェック

# 2. nodenvにnode 14の最新を入れる
nodenvで最新バージョンが取得出来ないので、これを参考してany envを使えるようにした。https://qiita.com/turara/items/6b7f4a8e3770a7074072

Node.js 14.16.1を選択。LTSだから長期サポート。

# 3. パッケージをメンテナンス
パッケージ・モジュール・ライブラリ。言葉統一しよう。これからはパワーリフティングしよう。

ncuコマンドでマイナー・バッチアップデートから順にアップデートしつつ、gitへコミットしていく。

元記事を表示

【AmazonConnect】Lambdaを利用して受付時間外の電話着信をSlackに通知させてみた(後編)

前編はこちら

まだ前編を読めていない人はこちらからご覧ください!
[https://qiita.com/hagiohagi/items/cef993105f653eab9603](https://qiita.com/hagiohagi/items/cef993105f653eab9603)

後編ではLambdaの設定・Slack Appの設定・Amazon Connectの問い合わせフローの設定をしていきます!

LambdaとSlack Appの設定

・Lambda関数の作成

1. AWSコンソールにログインし、サービスから「Lambda」を選択
2. ポリシーのフィルターの設定で「AWSLambda_FullAccess」を選択
3. 任意の名前と説明を記入
4. 関数の作成は「一から作成」を選択し、任意の名前を記入
5. ランタイムはPython3.8を選択し、ロールは先ほど作成したロールを選択
6. 公開コードを利用するため以下のリンクを開く

https://github.com/hackjapan/a

元記事を表示

【AmazonConnect】Lambdaを利用して受付時間外の電話着信をSlackに通知させてみた(前編)

はじめに

この度、社内電話の設定を自分の手で編集するという、貴重な業務に携わったので、
今回、備忘録として残しておこうと思いました。
ちなみに、私自身のLambdaの知識はほぼゼロです。
他の記事やサイトの情報を拝借して繋げられた感じです。ありがたや。

お世話になった記事・サイト

HACKNOTE様の記事にはとてもお世話になりました。

・Amazon Connectで電話番号を取得して自動音声を流す
[https://hacknote.jp/archives/48971/](https://hacknote.jp/archives/48971/)
・Amazon ConnectのCCPで電話をかける
[https://hacknote.jp/archives/50200/](https://hacknote.jp/archives/50200/)
・Amazon Translateを使ってSlackで翻訳コマンドを作成
[https://hacknote.jp/archives/41652/](https://hacknote.jp/arch

元記事を表示

# Amazon SNSを用いてAndroid(GMSとHMS)とiOSに対応したプッシュ通知の実装方法10―サーバー(Amazon SNS:プッシュ通知を配信:HMS Part 2)

# Amazon SNSを用いてAndroid(GMSとHMS)とiOSに対応したプッシュ通知の実装方法―サーバー(Amazon SNS:プッシュ通知を配信:HMS Part 2)

### Amazon SNSのトピックに送られたプッシュ配信内容をプッシュサーバーに転送するLambdaのサンプル

“`javascript:index.js
const Util = require(“./util.js”);
const PushUtil = require(“./pushUtil.js”);

exports.handler = function (event, context, callback) {
const util = new Util();
const pushUtil = new PushUtil();

let pushData = null;

try {
// プッシュデータを取得
const dataString = util.getData(event);

// ログ

元記事を表示

OTHERカテゴリの最新記事