Gunakan ARN Amazon S3 bukan meneruskan muatan besar - AWS Step Functions

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan ARN Amazon S3 bukan meneruskan muatan besar

Eksekusi yang meneruskan muatan data yang besar antar status dapat dihentikan. Jika data yang Anda lewati antar status mungkin bertambah hingga lebih dari 256 KB, gunakan Amazon Simple Storage Service (Amazon S3) untuk menyimpan data, dan mengurai Amazon Resource Name (ARN) bucket dalam Payload parameter untuk mendapatkan nama bucket dan nilai kunci. Atau, sesuaikan implementasi Anda sehingga Anda meneruskan muatan yang lebih kecil dalam eksekusi Anda.

Dalam contoh berikut, mesin status meneruskan input ke AWS Lambda fungsi, yang memproses file JSON di bucket Amazon S3. Setelah Anda menjalankan mesin status ini, fungsi Lambda membaca isi file JSON, dan mengembalikan konten file sebagai output.

Buat fungsi Lambda

Fungsi Lambda berikut bernama pass-large-payload membaca konten file JSON yang disimpan dalam bucket Amazon S3 tertentu.

catatan

Setelah Anda membuat fungsi Lambda ini, pastikan Anda memberikan peran IAM-nya izin yang sesuai untuk membaca dari bucket Amazon S3. Misalnya, lampirkan ReadOnlyAccess izin AmazonS3 ke peran fungsi Lambda.

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
Buat mesin negara

Mesin status berikut memanggil fungsi Lambda yang sebelumnya Anda buat.

{ "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 } } }

Daripada meneruskan sejumlah besar data dalam input, Anda dapat menyimpan data tersebut di bucket Amazon S3, dan meneruskan Amazon Resource Name (ARN) bucket dalam Payload parameter untuk mendapatkan nama bucket dan nilai kunci. Fungsi Lambda Anda kemudian dapat menggunakan ARN tersebut untuk mengakses data secara langsung. Berikut ini adalah contoh input untuk eksekusi mesin status, di mana data disimpan data.json dalam bucket Amazon S3 bernama. large-payload-json

{ "key": "data.json", "bucket": "arn:aws:s3:::large-payload-json" }