Lambdaイベントの種類
イベント:何かが起こったことを通知するためのJSONデータ
イベントソース:イベントを発行し、Lambdaを呼び出す具体的なAWSサービス (e.g. API Gateway, SNS, DynamoDBStreams, ,,,)
呼び出しタイプ:Lambdaの呼び出し方 (Event | RequestResponse | DryRun) イベントソースの種類によってどの呼び出しタイプでLambdaを起動するかは決まっている
(CLIからLambdaをInvokeするときはデフォルトではRequestResponseだが、オプションで指定することもできる)
イベントのサンプル:
プッシュモデル
プル以外のサービス
プルモデル
Kinesis
DynamoDB
SQS
プルモデルのイベントにはトップレベルプロパティとしてRecordsがあり、複数のRecordが入ってくる。
プッシュモデルのイベントに規則性は特になさそう。
プッシュモデルのイベントのトップレベルプロパティとしてRecordsがあるイベントでも、Recordsの中に一つのRecordしか入ってこないイベントソースがある(SNS, S3, ,,,?)
なんでこういう重要な情報が書かれているのがドキュメントではなくFAQなのかAWSに問いたい、、、。
確かにサンプルコードではRecords[0]的な書き方をしてるが、確信が持てないのではっきりとドキュメントに書いてほしい。
Lambdaのタイムアウト設定値の時間まで処理が終わらない
LambdaHandlerが例外を投げる
メモリ不足
...
というような理由でLambdaがエラーになった場合の動作。
イベントソースの種類によって異なる動作をする。
ストリームベースでない
ストリームベース
ポーリングベース(=Kinesis Data Streams, DynamoDBStreams)→失敗したレコードの有効期限が切れるまで最大7日間(デフォルトだと24時間?)リトライし続ける。順序保証をするために失敗したレコードでキューが詰まる(後続のレコードが処理されない)。このブロッキングを避けたければ手前にSQSを挟んでおくと順序保証がなくなる代わりに詰まらなくなる。
ポーリングベースでない(=SQS)→正常に終了すればキューからイベントを削除。エラーなら削除しないので可視性タイムアウトしたときに他のコンシューマが処理しはじめる。?(若干よくわからない記述がある)
参考: