翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ラージペイロードを渡す代わりに Amazon S3 ARNs を使用する
状態間でデータの大きいペイロードを渡す実行を終了できます。ステートの間で渡すデータが 256 KB を超える場合、Amazon Simple Storage Service (Amazon S3) を使用してデータを保存し、バケット名とキーバリューを取得するため、Payload
パラメータでバケットの Amazon リソースネーム (ARN) を解析します。または、実行時に小さいペイロードを渡すように実装を調整します。
次の例では、ステートマシンは Amazon S3 バケットの JSON ファイルを処理する AWS Lambda 関数に入力を渡しています。このステートマシンを実行すると、Lambda 関数は JSON ファイルの内容を読み取り、ファイルの内容を出力として返します。
Lambda 関数を作成する
という名前の次の Lambda 関数は、特定の Amazon S3 バケットに保存されている JSON ファイルの内容を読み取ります。pass-large-payload
注記
この Lambda 関数を作成したら、必ず、その IAM ロールに Amazon S3 バケットから読み取るための適切なアクセス許可を付与してください。例えば、Lambda 関数のロールに AmazonS3ReadOnlyAccess のアクセス許可をアタッチします。
import json import boto3 import io import os s3 = boto3.client('s3') def lambda_handler(event, context): event = event['Input'] final_json = str() s3 = boto3.resource('s3') bucket = event['bucket'].split(':')[-1] filename = event['key'] directory = "/tmp/{}".format(filename) s3.Bucket(bucket).download_file(filename, directory) with open(directory, "r") as jsonfile: final_json = json.load(jsonfile) os.popen("rm -rf /tmp") return final_json
ステートマシンを作成する
次のステートマシンは、以前に作成した Lambda 関数を呼び出します。
{ "StartAt":"Invoke Lambda function", "States":{ "Invoke Lambda function":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "FunctionName":"arn:aws:lambda:us-east-2:123456789012:function:
pass-large-payload
", "Payload":{ "Input.$":"$" } }, "OutputPath": "$.Payload", "End":true } } }
大量のデータを入力で渡すのではなく、そのデータを Amazon S3 バケットに保存し、Payload
パラメータでバケットの Amazon リソースネーム (ARN) を解析して、バケット名とキーバリューを取得します。Lambda 関数はその ARN を使用してデータに直接、アクセスできます。次に示しているステートマシン実行の入力例では、データが
という名前の Amazon S3 バケット内の large-payload-json
data.json
に保存されています。
{
"key": "data.json",
"bucket": "arn:aws:s3:::large-payload-json
"
}