$30 off During Our Annual Pro Sale. View Details »

Lambdaトリガーでピタゴラスイッチしてみた / jawsug_bgnr46lt

Lambdaトリガーでピタゴラスイッチしてみた / jawsug_bgnr46lt

2022.02.22 JAWS-UG 初心者支部#46 AWS Builders Online Series recap4 LT資料です。

Kenichiro Wada

February 22, 2022
Tweet

More Decks by Kenichiro Wada

Other Decks in Technology

Transcript

  1. -BNCEBτϦΨʔͰ
    ϐλΰϥεΠονͯ͠Έͨ
    BXT KBXTVH KBXTVH@CHOS
    2022.02.22
    JAWS-UG 初⼼者⽀部#46
    AWS Builders Online Series recap4
    和⽥健⼀郎@Keni_W

    View Slide

  2. ࠓ೔࿩͢͜ͱ
    KBXTVHDIJCB KBXTVH@CHOS
    • ⾃⼰紹介
    • きっかけ
    • Lambdaのトリガー
    • ピタゴラスイッチしてみた
    • トリガーのEventなど解説
    • 終わり
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ

    View Slide

  3. ⾃⼰紹介
    ⽒名:和⽥ 健⼀郎
    所属:アイレット株式会社 エンジニア
    JAWS-UG 千葉 運営メンバー
    SORACOM UG 東京 運営メンバー
    Twitter: @Keni_W Facebook : kenichiro.wada.3
    好きなAWSサービス : AWS Lambda
    2021 APN AWS Top Engineers
    2020年共著でサーバーレスの本書きました

    View Slide

  4. ͖͔͚ͬ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    • この話は元ネタは、運営の織⽥さんとのこんな
    やりとりから始まりました。

    View Slide

  5. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    • AWS Lambdaは現状、FaaS(Function as a Service)
    の代表格とも⾔える AWSのコンピューティングサービス
    です。
    • マネージメントコンソールやAPIを利⽤して、コードの
    アップロードするだけで、実⾏することができます。
    • つまり、開発者はサーバーの構築、管理は⼀切不要で、
    コードの実装のみに集中することができます。
    • また、リクエストに応じて、⾃動的にスケーリングを
    ⾏ってくれます。
    • リクエスト毎の課⾦となるため、関数が実⾏されない時
    には、⼀切料⾦が発⽣しません。そのため、Amazon
    EC2を利⽤した場合に⽐べて⼤幅に料⾦が下がるケース
    もあります。
    (基礎から学ぶサーバーレス開発 SECTION-004より)

    View Slide

  6. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    サーバーのことを考えずに
    コードを実⾏する

    View Slide

  7. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    Lambdaのコンソールで、関数左側にあるのが、
    トリガーですね。
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ

    View Slide

  8. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    ⼀⽅、右に出てくるのが、Destinationsです。
    ごめんなさい。こっち使うの忘れました。
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ

    View Slide

  9. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    スーパー猫の⽇現在、
    トリガーの種類はこんな感じ。

    View Slide

  10. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    トリガー⾃体は、以下の2つ。
    ・同期呼び出し
    この呼び出し⽅法では、Lambdaは関数を実⾏し、レスポンスを待ちます。
    関数の実⾏が完了したら、呼び出し元にそのレスポンスを返却します。
    関数内でエラーになった、タイムアウト時間に達した場合などで関数からエラーが返った場合、
    エラーのレスポンスを確認し、呼び出し元で、再度処理を⾏うかを判断するようにします。
    ・⾮同期呼び出し
    この呼び出し⽅法では、Lambdaは⼀旦イベントを内部のキューに送信し、別のプロセスがそのキューから、
    イベントを読み込み、関数が実⾏されます。
    呼び出し元では、キューに追加の可否のみ受け取ることができます。
    この呼び出し⽅法で注意が必要なのは、
    ⾮同期実⾏の場合、最低 1回は実⾏されることが保証されますが、1回しか実⾏することを保証していませ
    ん。つまり、1回以上実⾏されることあるということです。
    そのため、1回実⾏でも、複数回実⾏でも結果を同⼀になるような考慮をしておく必要があります、これを
    べき等性の確保と⾔います。
    また、同期実⾏と異なり、関数内でエラーになった場合、Lambdaは関数を標準では2回リトライします。
    合計 3回のリトライで失敗した場合は、Amazon SQSのキューやAmazon SNSのトピックにイベントを送
    信することで、エラー状況を知ることが可能です。
    (基礎から学ぶサーバーレス開発 SECTION-004より)

    View Slide

  11. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    突然ですが、ここでアンケートです。
    以下のURLにアクセスするか、
    QRコードを読み取ってください。
    https://bit.ly/3sWy9Eo
    もしくは
    「Mentimeter」
    (https://www.menti.com/)に
    アクセスし、以下のコードを⼊⼒
    7844 7371
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    すみません。
    現在はアンケート募集してません

    View Slide

  12. -BNCEBͷτϦΨʔ
    KBXTVHDIJCB KBXTVH@CHOS
    Lambdaトリガー利⽤したことあるものを選んで
    Submitをクリックしてください。
    -------
    https://bit.ly/3sWy9Eo
    もしくは
    「Mentimeter」
    (https://www.menti.com/)に
    アクセスし、以下のコードを⼊⼒
    7844 7371
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    すみません。
    現在はアンケート募集してません

    View Slide

  13. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    アンケート結果
    〜アンケート結果〜

    View Slide

  14. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    〜アンケート結果〜
    1. API Gateway
    1. S3
    3. EventBridge
    4. SQS
    5. Cloudwatch Logs
    5. DynamoDB

    View Slide

  15. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    よく使われるであろうトリガーを使って、こんな
    感じのピタゴラスイッチ的にLambdaを数珠つな
    ぎに実⾏してみました。

    View Slide

  16. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    なお、今回も最近よく使っているAWS CDK v2に
    て構築しています。
    トリガーを設定するには、
    aws_lambda_event_sourcesに
    いくつか⽤意されているので、
    結構簡単に設定可能です。

    View Slide

  17. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ

    View Slide

  18. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    今回、Lambdaのコードで次のトリガーとなる
    サービスを呼んでいるので、ちゃんと権限与えな
    いとダメですが、それもCDKなら簡単ですね。

    View Slide

  19. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    今回、注意すべきは、S3トリガーで起動する
    Lambda関数をS3に保存するLambda関数に絶対
    にしないこと。

    View Slide

  20. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    多重実⾏で
    死にます。

    View Slide

  21. ϐλΰϥεΠονͯ͠Έͨ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    S3トリガーを設定しようとすると、以下の案内が
    あるので、⾒直すとともに、チェックを忘れずに
    (チェックしないと登録できないですが。)

    View Slide

  22. τϦΨʔͷ&WFOUͳͲղઆ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    EventBridge

    View Slide

  23. τϦΨʔͷ&WFOUͳͲղઆ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    S3

    View Slide

  24. τϦΨʔͷ&WFOUͳͲղઆ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    SQS

    View Slide

  25. τϦΨʔͷ&WFOUͳͲղઆ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    SNS

    View Slide

  26. τϦΨʔͷ&WFOUͳͲղઆ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    DynamoDB

    View Slide

  27. τϦΨʔͷ&WFOUͳͲղઆ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    他に⾊々とありますが、
    詳しくは、
    「他のサービスで AWS Lambda を使⽤する」
    (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-services.html)
    もしくは、
    Lambdaのテストイベントのテンプレート
    にも⽤意されているので、
    そちらも参考にしてください。

    View Slide

  28. ऴΘΓ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    • Lambdaトリガーは便利
    • API Gatewayからの呼び出しも同期呼び出しと
    いうことで、トリガー分類される
    • ⾮同期呼び出しの場合、1回以上実⾏されるの
    が保証されているので、冪等性の確保を忘れず

    • S3トリガーが発砲されなかったという話を聞き
    ますが、⾃分は遭遇したことがない。
    • 今度はDestinationsも使ってあげたい

    View Slide

  29. ऴΘΓ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    https://jawsug-chiba.connpass.com/event/239655/
    JAWS-UG千葉⽀部オンライン#15
    re:Invent Tech Re:Cap & ハンズオン 開催します!

    View Slide

  30. ऴΘΓ
    KBXTVHDIJCB KBXTVH@CHOS
    -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
    ご静聴
    ありがとう
    ございました

    View Slide