Verwenden Sie Amazon S3 S3-ARNs, anstatt große Nutzlasten weiterzuleiten - 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 weiterzuleiten

Ausführungen, die große Datennutzlasten zwischen Zuständen übergeben, können beendet werden. Wenn die Daten, die Sie zwischen Bundesstaaten übertragen, auf über 256 KB anwachsen könnten, verwenden Sie Amazon Simple Storage Service (Amazon S3), um die Daten zu speichern, und analysieren Sie den Amazon-Ressourcennamen (ARN) des Buckets im Payload Parameter, 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 eine AWS Lambda Funktion, die eine JSON-Datei in einem Amazon S3 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 Namen pass-large-payload liest den Inhalt einer JSON-Datei, die in einem bestimmten Amazon S3 S3-Bucket gespeichert ist.

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. Fügen Sie beispielsweise die ReadOnlyAccessAmazonS3-Berechtigung der Rolle der Lambda-Funktion hinzu.

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 Zustandsmaschine

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 S3-Bucket speichern und den Amazon-Ressourcennamen (ARN) des Buckets im Payload Parameter übergeben, um den Bucket-Namen und den Schlüsselwert zu erhalten. Ihre Lambda-Funktion kann dann diesen ARN verwenden, um direkt auf die Daten zuzugreifen. Im Folgenden finden Sie eine Beispieleingabe für die State-Machine-Ausführung, bei der die Daten data.json in einem Amazon S3 S3-Bucket mit dem Namen gespeichert werdenlarge-payload-json.

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