AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

Lambdaの再帰ループ検出にS3が追加された件について

0

以前、AWSから「S3 が Lambda 関数のイベントソースやトリガーではない Lambda と S3 を経由する再帰呼び出しは、約 16 回の再帰呼び出し後に検出され、終了されます。」と通知が届きました。 この通知内容は、S3→Lambda→S3→LambdaのようにS3とLambda間でループが発生する場合にも再帰呼び出しを検出し終了されますか。 それともS3、SNS、Lambda間でループが発生する際に検出されるものですか。

質問済み 2ヶ月前140ビュー
2回答
1
承認された回答

私のAWSアカウントで試してみました。
S3→Lambda→S3の構成で無限ループさせましたが止まりませんでした。
Lambdaのコードは以下のようにしてS3にアップロードしています。(テストする際は注意してください)

import json
import boto3
from datetime import datetime

s3 = boto3.client('s3')

def lambda_handler(event, context):
    file_contents = '[{"name": "tomoki","age": 21},{"name": "yamaoka","age": 21}]'
    bucket = 'kobayashi-lambda'
    key = 'test_' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.json'
    response = s3.put_object(Body=file_contents, Bucket=bucket, Key=key)
    return response

結果としては以下のように65個オブジェクトが作成されました。(途中でS3の設定とLambdaを削除して無理やり止めました) a

上記のS3→Lambda→S3の構成は止まらないと以下のブログでも紹介されていました。
おそらく2024年10月現在はこの構成では対応していないのではないかと思います。
https://thaimai.tech/aws-lambda-recursion-detection-feature-added-s3/

profile picture
エキスパート
回答済み 2ヶ月前
-1

通知の内容は、S3とLambda間で直接的なループが発生する場合(S3→Lambda→S3→Lambda)にも適用されます。

AWS Lambdaは、関数の再帰的な呼び出しを検出し、一定回数後に終了させる機能を持っています。この機能は、S3がLambda関数のイベントソースやトリガーとして直接設定されていない場合でも、S3を経由して間接的に再帰呼び出しが発生するシナリオをカバーするように拡張されました。

つまり、S3→Lambda→S3→Lambdaのようなパターンでも、約16回の再帰呼び出し後に検出され、終了されます。この仕組みは、意図しない無限ループによるリソースの過剰消費や予期せぬコストの発生を防ぐために実装されています。

ただし、S3、SNS、Lambda間など、より複雑なループパターンについても同様に検出される可能性がありますが、具体的な動作はループの構造や各サービスの設定によって異なる場合があります。

重要なのは、この機能がS3とLambda間の直接的な再帰呼び出しだけでなく、S3を経由する間接的な再帰呼び出しも対象としていることです。したがって、システム設計時にはこの動作を考慮し、意図しない再帰呼び出しが発生しないよう注意する必要があります。
Sources
Invoke a Lambda function from an Amazon S3 trigger - AWS Lambda
Tutorial: Using an Amazon S3 trigger to invoke a Lambda function - AWS Lambda

profile picture
回答済み 2ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ