대용량 페이로드를 전달하는 대신 Amazon S3 ARN 사용 - AWS Step Functions

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

대용량 페이로드를 전달하는 대신 Amazon S3 ARN 사용

상태 사이에 대용량 데이터 페이로드를 전달하는 실행은 종료될 수 있습니다. 상태 간에 전달하는 데이터가 256KB를 초과할 수 있는 경우 Amazon Simple Storage Service(S3)를 사용하여 데이터를 저장하고 Payload 파라미터에서 버킷의 Amazon 리소스 이름(ARN)을 파싱하여 버킷 이름과 키 값을 가져옵니다. 또는 실행에서 더 작은 용량의 페이로드를 전달하도록 구현을 조정합니다.

다음 예제에서 상태 시스템은 입력을 Amazon S3 버킷의 JSON 파일을 처리하는 AWS Lambda 함수에 전달합니다. 이 상태 시스템을 실행하면 Lambda 함수에서 JSON 파일 콘텐츠를 읽고 파일 콘텐츠를 출력으로 반환합니다.

Lambda 함수 생성

pass-large-payload라는 다음 Lambda 함수는 특정 Amazon S3 버킷에 저장된 JSON 파일의 콘텐츠를 읽습니다.

참고

이 Lambda 함수를 만든 후에는 해당 IAM 역할에 Amazon S3 버킷에서 읽을 수 있는 적절한 권한을 제공해야 합니다. 예를 들어 AmazonS3ReadOnlyAccess 권한을 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
상태 시스템 만들기

다음 상태 시스템은 이전에 만든 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 버킷에 저장하고 버킷의 Amazon 리소스 이름(ARN)을 Payload 파라미터에 전달하여 버킷 이름과 키 값을 가져올 수 있습니다. 그러면 Lambda 함수에서 해당 ARN을 사용하여 데이터에 직접 액세스할 수 있습니다. 다음은 상태 시스템 실행을 위한 입력의 예제입니다. 여기서 데이터는 data.json이라는 Amazon S3 버킷의 large-payload-json에 저장됩니다.

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