Verwenden Sie Amazon S3 S3-ARNs, anstatt große Nutzlasten zu übergeben - AWS Step Functions

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie Amazon S3 S3-ARNs, anstatt große Nutzlasten zu übergeben

Ausführungen, die große Datennutzlasten zwischen Zuständen übergeben, können beendet werden. Wenn die Daten, die Sie zwischen Bundesstaaten übertragen, möglicherweise auf über 262.144 Byte anwachsen, verwenden Sie Amazon Simple Storage Service (Amazon S3), um die Daten zu speichern, und analysieren Sie den Amazon-Ressourcennamen (ARN) des Buckets imPayloadParameter, um den Bucket-Namen und den Schlüsselwert abzurufen. Alternativ passen Sie Ihre Implementierung an, sodass Sie in Ihren Ausführungen kleinere Nutzlasten übergeben.

Im folgenden Beispiel übergibt eine Zustandsmaschine Eingaben an eineAWS LambdaFunktion, die eine JSON-Datei in einem Amazon-S3-Bucket verarbeitet. Nachdem Sie diese Zustandsmaschine ausgeführt haben, liest die Lambda-Funktion den Inhalt der JSON-Datei und gibt den Dateiinhalt als Ausgabe zurück.

So erstellen Sie die Lambda-Funktion:

Die folgende Lambda-Funktion mit dem Namenpass-large-payloadliest den Inhalt einer JSON-Datei in einem bestimmten Amazon-S3-Bucket gespeichert.

Anmerkung

Nachdem Sie diese Lambda-Funktion erstellt haben, stellen Sie sicher, dass Sie ihrer IAM-Rolle die entsprechende Berechtigung zum Lesen aus einem Amazon S3 S3-Bucket erteilen. Hängen Sie zum Beispiel dieAmazon S3ReadOnlyAccessBerechtigung für die Rolle der Lambda-Funktion.

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

Erstellen Sie die Zustandsautomaten

Die folgende Zustandsmaschine ruft die Lambda-Funktion auf, die Sie zuvor erstellt haben.

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

Anstatt eine große Datenmenge in der Eingabe zu übergeben, könnten Sie diese Daten in einem Amazon-S3-Bucket speichern und den Amazon-Ressourcennamen (ARN) des Buckets in der DateiPayloadParameter, um den Bucket-Namen und den Schlüsselwert abzurufen. Ihre Lambda-Funktion kann dann diesen ARN verwenden, um direkt auf die Daten zuzugreifen. Das Folgende ist eine Beispieleingabe für die State-Machine-Ausführung, in der die Daten gespeichert sinddata.jsonin einem Amazon-S3-Bucket namenslarge-payload-json.

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