😽

Lambda関数の実行内容の設定をする①

2021/02/07に公開

はじめに

node.jsを使ってAWS LambdaでAPIを作りたいのでセットアップやnode.jsで関数を定義する方法を勉強する。

概要

■関数の設定項目

をまとめた!(^_-)-☆

■関数の設定項目

最初のLambda関数のセットアップが終わったら関数の細かい実行内容に関する設定をしていく。

関数の名前をクリックすると細かい内容が表示される。

ここで関数の実行内容を指定していく。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-console.html

デザイナー

デザイナーには、関数の概要、およびその上流と下流のリソースが表示される。デザイナーを使用してトリガー、レイヤー、送信先を設定できます。

トリガーの設定

トリガーでは、Lambda関数を呼び出すイベントを設定する。
なんのサービスでどんなことが起きたらLambda関数を実行するのかを定義する。

サービスによって、呼び出しタイプやリトライの動作、パーミッションの設定などが異なるので注意する。

トリガーの設定方法は2つあり、
①Lambda関数設定でトリガーのイベント設定を作成する。
②Lambda関数を実行する別のサービスでトリガーを設定する。
②の別のサービスでトリガーを設定する詳細はこちら↓
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-services.html
トリガーでは、関数を呼び出すようにサービスやリソースを設定するが、ほとんどのサービスは、サービスごとに関数の設定を行う。
一部のサービスのみ、AWS Lambdaがデータを読み込み、イベントソースマッピングと呼ばれるリソースで関数を設定するような形になる。

https://zenn.dev/suiudou/articles/f13565873fa269

これにより設定が大きく変わるそう。

送信先を追加

関数に送信先を追加して、呼び出し結果に関する詳細を別のサービスに送信する。
関数が非同期的に呼び出されたときや、ストリームから読み取るイベントソースマッピングによって、呼び出しレコードを送信できます。

ソース

関数の呼び出し方法を設定する。

関数の呼び出し方法は、
同期呼び出し
非同期呼び出し
ストリーム呼び出し

の3種類がある。
タイプが複数あるが実行トリガーによって呼び出しタイプが異なり、それによってAWS側で再呼び出しが実行されるのか、ユーザー側で再呼び出しを実行する必要があるかが変わってくる。
同期呼び出し
同期実行になり直接関数が実行される。キューイングされず実行される。
AWS側でのリトライ処理はなく実行は1回となる。
Lambda が関数を実行できた場合、関数がエラーを返した場合でも、ステータスコードは 200 になる。
ステータスコード429(たくさんすぎて処理できない)が返ってきた場合は、アプリ側で再試行の処理が必要になる。
AWS SDKを利用する場合はリトライが実装されている。※SDKの実装状況によるので、確認する。

キューとは、最も基本的なデータ構造の一つで、要素を入ってきた順に一列に並べ、先に入れた要素から順に取り出すという規則で出し入れを行う。キューイングは二つの主体(機器やプログラムなど)の間でデータの受け渡しを非同期に行う手法としてよく用いられる。

非同期呼び出し
非同期呼び出しでは、Lambda関数が直接実行されるのではなく、キューイングされたのち実行される。キューイング方式なので実行に多少時間がかかってしまうこともある

なのでLambda関数自体は、キューから実行されることになる。
呼び出しに失敗した場合は自動的に2回リトライが実施される。(初回起動を含めると最大3回実行)この際、最初の 2 回の試行の間に 1 分間、2 回目と 3 回目の間に 2 分間の待機時間がある。

実行が3回失敗したあと、イベントは破棄される。

LambdaにDLQ(デッドレターキュー)を設定することにより、呼び出し元に成功応答しか返さない非同期呼び出しの場合でも、関数実行の失敗をSQS queueやSNS topicに送信してエラー監視やあとでバッチ処理できるようになる。

Lambda は、非同期呼び出しに対して以下の送信先をサポートしている。
Amazon SQS – 標準 SQS キュー。
Amazon SNS – SNS トピック。
AWS Lambda – Lambda 関数。
Amazon EventBridge – EventBridge イベントバス。

ストリーム呼び出し
Amazon DynamoDB
Amazon Kinesis
Amazon Managed Streaming for Apache Kafka
Amazon Simple Queue Service
とLambdaを連携する場合はストリーム呼び出しが必要になる。

デフォルトでは、関数がエラーを返すと、バッチは関数が成功するまで、またはバッチの項目が期限切れになるまで再処理が実行される。
イベントが実行されず破棄したときは、呼び出しレコードを別のサービスに送信するように、イベントソースマッピングを設定することができる。
AWS Lambdaではイベントソースマッピングの送信先として以下をサポートしている。
Amazon SQS – SQS; キュー。
Amazon SNS – SNS トピック。
DLQが非対応になる。

データの有効期限については、Kinesis Streamsはデフォルト24時間、最大7日。これは、Kinesis Streams のデータ有効期限の設定による。DynamoDBは24時間になる。

送信先タイプ

レコードを別のサービスに送信するには、関数に送信先を追加する。
処理に失敗したイベントと正常に処理されたイベントに別々の送信先を設定できる。
エラー処理の設定と同様に、関数、バージョン、またはエイリアスに対して送信先を設定できる。

Amazon SQS – 標準 SQS キュー
プル型のメッセージ処理が得意で、非同期処理で受け取ったメッセージ(キュー)を処理する。メッセージを送信するというよりも、受け取ったメッセージ(キュー)を処理するサービスになる。
Amazon SNS – SNS トピック
プッシュ型の通知が得意で、EメールのほかにもSMS、スマートフォンへの通知が可能。しかし、容量制限があるためEメールで長文コンテンツを届ける用途には向かない。

AWS Lambda – Lambda 関数
Lambda関数で処理された内容をさらに別のLambda関数につなげ処理することができる。
Amazon EventBridge – EventBridge イベントバス
イベント情報を、他のAWSサービスやSaaSのサービスと紐付けることができる。

まとめ

Lambda関数の設定はいっぱいだ!次はLambda関数の設定の続きをまとめる。

Discussion