Lambdaの実行方法についてまとめてみた(ハンズオンあり)
Lamdbと連携できるサービス
Lambdaの主なイベントソース
lambdaが発火する主なイベントソースには下記がある
- s3
- SQS
- SNS
- DynamoDB
- Event briage
lambdaには上記のイベントソースを受け取るハンドラーが用意されている
Lambdaで設定できる主な概要
- IAM Role
- メモリー容量
- タイムアウト時間
etc
呼び出しタイプ
- 同期
- 非同期
- ストリーム
のちほど詳しく説明します!
とりあえずAWSコンソールからLambdaを立ち上げてみる
とりあえず既存のhello-worlテンプレートで起動させてみた。
設定の項目でさまざまな設定ができることがわかる。
詳細はのちほど詳しく説明します!
ハンズオンイベントソースにS3を使いLambdaを起動させてみる
今回はs3にアップロードされたら、lamdbaを発火し,
別のs3バケットに保存する形に変更する
- とりあえずデフォルトの設定で言語はnode.jsを指定し、lambdaを作成
-
s3もデフォルト設定で作成
-
s3にjpgファイルをpushしたらlamdbaを起動するように変更する
s3のプロパティーからイベント通知設定に移動する
今回は全てのイベントアクションに対して,先ほど作成したlambdaを起動するように設定した。
余談
ここで少しs3のイベント通知先にlambdaを選ぶと、lambdaの方でどのような設定が反映されたかを確認してみることにしよう!
lambdaのトップに行くと、トリガーにs3が追加されたことがわかる
また権限のリソースベースのポリシーステートメントを確認すると一つ追加されたことがわかる
中身を見てみるとs3に対して、特定のアカウント、バケットからであればlamdbaにイベントが送れるように
設定してあることがわかる
- s3に画像をアップロードする
s3に画像をアップロードするとlambdaが起動したことがログを確認するとわかる
- lambdaの呼び出し方法
大きく分けて3つあり - 同期
- 非同期
- インベントソースマッピング
1, 同期呼び出し
こちらは一般的なものでクライアントがリクエストを送り、そのレスポンスを待ってクライアント側に帰ることになる
エラーが発生した場合は、クライアント側でリトライ処理などを実装または実行する必要がある
2, 非同期処理は今回ハンズオンでやったs3からイベントを受け取り、lambdaが起動するような動作で、
s3はイベントを投げるだけれそのレスポンスを必要としないのが特徴。
簡単に言うと実行するタイミングと処理するタイミングが一致しない.
余談
lambdaにはEvent QueueがありS3などのイベントはこちらに保存される、そのイベントを順番に読み取っていきます。
この時処理が失敗した場合はリトライ最大回数まで実行され、それでも失敗する場合は
デッドレターキューが呼ばれる。
また イベントの最大有効期間はEvent キューに処理を保存できる最大時間でこの時間を過ぎてしまうとエラーになる。
非同期処理のメリットとしては、並列処理が可能で、急激なイベント変化にも対応可能だが
冪等性を担保するコード設計にしないといけないので設計の難易度が上がる。
- インベントソースマッピング
イベントソースからイベントソースマッピングを通じてlambdaに送信する方法
lambdaがイベントソースにポーリングし、イベントがあればsouce batchとしてイベントソースマッピングに
送信する
イベントソースになれるリソースとしては
- kinesis
- DynamoDB Streams
- SQS
となりSQSがキュー型でそのほかはストリームス型となる
画像の下にあるdestinationはイベントが実行した結果を送信する先を指定するもので、下記のものが指定できる
- SQS
- SNS
- Lambda
- Event Briage
まとめると下記になる
ハンズオンはまた別の記事でやろうとおものでお楽しみに!!!!
それでは
Discussion