Amazon S3 バッチオペレーションでの AWS Lambda の使用 - AWS Lambda

Amazon S3 バッチオペレーションでの AWS Lambda の使用

Amazon S3 のバッチオペレーションを使用して、大量の Amazon S3 オブジェクトに対して Lambda 関数を呼び出すことができます。Amazon S3 は、バッチオペレーションの進行状況を追跡して、通知を送信し、各アクションのステータスを示す完了レポートを保存します。

バッチオペレーションを実行するには、Amazon S3 バッチオペレーションジョブを作成します。ジョブを作成するときは、マニフェスト (オブジェクトのリスト) を用意し、それらのオブジェクトに対して実行するアクションを設定します。

バッチジョブが開始されると、Amazon S3 はマニフェスト内の各オブジェクトに対して同期的に Lambda 関数を呼び出します。イベントパラメータには、バケットとオブジェクトの名前が含まれます。

次の例は、awsexamplebucket バケット内の customerImage1.jpg という名前のオブジェクトに関して、Amazon S3 が Lambda 関数に送信するイベントを示しています。

例 Amazon S3 バッチリクエストイベント

{ "invocationSchemaVersion": "1.0", "invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "job": { "id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce" }, "tasks": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "s3Key": "customerImage1.jpg", "s3VersionId": "1", "s3BucketArn": "arn:aws:s3:us-east-1:0123456788:awsexamplebucket" } ] }

Lambda 関数は、次の例に示すように、フィールドを含む JSON オブジェクトを返す必要があります。イベントパラメータから invocationIdtaskId をコピーできます。resultString で文字列を返すことができます。Amazon S3 は、完了レポートに resultString 値を保存します。

例 Amazon S3 バッチリクエストレスポンス

{ "invocationSchemaVersion": "1.0", "treatMissingKeysAs" : "PermanentFailure", "invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "results": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "resultCode": "Succeeded", "resultString": "["Alice", "Bob"]" } ] }

Amazon S3 バッチオペレーションからの Lambda 関数の呼び出し

非修飾または修飾関数 ARN を使用して Lambda 関数を呼び出すことができます。バッチジョブ全体に同じ関数バージョンを使用する場合は、ジョブの作成時に FunctionARN パラメータで特定の関数バージョンを構成します。エイリアスまたは $LATEST 修飾子を設定した場合、ジョブ実行中にエイリアスまたは $LATEST が更新されると、バッチジョブは新しいバージョンの関数の呼び出しをただちに開始します。

既存の Amazon S3 イベントベースの関数をバッチオペレーションに再利用することはできません。これは、Amazon S3 バッチオペレーションによって異なるイベントパラメータが Lambda 関数に渡され、特定の JSON 構造を持つリターンメッセージが期待されるためです。

Amazon S3 バッチジョブ用に作成する リソースベースのポリシーで、Lambda 関数を呼び出すためのジョブに対するアクセス許可を設定していることを確認します。

関数の実行ロールで、Amazon S3 が関数の実行時にロールを引き受けるための信頼ポリシーを設定します。

関数で AWS SDK を使用して Amazon S3 リソースを管理する場合は、実行ロールに Amazon S3 のアクセス許可を追加する必要があります。

ジョブが実行されると、Amazon S3 は複数の関数インスタンスを起動して、関数の同時実行制限まで Amazon S3 オブジェクトを並列処理します。Amazon S3 は、インスタンスの初期ランプアップを制限して、小規模なジョブでコストが高くなりすぎるのを防ぎます。

Lambda 関数が TemporaryFailure レスポンスコードを返した場合、Amazon S3 はオペレーションを再試行します。

Amazon S3 バッチオペレーションの詳細は、Amazon S3 開発者ガイドの「バッチオペーションの実行」を参照してください。

Amazon S3 バッチオペレーションで Lambda 関数を使用する方法の例については、Amazon S3 開発者ガイドの「Amazon S3 バッチオペレーションからの Lambda 関数の呼び出し」を参照してください。