Rufen Sie Drittanbieter APIs in Step Functions Functions-Workflows auf - 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.

Rufen Sie Drittanbieter APIs in Step Functions Functions-Workflows auf

Eine HTTP Aufgabe ist eine Art von Workflow-Status der Aufgabe Status, mit dem Sie in Ihren Workflows beliebige öffentliche Drittanbieter API wie Salesforce und Stripe aufrufen können. Um einen Drittanbieter anzurufenAPI, verwenden Sie den Aufgabenstatus mit der arn:aws:states:::http:invoke Ressource. Geben Sie dann die Details zur API Endpunktkonfiguration an, z. B. die Methode APIURL, die Sie verwenden möchten, und Authentifizierungsdetails.

Wenn Sie Workflow Studio verwenden, um Ihren Zustandsmaschine zu erstellen, der eine HTTP Aufgabe enthält, generiert Workflow Studio automatisch eine Ausführungsrolle mit IAM Richtlinien für die HTTP Aufgabe. Weitere Informationen finden Sie unter Rolle zum Testen von HTTP Aufgaben in Workflow Studio.

HTTPDefinition der Aufgabe

Die ASLDefinition stellt eine HTTP Aufgabe mit http:invoke Ressource dar. Die folgende HTTP Aufgabendefinition ruft einen Stripe aufAPI, der eine Liste aller Kunden zurückgibt.

"Call third-party API": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "ApiEndpoint": "https://api.stripe.com/v1/customers", "Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "Method": "GET" }, "End": true }

HTTPAufgabenfelder

Eine HTTP Aufgabe umfasst die folgenden Felder in ihrer Definition.

Resource (Erforderlich)

Um einen Aufgabentyp anzugeben, geben Sie ihn ARN in das Resource Feld ein. Für eine HTTP Aufgabe geben Sie das Resource Feld wie folgt an.

"Resource": "arn:aws:states:::http:invoke"
Parameters (Erforderlich)

Enthält die ConnectionArn Felder ApiEndpointMethod, und, die Informationen über den Drittanbieter enthalten, den API Sie anrufen möchten. Parametersenthält auch optionale Felder wie Headers undQueryParameters.

Sie können eine Kombination aus Statik JSON und JsonPathSyntax wie Parameters im Parameters Feld angeben. Weitere Informationen finden Sie unter Übergeben von Parametern an einen Dienst API in Step Functions.

ApiEndpoint(Erforderlich)

Gibt den Drittanbieter URL an, den API Sie anrufen möchten. Verwenden Sie das Feld, um Abfrageparameter an sie URL anzuhängen. QueryParameters Das folgende Beispiel zeigt, wie Sie einen Stripe aufrufen könnenAPI, um die Liste aller Kunden abzurufen.

"ApiEndpoint":"https://api.stripe.com/v1/customers"

Sie können mithilfe der JsonPathSyntax auch einen Referenzpfad angeben, um den JSON Knoten auszuwählen, der den Drittanbieter API URL enthält. Nehmen wir zum Beispiel an, Sie möchten einen von Stripe APIs mit einer bestimmten Kunden-ID anrufen. Stellen Sie sich vor, Sie haben die folgende Statuseingabe vorgenommen.

{ "customer_id": "1234567890", "name": "John Doe" }

Um die Details dieser Kunden-ID mit einem Stripe abzurufenAPI, geben Sie den an, ApiEndpoint wie im folgenden Beispiel gezeigt. In diesem Beispiel werden eine systeminterne Funktion und ein Referenzpfad verwendet.

"ApiEndpoint.$":"States.Format('https://api.stripe.com/v1/customers/{}', $.customer_id)"

Zur Laufzeit löst Step Functions den Wert von ApiEndpoint wie folgt auf.

https://api.stripe.com/v1/customers/1234567890
Method(Erforderlich)

Gibt die HTTP Methode an, die Sie zum Aufrufen eines Drittanbieters verwenden möchtenAPI. Sie können eine dieser Methoden in Ihrer HTTP Aufgabe angeben:GET,POST,PUT,DELETE,PATCH,OPTIONS, oderHEAD.

Um die GET Methode beispielsweise zu verwenden, geben Sie das Method Feld wie folgt an.

"Method": "GET"

Sie können auch einen Referenzpfad verwenden, um die Methode zur Laufzeit anzugeben. Beispiel, "Method.$": "$.myHTTPMethod".

Authentication(Erforderlich)

Enthält das ConnectionArn Feld, das angibt, wie ein API Anruf eines Drittanbieters authentifiziert werden soll. Step Functionsunterstützt die Authentifizierung für einen angegebenen Benutzer ApiEndpoint mithilfe der Verbindungsressource vonAmazon EventBridge.

ConnectionArn(Erforderlich)

Gibt die EventBridge Verbindung anARN.

Eine HTTP Aufgabe erfordert eine EventBridge Verbindung, die die Authentifizierungsdaten eines API Anbieters sicher verwaltet. Eine Verbindung gibt den Autorisierungstyp und die Anmeldeinformationen an, die für die Autorisierung eines Drittanbieters API verwendet werden sollen. Durch die Verwendung einer Verbindung können Sie verhindern, dass Geheimnisse wie API Schlüssel fest in Ihre Zustandsmaschinen-Definition eingebunden werden. In einer Verbindung können Sie auch RequestBody Parameter HeadersQueryParameters, und angeben.

Wenn Sie eine EventBridge Verbindung herstellen, geben Sie Ihre Authentifizierungsdetails an. Weitere Informationen darüber, wie die Authentifizierung für eine HTTP Aufgabe funktioniert, finden Sie unterAuthentifizierung für eine Aufgabe HTTP.

Das folgende Beispiel zeigt, wie Sie das Authentication Feld in Ihrer HTTP Aufgabendefinition angeben können.

"Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }
Headers (Optional)

Stellt zusätzlichen Kontext und Metadaten für den API Endpunkt bereit. Sie können Header als Zeichenfolge oder JSON Array angeben.

Sie können Header in der EventBridge Verbindung und das Headers Feld in einer HTTP Aufgabe angeben. Wir empfehlen, dass Sie in diesem Headers Feld keine Authentifizierungsinformationen für Ihre API Anbieter angeben. Wir empfehlen Ihnen, diese Informationen in Ihre EventBridge Verbindung aufzunehmen.

Step Functionsfügt die Header, die Sie in der EventBridge Verbindung angeben, zu den Headern hinzu, die Sie in der HTTP Aufgabendefinition angeben. Wenn dieselben Header-Schlüssel in der Definition und Verbindung vorhanden sind, Step Functions verwendet die entsprechenden Werte, die in der EventBridge Verbindung für diese Header angegeben wurden. Weitere Hinweise zur Durchführung der Step Functions Datenzusammenführung finden Sie unter. EventBridgeVerbindungs- und HTTP Aufgabendefinitionsdaten zusammenführen

Im folgenden Beispiel wird ein Header angegeben, der in einen API Anruf eines Drittanbieters aufgenommen wird:content-type.

"Headers": { "content-type": "application/json" }

Sie können auch einen Referenzpfad verwenden, um die Header zur Laufzeit anzugeben. Beispiel, "Headers.$": "$.myHTTPHeaders".

Step Functionslegt die User-Agent Host HeaderRange, und fest. Step Functionslegt den Wert des Host Headers basierend auf dem Wert fest, den API Sie aufrufen. Das Folgende ist ein Beispiel für diese Header.

User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1, Range: bytes=0-262144, Host: api.stripe.com

Sie können die folgenden Header nicht in Ihrer HTTP Aufgabendefinition verwenden. Wenn Sie diese Header verwenden, schlägt die HTTP Aufgabe mit dem States.Runtime Fehler fehl.

  • A-IM

  • Accept-Charset

  • Accept-Datetime

  • Accept-Encoding

  • Cache-Control

  • Verbindung

  • Content-Encoding

  • Inhalt- MD5

  • Datum

  • Expect

  • Forwarded

  • Aus

  • Host

  • HTTP2-Einstellungen

  • If-Match

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Max-Forwards

  • Urspung

  • Pragma

  • Proxy-Authorization

  • Referer

  • Server

  • TE

  • Trailer

  • Transfer-Encoding

  • Upgrade

  • Via

  • Warnung

  • x-weiterleitet-*

  • x-amz-*

  • x-amzn-*

QueryParameters (Optional)

Fügt Schlüssel-Wert-Paare am Ende eines ein. API URL Sie können Abfrageparameter als Zeichenfolge, JSON Array oder Objekt angeben. JSON Step FunctionsURLkodiert automatisch Abfrageparameter, wenn ein Drittanbieter aufgerufen wird. API

Angenommen, Sie möchten Stripe anrufen, um nach Kunden API zu suchen, die ihre Transaktionen in US-Dollar () USD tätigen. Stellen Sie sich vor, Sie haben Folgendes QueryParameters als Statuseingabe angegeben.

"QueryParameters": { "currency": "usd" }

Zur Laufzeit hängt Step Functions das API URL wie folgt QueryParameters an das an.

https://api.stripe.com/v1/customers/search?currency=usd

Sie können auch einen Referenzpfad verwenden, um die Abfrageparameter zur Laufzeit anzugeben. Beispiel, "QueryParameters.$": "$.myQueryParameters".

Wenn Sie in Ihrer EventBridge Verbindung Abfrageparameter angegeben haben, Step Functions fügt diese Abfrageparameter den Abfrageparametern hinzu, die Sie in der HTTP Aufgabendefinition angeben. Wenn dieselben Abfrageparameterschlüssel in der Definition und Verbindung vorhanden sind, Step Functions verwendet die entsprechenden Werte, die in der EventBridge Verbindung für diese Header angegeben wurden. Weitere Hinweise zur Durchführung der Step Functions Datenzusammenführung finden Sie unter. EventBridgeVerbindungs- und HTTP Aufgabendefinitionsdaten zusammenführen

Transform (Optional)

Enthält die RequestEncodingOptions Felder RequestBodyEncoding und. Step FunctionsSendet den Anforderungstext standardmäßig als JSON Daten an einen API Endpunkt.

Wenn Ihr API Anbieter form-urlencoded Anfragetexte akzeptiert, verwenden Sie das Transform Feld, um URL -encoding für die Anfragetexte anzugeben. Sie müssen den content-type Header auch als application/x-www-form-urlencoded angeben. Step FunctionsURLkodiert dann automatisch Ihren Anfragetext.

RequestBodyEncoding

Gibt die URL -Kodierung Ihres Anfragetextes an. Sie können einen dieser Werte angeben: NONE oderURL_ENCODED.

  • NONE— Der Hauptteil der HTTP Anfrage wird der serialisierte Text JSON des RequestBody Felds sein. Dies ist der Standardwert.

  • URL_ENCODED— Der Hauptteil der HTTP Anfrage besteht aus den URL -codierten Formulardaten des Feldes. RequestBody

RequestEncodingOptions

Bestimmt die Kodierungsoption, die für Arrays in Ihrem Anfragetext verwendet werden soll, wenn Sie auf einstellen. RequestBodyEncoding URL_ENCODED

Step Functionsunterstützt die folgenden Array-Kodierungsoptionen. Weitere Informationen zu diesen Optionen und ihren Beispielen finden Sie unterAnwenden von URL -encoding auf den Hauptteil der Anfrage.

  • INDICES— Kodiert Arrays mithilfe des Indexwerts von Array-Elementen. Step FunctionsVerwendet standardmäßig diese Kodierungsoption.

  • REPEAT— Wiederholt einen Schlüssel für jedes Element in einem Array.

  • COMMAS— Kodiert alle Werte in einem Schlüssel als kommagetrennte Werteliste.

  • BRACKETS— Wiederholt einen Schlüssel für jedes Element in einem Array und hängt eine Klammer [] an den Schlüssel an, um anzuzeigen, dass es sich um ein Array handelt.

Im folgenden Beispiel wird URL -encoding für die Hauptdaten der Anfrage festgelegt. Außerdem wird angegeben, dass die COMMAS Kodierungsoption für Arrays im Anforderungstext verwendet werden soll.

"Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "COMMAS" } }
RequestBody (Optional)

Akzeptiert JSON Daten, die Sie in der Statuseingabe angeben. RequestBodyIn können Sie eine Kombination aus Statik JSON und JsonPathSyntax angeben. Nehmen wir beispielsweise an, Sie geben die folgende Statuseingabe an:

{ "CardNumber": "1234567890", "ExpiryDate": "09/25" }

Um diese Werte von CardNumber und zur Laufzeit ExpiryDate in Ihrem Anfragetext zu verwenden, können Sie die folgenden JSON Daten in Ihrem Anfragetext angeben.

"RequestBody": { "Card": { "Number.$": "$.CardNumber", "Expiry.$": "$.ExpiryDate", "Name": "John Doe", "Address": "123 Any Street, Any Town, USA" } }

Wenn der Drittanbieter, den API Sie anrufen möchten, form-urlencoded Anfragetexte benötigt, müssen Sie URL -encoding für Ihre Anfragetextdaten angeben. Weitere Informationen finden Sie unter Anwenden von URL -encoding auf den Hauptteil der Anfrage.

Authentifizierung für eine Aufgabe HTTP

Für eine HTTP Aufgabe ist eine EventBridge Verbindung erforderlich, die die Authentifizierungsdaten eines API Anbieters sicher verwaltet. Eine Verbindung gibt den Autorisierungstyp und die Anmeldeinformationen an, die für die Autorisierung eines Drittanbieters API verwendet werden sollen. Durch die Verwendung einer Verbindung können Sie verhindern, dass Geheimnisse wie API Schlüssel fest in Ihre Zustandsmaschinen-Definition eingebunden werden. Eine EventBridge Verbindung unterstützt die Autorisierungsschemata BasicOAuth, und API Key.

Wenn Sie eine EventBridge Verbindung herstellen, geben Sie Ihre Authentifizierungsdetails an. Sie können auch die Header-, Text- und Abfrageparameter angeben, die für die Autorisierung mit einem erforderlich sindAPI. Sie müssen die Verbindung ARN in jede HTTP Aufgabe aufnehmen, die einen Drittanbieter aufruftAPI.

Wenn Sie eine Verbindung herstellen und Autorisierungsparameter hinzufügen, EventBridge erstellt ein Secret in AWS Secrets Manager. In diesem Secret EventBridge werden die Verbindungs- und Autorisierungsparameter in verschlüsselter Form gespeichert. Um erfolgreich eine Verbindung herzustellen oder zu aktualisieren, müssen Sie eine Verbindung verwenden, AWS-Konto die über die Berechtigung zur Verwendung von Secrets Manager verfügt. Weitere Informationen zu den IAM Berechtigungen, die Ihr State-Machine für den Zugriff auf eine EventBridge Verbindung benötigt, finden Sie unterIAMBerechtigungen zum Ausführen einer Aufgabe HTTP.

Die folgende Abbildung zeigt, wie die Authentifizierung für API Anrufe von Drittanbietern über eine EventBridge Verbindung Step Functions gehandhabt wird. Die EventBridge Verbindung, die die Anmeldeinformationen eines API Drittanbieters verwaltet. EventBridgeerstellt ein GeheimnisSecrets Manager, um die Verbindungs- und Autorisierungsparameter in verschlüsselter Form zu speichern.

Diagramm, das zeigt, wie Step Functions EventBridge Verbindungen für Anrufe an HTTP Endpunkte verwendet.

EventBridgeVerbindungs- und HTTP Aufgabendefinitionsdaten zusammenführen

Wenn Sie eine HTTP Aufgabe aufrufen, können Sie Daten in Ihrer EventBridge Verbindung und Ihrer HTTP Aufgabendefinition angeben. Zu diesen Daten gehören HeadersQueryParameters, und RequestBody Parameter. Vor dem Aufrufen eines Drittanbieters API führt Step Functions in allen Fällen den Anforderungstext mit den Parametern des Verbindungstexts zusammen, es sei denn, Ihr Anforderungstext ist eine Zeichenfolge und die Parameter für den Verbindungstext sind nicht leer. In diesem Fall schlägt die HTTP Aufgabe mit dem States.Runtime Fehler fehl.

Wenn in der HTTP Aufgabendefinition und der EventBridge Verbindung doppelte Schlüssel angegeben sind, werden die Werte in der HTTP Aufgabe mit den Werten in der Verbindung Step Functions überschrieben.

In der folgenden Liste wird beschrieben, wie Daten Step Functions zusammengeführt werden, bevor ein Drittanbieter aufgerufen wird: API

  • Header — Step Functions Fügt alle Header, die Sie in der Verbindung angegeben haben, zu den Headern im Headers Feld der Aufgabe hinzu. HTTP Wenn ein Konflikt zwischen den Headerschlüsseln besteht, Step Functions verwendet die in der Verbindung angegebenen Werte für diese Header. Wenn Sie beispielsweise den content-type Header sowohl in der HTTP Aufgabendefinition als auch in der EventBridge Verbindung angegeben haben, Step Functions verwendet es den in der Verbindung angegebenen content-type Header-Wert.

  • Abfrageparameter — Step Functions Fügt alle Abfrageparameter, die Sie in der Verbindung angegeben haben, zu den Abfrageparametern im QueryParameters Feld der HTTP Aufgabe hinzu. Wenn ein Konflikt zwischen den Abfrageparameterschlüsseln besteht, Step Functions verwendet die in der Verbindung angegebenen Werte für diese Abfrageparameter. Wenn Sie beispielsweise den maxItems Abfrageparameter sowohl in der HTTP Aufgabendefinition als auch in der EventBridge Verbindung angegeben haben, Step Functions wird der in der Verbindung angegebene maxItems Abfrageparameterwert verwendet.

  • Body-Parameter

    • Step Functionsfügt alle in der Verbindung angegebenen Werte des Anforderungstexts zum Anforderungstext im RequestBody Feld der HTTP Aufgabe hinzu. Wenn ein Konflikt zwischen den Schlüsseln des Anforderungstexts besteht, Step Functions verwendet die in der Verbindung angegebenen Werte für den Anforderungstext. Nehmen wir beispielsweise an, dass Sie sowohl in der RequestBody HTTP Aufgabendefinition als auch in der EventBridge Verbindung ein Mode Feld angegeben haben. Step Functionsverwendet den Mode Feldwert, den Sie in der Verbindung angegeben haben.

    • Wenn Sie den Anforderungstext als Zeichenfolge statt als JSON Objekt angeben und die EventBridge Verbindung auch den Anforderungstext enthält, Step Functions kann der an diesen beiden Stellen angegebene Anforderungstext nicht zusammengeführt werden. Die HTTP Aufgabe schlägt mit dem States.Runtime Fehler fehl.

    Step Functionswendet alle Transformationen an und serialisiert den Anforderungstext, nachdem die Zusammenführung des Anforderungstexts abgeschlossen ist.

Im folgenden Beispiel werden die RequestBody Felder HeadersQueryParameters, und sowohl in der Aufgabe als auch in der HTTP Verbindung festgelegt. EventBridge

HTTPAufgabendefinition

{ "Comment": "Data merging example for HTTP Task and EventBridge connection", "StartAt": "ListCustomers", "States": { "ListCustomers": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "Authentication": { "ConnectionArn": "arn:aws:events:us-east-1:123456789012:connection/Example/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "ApiEndpoint": "https:/example.com/path", "Method": "GET", "Headers": { "Request-Id": "my_request_id", "Header-Param": "state_machine_header_param" }, "RequestBody": { "Job": "Software Engineer", "Company": "AnyCompany", "BodyParam": "state_machine_body_param" }, "QueryParameters": { "QueryParam": "state_machine_query_param" } } } } }

EventBridgeVerbindung

{ "AuthorizationType": "API_KEY", "AuthParameters": { "ApiKeyAuthParameters": { "ApiKeyName": "ApiKey", "ApiKeyValue": "key_value" }, "InvocationHttpParameters": { "BodyParameters": [ { "Key": "BodyParam", "Value": "connection_body_param" } ], "HeaderParameters": [ { "Key": "Header-Param", "Value": "connection_header_param" } ], "QueryStringParameters": [ { "Key": "QueryParam", "Value": "connection_query_param" } ] } } }

In diesem Beispiel werden doppelte Schlüssel in der HTTP Aufgabe und der EventBridge Verbindung angegeben. Step FunctionsÜberschreibt daher die Werte in der HTTP Aufgabe mit den Werten in der Verbindung. Der folgende Codeausschnitt zeigt die HTTP Anfrage, die Step Functions an den Drittanbieter gesendet wird. API

POST /path?QueryParam=connection_query_param HTTP/1.1 Apikey: key_value Content-Length: 79 Content-Type: application/json; charset=UTF-8 Header-Param: connection_header_param Host: example.com Range: bytes=0-262144 Request-Id: my_request_id User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1 {"Job":"Software Engineer","Company":"AnyCompany","BodyParam":"connection_body_param"}

Anwenden von URL -encoding auf den Hauptteil der Anfrage

Standardmäßig Step Functions sendet der Anfragetext als JSON Daten an einen API Endpunkt. Wenn Ihr API Drittanbieter form-urlencoded Anforderungstexte benötigt, müssen Sie URL -encoding für die Anfragetexte angeben. Step FunctionsURLkodiert dann automatisch den Anfragetext auf der Grundlage der von Ihnen ausgewählten Option URL -encoding.

Sie geben URL -encoding mithilfe des Felds an. Transform Dieses Feld enthält das RequestBodyEncoding Feld, das angibt, ob Sie die URL -Kodierung für Ihre Anfragetexte anwenden möchten oder nicht. Wenn Sie das RequestBodyEncoding Feld angeben, wird Ihr JSON Anfragetext in den form-urlencoded Anfragetext Step Functions konvertiert, bevor der Drittanbieter API aufgerufen wird. Sie müssen auch den content-type Header angebenAPIs, application/x-www-form-urlencoded da die URL Accept-codierten Daten den content-type Header erwarten.

Step FunctionsStellt die folgenden Array-Kodierungsoptionen bereit, um Arrays in Ihrem Anfragetext zu kodieren.

  • INDICES— Wiederholt einen Schlüssel für jedes Element in einem Array und hängt eine Klammer [] an den Schlüssel an, um anzuzeigen, dass es sich um ein Array handelt. Diese Klammer enthält den Index des Array-Elements. Durch Hinzufügen des Indexes können Sie die Reihenfolge der Array-Elemente festlegen. Step FunctionsVerwendet standardmäßig diese Kodierungsoption.

    Zum Beispiel, wenn Ihr Anfragetext das folgende Array enthält.

    {"array": ["a","b","c","d"]}

    Step Functionskodiert dieses Array in die folgende Zeichenfolge.

    array[0]=a&array[1]=b&array[2]=c&array[3]=d
  • REPEAT— Wiederholt einen Schlüssel für jedes Element in einem Array.

    Zum Beispiel, wenn Ihr Anfragetext das folgende Array enthält.

    {"array": ["a","b","c","d"]}

    Step Functionskodiert dieses Array in die folgende Zeichenfolge.

    array=a&array=b&array=c&array=d
  • COMMAS— Kodiert alle Werte in einem Schlüssel als kommagetrennte Werteliste.

    Zum Beispiel, wenn Ihr Anfragetext das folgende Array enthält.

    {"array": ["a","b","c","d"]}

    Step Functionskodiert dieses Array in die folgende Zeichenfolge.

    array=a,b,c,d
  • BRACKETS— Wiederholt einen Schlüssel für jedes Element in einem Array und hängt eine Klammer [] an den Schlüssel an, um anzuzeigen, dass es sich um ein Array handelt.

    Zum Beispiel, wenn Ihr Anfragetext das folgende Array enthält.

    {"array": ["a","b","c","d"]}

    Step Functionskodiert dieses Array in die folgende Zeichenfolge.

    array[]=a&array[]=b&array[]=c&array[]=d

IAMBerechtigungen zum Ausführen einer Aufgabe HTTP

Ihre State-Machine-Ausführungsrolle muss über die secretsmanager:DescribeSecret Berechtigungen states:InvokeHTTPEndpointevents:RetrieveConnectionCredentials,secretsmanager:GetSecretValue, und verfügen, damit eine HTTP Aufgabe einen Drittanbieter aufrufen kannAPI. Das folgende IAM Richtlinienbeispiel gewährt Ihrer State-Machine-Rolle die geringsten Rechte, die für den Aufruf von Stripe erforderlich sindAPIs. Diese IAM Richtlinie gewährt der State-Machine-Rolle auch die Erlaubnis, auf eine bestimmte EventBridge Verbindung zuzugreifen, einschließlich des Geheimnisses für diese Verbindung, das in Secrets Manager gespeichert ist.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "states:InvokeHTTPEndpoint", "Resource": "arn:aws:states:us-east-2:123456789012:stateMachine:myStateMachine", "Condition": { "StringEquals": { "states:HTTPMethod": "GET" }, "StringLike": { "states:HTTPEndpoint": "https://api.stripe.com/*" } } }, { "Sid": "Statement2", "Effect": "Allow", "Action": [ "events:RetrieveConnectionCredentials", ], "Resource": "arn:aws:events:us-east-2:123456789012:connection/oauth_connection/aeabd89e-d39c-4181-9486-9fe03e6f286a" }, { "Sid": "Statement3", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:events!connection/*" } ] }

HTTPBeispiel für eine Aufgabe

Die folgende State-Machine-Definition zeigt eine HTTP AufgabeHeaders, die die RequestBody ParameterQueryParameters,Transform, und enthält. Die HTTP Aufgabe ruft einen Stripe API ( https://api.stripe.com/v1/Rechnungen) auf, um eine Rechnung zu generieren. Die HTTP Aufgabe spezifiziert außerdem URL -encoding für den Anforderungstext mithilfe der INDICES Kodierungsoption.

Vergewissern Sie sich, dass Sie eine EventBridge Verbindung hergestellt haben. Das folgende Beispiel zeigt eine Verbindung, die mit dem BASIC Authentifizierungstyp erstellt wurde.

{ "Type": "BASIC", "AuthParameters": { "BasicAuthParameters": { "Password": "myPassword", "Username": "myUsername" }, } }

Denken Sie daran, das zu ersetzen italicized Text mit Ihren ressourcenspezifischen Informationen.

{ "Comment": "A state machine that uses HTTP Task", "StartAt": "CreateInvoiceAPI", "States": { "CreateInvoiceAPI": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "ApiEndpoint": "https://api.stripe.com/v1/invoices", "Method": "POST", "Authentication": { "ConnectionArn": ""arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "Headers": { "Content-Type": "application/x-www-form-urlencoded" }, "RequestBody": { "customer.$": "$.customer_id", "description": "Monthly subscription", "metadata": { "order_details": "monthly report data" } }, "Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "INDICES" } } }, "Retry": [ { "ErrorEquals": [ "States.Http.StatusCode.429", "States.Http.StatusCode.503", "States.Http.StatusCode.504", "States.Http.StatusCode.502" ], "BackoffRate": 2, "IntervalSeconds": 1, "MaxAttempts": 3, "JitterStrategy": "FULL" } ], "Catch": [ { "ErrorEquals": [ "States.Http.StatusCode.404", "States.Http.StatusCode.400", "States.Http.StatusCode.401", "States.Http.StatusCode.409", "States.Http.StatusCode.500" ], "Comment": "Handle all non 200 ", "Next": "HandleInvoiceFailure" } ], "End": true } } }

Um diesen Zustandsmaschine auszuführen, geben Sie die Kunden-ID als Eingabe ein, wie im folgenden Beispiel gezeigt:

{ "customer_id": "1234567890" }

Das folgende Beispiel zeigt die HTTP Anfrage, die Step Functions an den Stripe gesendet wirdAPI.

POST /v1/invoices HTTP/1.1 Authorization: Basic <base64 of username and password> Content-Type: application/x-www-form-urlencoded Host: api.stripe.com Range: bytes=0-262144 Transfer-Encoding: chunked User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1 description=Monthly%20subscription&metadata%5Border_details%5D=monthly%20report%20data&customer=1234567890

Eine HTTP Aufgabe testen

Sie können das TestStateAPIüber die Konsole oder das verwendenSDK, AWS CLI um eine HTTP Aufgabe zu testen. Das folgende Verfahren beschreibt, wie Sie den TestState API in der Step Functions Konsole verwenden. Sie können die API Anfrage-, Antwort- und Authentifizierungsdetails iterativ testen, bis Ihre HTTP Aufgabe erwartungsgemäß funktioniert.

Testen Sie einen HTTP Task-Status in der Konsole Step Functions
  1. Öffnen Sie die Step Functions Functions-Konsole.

  2. Wählen Sie Create State Machine, um mit der Erstellung einer State-Machine zu beginnen, oder wählen Sie eine bestehende State-Machine aus, die eine HTTP Task enthält.

    Lesen Sie Schritt 4, wenn Sie die Aufgabe in einer vorhandenen Zustandsmaschine testen.

  3. Konfigurieren Sie im Entwurfsmodus Workflow Studio eine HTTP Aufgabe visuell. Oder wählen Sie den Codemodus, um die State-Machine-Definition aus Ihrer lokalen Entwicklungsumgebung zu kopieren und einzufügen.

  4. Wählen Sie im Entwurfsmodus im Inspektor-Panel Bedienfeld von Workflow Studio die Option Teststatus aus.

  5. Gehen Sie im Dialogfeld Teststatus wie folgt vor:

    1. Wählen Sie unter Ausführungsrolle eine Ausführungsrolle aus, um den Status zu testen. Wenn Sie nicht über eine Rolle mit ausreichenden Berechtigungen für eine HTTP Aufgabe verfügen, finden Sie weitere Informationen unter Rolle zum Testen von HTTP Aufgaben in Workflow Studio So erstellen Sie eine Rolle.

    2. (Optional) Geben Sie alle JSON Eingaben ein, die Ihr ausgewählter Bundesstaat für den Test benötigt.

    3. Behalten Sie für Inspektionsstufe die Standardauswahl von bei INFO. Diese Stufe zeigt Ihnen den Status des API Anrufs und die Statusausgabe an. Dies ist nützlich, um die API Antwort schnell zu überprüfen.

    4. Wählen Sie Test starten.

    5. Wenn der Test erfolgreich ist, wird die Statusausgabe auf der rechten Seite des Dialogfelds Teststatus angezeigt. Schlägt der Test fehl, wird ein Fehler angezeigt.

      Auf der Registerkarte Statusdetails des Dialogfelds können Sie die Statusdefinition und einen Link zu Ihrer EventBridgeVerbindung sehen.

    6. Ändern Sie die Inspektionsstufe auf TRACE. Diese Stufe zeigt Ihnen die Rohdaten von HTTP Anfrage und Antwort und ist nützlich, um Header, Abfrageparameter und andere API spezifische Details zu überprüfen.

    7. Wählen Sie das Kontrollkästchen „Geheimnisse enthüllen“. In Kombination mit TRACEkönnen Sie mit dieser Einstellung die vertraulichen Daten sehen, die durch die EventBridge Verbindung eingefügt werden, z. B. API Schlüssel. Die IAM Benutzeridentität, die Sie für den Zugriff auf die Konsole verwenden, muss berechtigt sein, die states:RevealSecrets Aktion auszuführen. Ohne diese Berechtigung wird beim Starten des Tests die Fehlermeldung „Zugriff verweigert“ ausgegeben. Step Functions Ein Beispiel für eine IAM Richtlinie, die die states:RevealSecrets Berechtigung festlegt, finden Sie unterIAMBerechtigungen für die Verwendung TestState API.

      Die folgende Abbildung zeigt einen Test für eine HTTP Aufgabe, der erfolgreich war. Die Inspektionsstufe für diesen Status ist auf TRACEeingestellt. Die Registerkarte „HTTPAnfrage und Antwort“ in der folgenden Abbildung zeigt das Ergebnis des API Anrufs eines Drittanbieters.

      Ausgabe eines ausgewählten Status, der den Test für das TRACELevel erfolgreich abgeschlossen hat.
    8. Wählen Sie Test starten.

    9. Wenn der Test erfolgreich ist, können Sie Ihre HTTP Daten auf der Registerkarte HTTPAnfrage und Antwort sehen.

Antworten auf Aufgaben werden nicht unterstützt HTTP

Eine HTTP Aufgabe schlägt mit dem States.Runtime Fehler fehl, wenn eine der folgenden Bedingungen für die zurückgegebene Antwort zutrifft:

  • Die Antwort enthält einen Inhaltstyp-Header vonapplication/octet-stream, image/*video/*, oder. audio/*

  • Die Antwort kann nicht als gültige Zeichenfolge gelesen werden. Zum Beispiel Binär- oder Bilddaten.