2022.02.22 JAWS-UG 初心者支部#46 AWS Builders Online Series recap4 LT資料です。
-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠ΈͨBXT KBXTVH KBXTVH@CHOS2022.02.22JAWS-UG 初⼼者⽀部#46AWS Builders Online Series recap4和⽥健⼀郎@Keni_W
View Slide
ࠓ͢͜ͱKBXTVHDIJCB KBXTVH@CHOS• ⾃⼰紹介• きっかけ• Lambdaのトリガー• ピタゴラスイッチしてみた• トリガーのEventなど解説• 終わり-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
⾃⼰紹介⽒名:和⽥ 健⼀郎所属:アイレット株式会社 エンジニアJAWS-UG 千葉 運営メンバーSORACOM UG 東京 運営メンバーTwitter: @Keni_W Facebook : kenichiro.wada.3好きなAWSサービス : AWS Lambda2021 APN AWS Top Engineers2020年共著でサーバーレスの本書きました
͖͔͚ͬKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ• この話は元ネタは、運営の織⽥さんとのこんなやりとりから始まりました。
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ• AWS Lambdaは現状、FaaS(Function as a Service)の代表格とも⾔える AWSのコンピューティングサービスです。• マネージメントコンソールやAPIを利⽤して、コードのアップロードするだけで、実⾏することができます。• つまり、開発者はサーバーの構築、管理は⼀切不要で、コードの実装のみに集中することができます。• また、リクエストに応じて、⾃動的にスケーリングを⾏ってくれます。• リクエスト毎の課⾦となるため、関数が実⾏されない時には、⼀切料⾦が発⽣しません。そのため、AmazonEC2を利⽤した場合に⽐べて⼤幅に料⾦が下がるケースもあります。(基礎から学ぶサーバーレス開発 SECTION-004より)
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨサーバーのことを考えずにコードを実⾏する
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOSLambdaのコンソールで、関数左側にあるのが、トリガーですね。-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOS⼀⽅、右に出てくるのが、Destinationsです。ごめんなさい。こっち使うの忘れました。-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨスーパー猫の⽇現在、トリガーの種類はこんな感じ。
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨトリガー⾃体は、以下の2つ。・同期呼び出しこの呼び出し⽅法では、Lambdaは関数を実⾏し、レスポンスを待ちます。関数の実⾏が完了したら、呼び出し元にそのレスポンスを返却します。関数内でエラーになった、タイムアウト時間に達した場合などで関数からエラーが返った場合、エラーのレスポンスを確認し、呼び出し元で、再度処理を⾏うかを判断するようにします。・⾮同期呼び出しこの呼び出し⽅法では、Lambdaは⼀旦イベントを内部のキューに送信し、別のプロセスがそのキューから、イベントを読み込み、関数が実⾏されます。呼び出し元では、キューに追加の可否のみ受け取ることができます。この呼び出し⽅法で注意が必要なのは、⾮同期実⾏の場合、最低 1回は実⾏されることが保証されますが、1回しか実⾏することを保証していません。つまり、1回以上実⾏されることあるということです。そのため、1回実⾏でも、複数回実⾏でも結果を同⼀になるような考慮をしておく必要があります、これをべき等性の確保と⾔います。また、同期実⾏と異なり、関数内でエラーになった場合、Lambdaは関数を標準では2回リトライします。合計 3回のリトライで失敗した場合は、Amazon SQSのキューやAmazon SNSのトピックにイベントを送信することで、エラー状況を知ることが可能です。(基礎から学ぶサーバーレス開発 SECTION-004より)
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOS突然ですが、ここでアンケートです。以下のURLにアクセスするか、QRコードを読み取ってください。https://bit.ly/3sWy9Eoもしくは「Mentimeter」(https://www.menti.com/)にアクセスし、以下のコードを⼊⼒7844 7371-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨすみません。現在はアンケート募集してません
-BNCEBͷτϦΨʔKBXTVHDIJCB KBXTVH@CHOSLambdaトリガー利⽤したことあるものを選んでSubmitをクリックしてください。-------https://bit.ly/3sWy9Eoもしくは「Mentimeter」(https://www.menti.com/)にアクセスし、以下のコードを⼊⼒7844 7371-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨすみません。現在はアンケート募集してません
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨアンケート結果〜アンケート結果〜
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ〜アンケート結果〜1. API Gateway1. S33. EventBridge4. SQS5. Cloudwatch Logs5. DynamoDB
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨよく使われるであろうトリガーを使って、こんな感じのピタゴラスイッチ的にLambdaを数珠つなぎに実⾏してみました。
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨなお、今回も最近よく使っているAWS CDK v2にて構築しています。トリガーを設定するには、aws_lambda_event_sourcesにいくつか⽤意されているので、結構簡単に設定可能です。
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ今回、Lambdaのコードで次のトリガーとなるサービスを呼んでいるので、ちゃんと権限与えないとダメですが、それもCDKなら簡単ですね。
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ今回、注意すべきは、S3トリガーで起動するLambda関数をS3に保存するLambda関数に絶対にしないこと。
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ多重実⾏で死にます。
ϐλΰϥεΠονͯ͠ΈͨKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠ΈͨS3トリガーを設定しようとすると、以下の案内があるので、⾒直すとともに、チェックを忘れずに(チェックしないと登録できないですが。)
τϦΨʔͷ&WFOUͳͲղઆKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠ΈͨEventBridge
τϦΨʔͷ&WFOUͳͲղઆKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠ΈͨS3
τϦΨʔͷ&WFOUͳͲղઆKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠ΈͨSQS
τϦΨʔͷ&WFOUͳͲղઆKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠ΈͨSNS
τϦΨʔͷ&WFOUͳͲղઆKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠ΈͨDynamoDB
τϦΨʔͷ&WFOUͳͲղઆKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ他に⾊々とありますが、詳しくは、「他のサービスで AWS Lambda を使⽤する」(https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-services.html)もしくは、Lambdaのテストイベントのテンプレートにも⽤意されているので、そちらも参考にしてください。
ऴΘΓKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ• Lambdaトリガーは便利• API Gatewayからの呼び出しも同期呼び出しということで、トリガー分類される• ⾮同期呼び出しの場合、1回以上実⾏されるのが保証されているので、冪等性の確保を忘れずに• S3トリガーが発砲されなかったという話を聞きますが、⾃分は遭遇したことがない。• 今度はDestinationsも使ってあげたい
ऴΘΓKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨhttps://jawsug-chiba.connpass.com/event/239655/JAWS-UG千葉⽀部オンライン#15re:Invent Tech Re:Cap & ハンズオン 開催します!
ऴΘΓKBXTVHDIJCB KBXTVH@CHOS-BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨご静聴ありがとうございました