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

(2023.08.17 Update)Detecting and stopping recursive loops in AWS Lambda functionsで AWS Lambdaの無限ループを防ぐ! / jaws-ug-shizuoka

(2023.08.17 Update)Detecting and stopping recursive loops in AWS Lambda functionsで AWS Lambdaの無限ループを防ぐ! / jaws-ug-shizuoka

2023.08.12 JAWS-UG静岡支部 AWS勉強会での発表内容です。
2023.08.17 誤りがあったので、その部分をアップデートしました。

Kenichiro Wada

August 12, 2023
Tweet

More Decks by Kenichiro Wada

Other Decks in Technology

Transcript

  1. BXT KBXTVH "846TFS(SPVQT BXTDPNNVOJUZ
    2023.08.12
    JAWS-UG静岡⽀部 AWS勉強会
    和⽥健⼀郎@Keni_W
    %FUFDUJOHBOETUPQQJOHSFDVSTJWFMPPQT
    JO"84-BNCEBGVODUJPOTͰ
    "84-BNCEBͷແݶϧʔϓΛ๷͙ʂ
    6QEBUF7FS

    View Slide

  2. ࠓ೔࿩͢͜ͱ
    • ⾃⼰紹介
    • AWS Lambdaとは
    • Detecting and stopping recursive loops
    in AWS Lambda functions
    • まとめ
    +"846(੩Ԭࢧ෦"84ษڧձ-5

    View Slide

  3. ⾃⼰紹介
    ⽒名:和⽥ 健⼀郎
    所属:アイレット株式会社 エンジニア
    JAWS-UG 千葉 運営メンバー
    SORACOM UG東京 運営メンバー
    Twitter: @Keni_W Facebook : kenichiro.wada.3
    好きなAWSサービス : AWS Lambda
    実は静岡市⽣まれです!
    AWS Community Builder(Serverless)
    SORACOM MVC 2022

    View Slide

  4. KBXTVH
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    ࣗݾ঺հଓ͖
    • いわゆる戦国三英傑では、徳川家康が好きです。
    • 全員愛知⽣まれだろうは突っ込まないで。
    • とある勉強会の影響で、静岡を舞台にした
    「ローカル⼥⼦の遠吠え」にハマりました。
    • さわやかは2019年に初めて⾷べた⼈です。
    • 今回も⾷べたいけど台⾵次第かな・・・。
    • 静岡おでんは好き。
    • 静岡富⼠⼭空港は写真撮りに⾏っただけの⼈

    View Slide

  5. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    • AWS Lambdaは現状、FaaS(Function as a Service)
    の代表格とも⾔える AWSのコンピューティングサービス
    です。
    • マネージメントコンソールやAPIを利⽤して、コードの
    アップロードするだけで、実⾏することができます。
    • つまり、開発者はサーバーの構築、管理は⼀切不要で、
    コードの実装のみに集中することができます。
    • また、リクエストに応じて、⾃動的にスケーリングを
    ⾏ってくれます。
    • リクエスト毎の課⾦となるため、関数が実⾏されない時
    には、⼀切料⾦が発⽣しません。そのため、Amazon
    EC2を利⽤した場合に⽐べて⼤幅に料⾦が下がるケース
    もあります。
    (弊書基礎から学ぶサーバーレス開発 SECTION-004より)

    View Slide

  6. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    サーバーのことを考えずに
    コードを実⾏する

    View Slide

  7. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    料⾦は、こんな感じなのです(東京リージョン)が、
    趣味(ハンズオンとかちょっとした開発)で
    利⽤している限りは、無料利⽤枠があるので、
    普通に使っている限りは、課⾦されることはまずないです。

    View Slide

  8. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    料⾦は、こんな感じなのです(東京リージョン)が、
    趣味(ハンズオンとかちょっとした開発)で
    利⽤している限りは、無料利⽤枠があるので、
    普通に使っている限りは、課⾦されることはまずないです。

    View Slide

  9. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    そう、普通に使っている限りは・・・。

    View Slide

  10. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    構成(想定)
    AWS Lambda
    Amazon CloudFront
    Amazon Simple Storage
    Service
    バケットA AWS Lambda
    Amazon Simple Storage
    Service
    バケットB
    User
    ①ユーザーはCFn経由で、
    ファイルをS3バケットA
    にアップロード
    ②S3トリガーでLambda
    が起動。Lambda関数内
    で、バケットBにファイ
    ルをコピーし、元のファ
    イルを削除
    ③バケットBでもS3トリ
    ガーでLambdaが起動し、
    後続処理を実⾏

    View Slide

  11. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    察しの良い⽅は、
    この図を⾒た時点で、
    何をしたかお分かりになるかと
    思いますが・・・。

    View Slide

  12. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    AWS Lambda
    Amazon CloudFront バケットA
    User
    ①ユーザーはCFn経由で、
    ファイルをS3バケットA

    アップロード
    ②S3トリガーでLambdaが起動。
    Lambda関数内で、バケットBバケットA
    にファイルをコピーし、元のファイルを削除



    ③S3トリガーでLambdaが起動。
    Lambda関数内で、バケットBバケットA
    にファイルをコピーし、元のファイルを削除
    ④S3トリガーでLambdaが起動。
    Lambda関数内で、バケットBバケットA
    にファイルをコピーし、元のファイルを削除
    ⑤S3トリガーでLambdaが起動。
    Lambda関数内で、バケットBバケットA
    にファイルをコピーし、元のファイルを削除
    構成(実際)

    View Slide

  13. "84-BNCEBͱ͸
    +"846(੩Ԭࢧ෦"84ษڧձ-5

    View Slide

  14. +"846(੩Ԭࢧ෦"84ษڧձ-5

    View Slide

  15. +"846(੩Ԭࢧ෦"84ษڧձ-5
    https://aws.amazon.com/jp/about-aws/whats-new/2023/07/aws-lambda-detects-recursive-loops-lambda-functions/

    View Slide

  16. %FUFDUJOHBOETUPQQJOHSFDVSTJWFMPPQTJO"84-BNCEBGVODUJPOT
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    • Lambda関数の再起ループの検出と停⽌を⾏う。
    • Amazon SQS、Amazon SNSトリガーでのループ
    に対応
    • 16回のループ実⾏後、停⽌
    • AWS Health Dashboardと連絡先に指定された
    メールに案内が来る
    • 放置しておくと、毎⽇連絡が来るケースがある。
    (DLQなしのSQSでループした場合)

    View Slide

  17. %FUFDUJOHBOETUPQQJOHSFDVSTJWFMPPQTJO"84-BNCEBGVODUJPOT
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    Amazon S3
    対応してないじゃん!

    View Slide

  18. %FUFDUJOHBOETUPQQJOHSFDVSTJWFMPPQTJO"84-BNCEBGVODUJPOT
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    とはいえ、いい仕組みだと思うので、
    検証もしてみました。

    View Slide

  19. KBXTVH
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    https://zenn.dev/keni_w/articles/acbfd69a2c7dbb
    詳細は公開済みなので、
    ご覧ください。

    View Slide

  20. %FUFDUJOHBOETUPQQJOHSFDVSTJWFMPPQTJO"84-BNCEBGVODUJPOT
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    Demo

    View Slide

  21. ·ͱΊ
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    • Lambda関数の再起ループの検出と停⽌を⾏うもの。
    • 現状は、対応しているのは、
    • Amazon SQS
    • Amazon SNS
    • Amazon S3は対応していないので、注意!
    • SQSのキュー⾃体を数珠繋ぎ(ピタゴラスイッチ)に
    したものについては、おそらく対応していない。
    • ごめんなさい。対応していました。

    View Slide

  22. ·ͱΊ
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    AWS Lambda
    Amazon Simple Storage
    Service
    Bucket
    with
    objects
    AWS Lambda
    Amazon Simple Storage
    Service
    Bucket
    with
    objects
    User
    ①ユーザーは
    S3バケットAに
    アップロード
    ②S3トリガーでLambda
    が起動。Lambda関数内
    で、ファイル内のデータ
    を使って処理後、バケッ
    トBにファイルをコピー
    ③S3トリガーでLambda
    が起動。Lambda関数内
    で、ファイル内のデータ
    を使って処理後、バケッ
    トCにファイルをコピー
    Amazon Simple Storage
    Service
    Bucket
    with
    objects
    AWS Lambda
    ④S3トリガーでLambda
    が起動。Lambda関数内
    で、ファイル内のデータ
    を使って処理後、バケッ
    トAにファイルをコピー
    ⑤②と同様
    こういうやつ
    (S3は無理ですが、次ページのような構成は検知します。)

    View Slide

  23. ·ͱΊ
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    この構成は検知してくれます。

    View Slide

  24. ·ͱΊ
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    とりあえず、
    Amazon S3に
    対応してくれることを
    願います!

    View Slide

  25. ·ͱΊ
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    あ、忘れてましたが・・・

    View Slide

  26. ·ͱΊ
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    ループになるような
    構成・設定にしないこと!

    View Slide

  27. ·ͱΊ
    +"846(੩Ԭࢧ෦"84ษڧձ-5
    そもそもループになるような
    構成・設定にしないこと!

    View Slide

  28. KBXTVH
    ご静聴
    ありがとう
    ございました
    +"846(੩Ԭࢧ෦"84ษڧձ-5

    View Slide