View a markdown version of this page

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

Eine HTTP-Task ist eine Art von Workflow-Status der Aufgabe Geben Sie an, mit dem Sie HTTPS-APIs in Ihren Workflows aufrufen können. Die API kann öffentlich sein, z. B. SaaS-Anwendungen von Drittanbietern wie Stripe oder Salesforce. Sie können auch eine private API aufrufen, z. B. HTTPS-based Anwendungen in einer Amazon Virtual Private Cloud.

Für die Autorisierung und Netzwerkkonnektivität benötigt eine HTTP-Task eine EventBridge Verbindung.

Um eine HTTPS-API aufzurufen, verwenden Sie die Aufgabe Staat mit dem arn:aws:states:::http:invoke Ressource. Geben Sie dann die Konfigurationsdetails des API-Endpunkts an, z. B. die API-URL, die Methode, die Sie verwenden möchten, und Verbindung Einzelheiten.

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

Anmerkung

HTTP Task unterstützt derzeit nur öffentliche Domainnamen mit öffentlich vertrauenswürdigen Zertifikaten für HTTPS-Endpunkte, wenn private APIs verwendet werden. HTTP Task unterstützt kein gegenseitiges TLS (mTLS).

Konnektivität für eine HTTP-Task

Eine HTTP-Task erfordert eine EventBridge Verbindung, das die Authentifizierungsdaten eines API-Anbieters sicher verwaltet. EIN Verbindung definiert die Autorisierungsmethode und die Anmeldeinformationen, die für die Verbindung zu einer bestimmten API verwendet werden sollen. Wenn Sie eine Verbindung zu einer privaten API herstellen, z. B. zu einer privaten API in einer Amazon Virtual Private Cloud (Amazon VPC), können Sie die Verbindung auch verwenden, um eine sichere Punkt-zu-Punkt-Netzwerkkonnektivität zu definieren. Durch die Verwendung einer Verbindung können Sie vermeiden, Secrets wie API-Schlüssel durch Hartkodierung in die Definition Ihres Zustandsautomaten einzubetten. Und EventBridge Die Verbindung unterstützt die Autorisierungsschemata Basic, OAuth und API Key.

Wenn Sie eine erstellen EventBridge Bei der Verbindung geben Sie Ihre Autorisierungs- und Netzwerkverbindungsdetails an. Sie können auch die Header-, Text- und Abfrageparameter angeben, die für die Autorisierung mit einer API erforderlich sind. Sie müssen den Verbindungs-ARN in jede HTTP-Task einbeziehen, die eine HTTPS-API aufruft.

Wenn Sie eine Verbindung erstellen, EventBridge erstellt eine Geheimnis in AWS Secrets Manager. In diesem Geheimnis EventBridge speichert die Verbindungs- und Autorisierungsparameter in verschlüsselter Form. Um eine Verbindung erfolgreich zu erstellen oder zu aktualisieren, müssen Sie eine verwenden AWS-Konto das die Erlaubnis hat, Secrets Manager zu verwenden. Für weitere Informationen über den IAM Berechtigungen, die Ihre Zustandsmaschine benötigt, um auf eine zuzugreifen EventBridge Verbindung, siehe IAM-Berechtigungen zum Ausführen einer HTTP-Task.

Das folgende Bild zeigt, wie Step Functions verarbeitet die Autorisierung für HTTPS-API-Aufrufe mithilfe einer EventBridge Verbindung. Die EventBridge Die Verbindung verwaltet die Anmeldeinformationen eines HTTPS-API-Anbieters. EventBridge erstellt eine Geheimnis in Secrets Manager um die Verbindungs- und Autorisierungsparameter in verschlüsselter Form zu speichern. Im Fall von privaten APIs EventBridge speichert auch die Konfigurationen der Netzwerkkonnektivität.

Timeouts für Verbindungen

Bei HTTP-Aufgabenanfragen wird das Zeitlimit nach 60 Sekunden überschritten.

Step Functions verwendet Autorisierung und Netzwerkkonfiguration in EventBridge Verbindungen für Aufrufe an HTTPS-Endpunkte.

HTTP-Aufgabendefinition

Die ASL-Definition steht für eine HTTP-Task mit http:invoke Ressource. Die folgende HTTP-Aufgabendefinition ruft eine öffentliche Stripe-API auf, die eine Liste aller Kunden zurückgibt.

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

HTTP-Aufgabenfelder

Eine HTTP-Task enthält die folgenden Felder in ihrer Definition.

Resource (Erforderlich)

Um eine anzugeben Aufgabentyp, geben Sie seinen ARN in der Resource Feld. Für eine HTTP-Task geben Sie das an Resource Feld wie folgt.

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

Enthält die ApiEndpoint, Method, und ConnectionArn Felder, die Informationen über die HTTPS-API enthalten, die Sie aufrufen möchten. Parameters enthält auch optionale Felder wie Headers und QueryParameters.

Sie können eine Kombination aus statischem JSON und angeben JsonPath Syntax als Parameters in der Parameters Feld. Weitere Informationen finden Sie unter Übergeben von Parametern an eine Service-API in Step Functions.

Um den zu spezifizieren EventBridge Verbindung, verwenden Sie entweder Authentication oder InvocationConfig Feld.

ApiEndpoint (Erforderlich)

Gibt die URL der HTTPS-API an, die Sie aufrufen möchten. Um Abfrageparameter an die URL anzuhängen, verwenden Sie den QueryParameters Feld. Das folgende Beispiel zeigt, wie Sie eine Stripe-API aufrufen können, um die Liste aller Kunden abzurufen.

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

Sie können auch eine angeben Referenzpfad unter Verwendung der JsonPath Syntax zur Auswahl des JSON-Knotens, der die HTTPS-API-URL enthält. Angenommen, Sie möchten eine der APIs von Stripe mit einer bestimmten Kunden-ID aufrufen. Stellen Sie sich vor, Sie haben die folgende Statuseingabe eingegeben.

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

Um die Details dieser Kunden-ID mithilfe einer Stripe-API abzurufen, geben Sie Folgendes an ApiEndpoint wie im folgenden Beispiel gezeigt. In diesem Beispiel wird ein verwendet intrinsische Funktion und ein Referenzpfad.

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

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

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

Gibt die HTTP-Methode an, die Sie für den Aufruf einer HTTPS-API verwenden möchten. Sie können eine dieser Methoden in Ihrer HTTP-Task angeben: GET, POST, PUT, DELETE, PATCH, OPTIONS oder HEAD.

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

"Method": "GET"

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

Authentication (Befristet)

Wir empfehlen die Verwendung InvocationConfig über Authentication sowohl für öffentliche als auch für private HTTPS-API-Aufrufe.

Bestehend Authentication Referenzen werden aus Gründen der Abwärtskompatibilität beibehalten. In dem Feld müssen Sie eine angeben ConnectionArn Feld, das eine Verbindungsressource von angibt Amazon EventBridge um eine Verbindung mit dem herzustellen ApiEndpoint.

InvocationConfig (Befristet)

Enthält die Autorisierungs- und Netzwerkkonnektivitätskonfiguration für beides öffentliche und private HTTPS-API-Aufrufe.

Step Functions verarbeitet die Verbindung für einen bestimmten ApiEndpoint verwendet die Verbindungsressource von Amazon EventBridge. Weitere Informationen finden Sie unter Verbindung zu privaten APIs herstellen in der Amazonas EventBridge Benutzerleitfaden.

ConnectionArn (Erforderlich)

Gibt den an EventBridge Verbindungs-ARN.

Eine HTTP-Task erfordert eine EventBridge Verbindung, das die Autorisierungsdaten eines API-Anbieters sicher verwaltet. EIN Verbindung gibt den Autorisierungstyp und die Anmeldeinformationen an, die für die Autorisierung einer HTTPS-API verwendet werden sollen. Bei privaten APIs definiert die Verbindung auch eine sichere Punkt-zu-Punkt-Netzwerkkonnektivität. Durch die Verwendung einer Verbindung können Sie vermeiden, Secrets wie API-Schlüssel durch Hartkodierung in die Definition Ihres Zustandsautomaten einzubetten. In einer Verbindung können Sie auch Folgendes angeben Headers, QueryParameters, und RequestBody Parameter.

Weitere Informationen finden Sie unter Konnektivität für eine HTTP-Task.

Das folgende Beispiel zeigt das Format von InvocationConfig in einer HTTP-Task:

"InvocationConfig": { "ConnectionArn": "arn:aws:events:region:account-id:connection/connection-id" }
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 Headers Feld in einer HTTP-Task. Wir empfehlen, dass Sie keine Authentifizierungsdetails für Ihre API-Anbieter in das Headers Feld. Wir empfehlen Ihnen, diese Informationen in Ihr EventBridge Verbindung.

Step Functions fügt die Header hinzu, die Sie in der EventBridge Verbindung zu den Headern, die Sie in der HTTP-Task-Definition 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. Für weitere Informationen darüber, wie Step Functions führt das Zusammenführen von Daten durch, siehe Zusammenführen EventBridge Verbindungs- und HTTP-Aufgabendefinitionsdaten.

Das folgende Beispiel spezifiziert einen Header, der in einen HTTPS-API-Aufruf aufgenommen wird: content-type.

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

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

Step Functions legt fest User-Agent, Range, und Host Überschriften. Step Functions legt den Wert des fest Host Header, der auf der API basiert, die Sie aufrufen. Das Folgende ist ein Beispiel für diese Header.

User-Agent: Amazon|StepFunctions|HttpInvoke|region, 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-Task mit dem fehl States.Runtime Fehler.

  • A-IM

  • Accept-Charset

  • Accept-Datetime

  • Accept-Encoding

  • Autorisierung

  • Cache-Control

  • Connection (Verbindung)

  • Content-Encoding

  • Content-MD5

  • Date

  • Expect

  • Forwarded

  • From

  • Host

  • HTTP2-Settings

  • Max-Forwards

  • Origin

  • Pragma

  • Proxy-Authenticate

  • Proxy-Authorization

  • Referer

  • Server

  • TE

  • Trailer

  • Transfer-Encoding

  • Upgrade

  • Via

  • Warning

  • WWW-Authenticate

  • x-weitergeleitet-*

  • x-amz-*

  • x-amzn-*

QueryParameters (Optional)

Fügt Schlüssel-Wert-Paare am Ende einer API-URL ein. Sie können Abfrageparameter als Zeichenfolge, JSON-Array oder JSON-Objekt angeben. Step Functions automatisch URL-encodes fragt Parameter ab, wenn eine HTTPS-API aufgerufen wird.

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

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

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

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

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

Wenn Sie Abfrageparameter in Ihrem angegeben haben EventBridge Verbindung, Step Functions fügt diese Abfrageparameter zu den Abfrageparametern hinzu, die Sie in der HTTP-Task-Definition 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. Für weitere Informationen darüber, wie Step Functions führt das Zusammenführen von Daten durch, siehe Zusammenführen EventBridge Verbindungs- und HTTP-Aufgabendefinitionsdaten.

Transform (Optional)

Enthält die RequestBodyEncoding und RequestEncodingOptions Felder. In der Standardeinstellung Step Functions sendet den Anforderungstext als JSON-Daten an einen API-Endpunkt.

Wenn Ihr API-Anbieter dies akzeptiert form-urlencoded Anforderungstexte verwenden Sie den Transform anzugebendes Feld URL-encoding für die Anfragetexte. Sie müssen auch angeben content-type Kopfzeile als application/x-www-form-urlencoded. Step Functions dann automatisch URL-encodes Ihr Anfragetext.

RequestBodyEncoding

Spezifiziert URL-encoding Ihres Anfragetextes. Sie können einen dieser Werte angeben: NONE oder URL_ENCODED.

  • NONE — Der HTTP-Anforderungstext wird das serialisierte JSON des RequestBody Feld. Dies ist der Standardwert.

  • URL_ENCODED — Der HTTP-Anforderungstext wird der sein URL-encoded Formulardaten des RequestBody Feld.

RequestEncodingOptions

Legt die Kodierungsoption fest, die für Arrays in Ihrem Anforderungstext verwendet werden soll, wenn Sie Folgendes festlegen RequestBodyEncoding zu URL_ENCODED.

Step Functions unterstützt die folgenden Array-Codierungsoptionen. Weitere Informationen zu diesen Optionen und ihren Beispielen finden Sie unter Bewerben URL-encoding auf Anfrage (Text).

  • INDICES — Kodiert Arrays mithilfe des Indexwerts von Array-Elementen. In der Standardeinstellung Step Functions verwendet 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.

Die folgenden Beispielsätze URL-encoding für die Hauptdaten der Anfrage. Es spezifiziert auch die Verwendung von COMMAS Kodierungsoption für Arrays im Anforderungstext.

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

Akzeptiert JSON-Daten, die Sie in der Statuseingabe angeben. In RequestBody, können Sie eine Kombination aus statischem JSON angeben und JsonPath Syntax. Nehmen wir zum Beispiel an, dass Sie die folgende Statuseingabe angeben:

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

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

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

Wenn die HTTPS-API, die Sie aufrufen möchten, Folgendes erfordert form-urlencoded Anforderungstexte müssen Sie angeben URL-encoding für die Textdaten Ihrer Anfrage. Weitere Informationen finden Sie unter Bewerben URL-encoding auf Anfrage (Text).

Zusammenführen EventBridge Verbindungs- und HTTP-Aufgabendefinitionsdaten

Wenn Sie eine HTTP-Task aufrufen, können Sie Daten in Ihrem angeben EventBridge Verbindung und Ihre HTTP-Task-Definition. Diese Daten beinhalten Headers, QueryParameters, und RequestBody Parameter. Vor dem Aufrufen einer HTTPS-API führt Step Functions in allen Fällen den Anforderungstext mit den Verbindungstextparametern zusammen, außer wenn Ihr Anforderungstext eine Zeichenfolge ist und die Verbindungstextparameter nicht leer sind. In diesem Fall schlägt die HTTP-Task mit dem fehl States.Runtime Fehler.

Wenn in der HTTP-Aufgabendefinition doppelte Schlüssel angegeben sind und EventBridge Verbindung, Step Functions überschreibt die Werte in der HTTP-Task mit den Werten in der Verbindung.

Die folgende Liste beschreibt, wie Step Functions führt Daten zusammen, bevor eine HTTPS-API aufgerufen wird:

  • Header — Step Functions fügt alle Header, die Sie in der Verbindung angegeben haben, zu den Headern in der Headers Feld der HTTP-Task. Wenn es einen Konflikt zwischen den Header-Schlüsseln gibt, Step Functions verwendet die in der Verbindung angegebenen Werte für diese Header. Wenn Sie beispielsweise das angegeben haben content-type Header sowohl in der HTTP-Aufgabendefinition als auch EventBridge Verbindung, Step Functions verwendet die content-type Header-Wert, der in der Verbindung angegeben wurde.

  • Parameter abfragen — Step Functions fügt alle Abfrageparameter, die Sie in der Verbindung angegeben haben, zu den Abfrageparametern in QueryParameters Feld der HTTP-Task. Wenn ein Konflikt zwischen den Schlüsseln der Abfrageparameter besteht, Step Functions verwendet die in der Verbindung angegebenen Werte für diese Abfrageparameter. Wenn Sie beispielsweise das angegeben haben maxItems Abfrageparameter sowohl in der HTTP-Taskdefinition als auch EventBridge Verbindung, Step Functions verwendet die maxItems Abfrageparameterwert, der in der Verbindung angegeben wurde.

  • Body-Parameter

    • Step Functions fügt alle in der Verbindung angegebenen Anforderungstextwerte zum Anforderungstext in der RequestBody Feld der HTTP-Task. Wenn es einen Konflikt zwischen den Schlüsseln des Anforderungstextes gibt, Step Functions verwendet die in der Verbindung angegebenen Werte für den Anforderungstext. Nehmen wir zum Beispiel an, Sie haben eine angegeben Mode Feld im RequestBody sowohl der HTTP-Aufgabendefinition als auch EventBridge Verbindung. Step Functions verwendet die Mode Feldwert, den Sie in der Verbindung angegeben haben.

    • Wenn Sie den Anforderungstext als Zeichenfolge statt als JSON-Objekt angeben, und EventBridge Die Verbindung enthält auch den Anfragetext, Step Functions kann den an diesen beiden Stellen angegebenen Anfragetext nicht zusammenführen. Die HTTP-Task schlägt fehl mit dem States.Runtime Fehler.

    Step Functions wendet alle Transformationen an und serialisiert den Anforderungstext, nachdem die Zusammenführung des Anforderungstextes abgeschlossen ist.

Das folgende Beispiel legt fest Headers, QueryParameters, und RequestBody Felder sowohl in der HTTP-Task als auch EventBridge Verbindung.

HTTP-Aufgabendefinition

{ "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:region:account-id: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" } } } } }

EventBridge Verbindung

{ "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-Task angegeben und EventBridge Verbindung. Deshalb Step Functions überschreibt die Werte in der HTTP-Task mit den Werten in der Verbindung. Der folgende Codeausschnitt zeigt die HTTP-Anfrage, die Step Functions sendet an die HTTPS-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|region {"Job":"Software Engineer","Company":"AnyCompany","BodyParam":"connection_body_param"}

Bewerben URL-encoding auf Anfrage (Text)

Standardmäßig Step Functions sendet den Anforderungstext als JSON-Daten an einen API-Endpunkt. Wenn Ihr HTTPS-API-Anbieter dies erfordert form-urlencoded Anforderungstexte müssen Sie angeben URL-encoding für die Anforderungstexte. Step Functions dann automatisch URL-encodes der Anfragetext basiert auf dem URL-encoding Option, die Sie auswählen.

Sie spezifizieren URL-encoding mit dem Transform Feld. Dieses Feld enthält RequestBodyEncoding Feld, das angibt, ob Sie sich bewerben möchten oder nicht URL-encoding für Ihre Anfragetexte. Wenn Sie das angeben RequestBodyEncoding Feld, Step Functions konvertiert Ihren JSON-Anforderungstext in form-urlencoded Anforderungstext, bevor die HTTPS-API aufgerufen wird. Sie müssen auch das angeben content-type Kopfzeile als application/x-www-form-urlencoded weil APIs, die akzeptieren URL-encoded Daten erwarten die content-type Kopfzeile.

Um Arrays in Ihrem Anfragetext zu kodieren, Step Functions bietet die folgenden Array-Codierungsoptionen.

  • 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 eckigen Klammern enthalten den Index des Array-Elements. Wenn Sie den Index hinzufügen, können Sie die Reihenfolge der Array-Elemente angeben. In der Standardeinstellung Step Functions verwendet diese Kodierungsoption.

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

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

    Step Functions kodiert 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 Functions kodiert 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 Functions kodiert 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 Functions kodiert dieses Array in die folgende Zeichenfolge.

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

IAM-Berechtigungen zum Ausführen einer HTTP-Task

Ihre State-Machine-Ausführungsrolle muss über die folgenden Berechtigungen verfügen, damit eine HTTP-Task eine HTTPS-API aufrufen kann:

  • states:InvokeHTTPEndpoint

  • events:RetrieveConnectionCredentials

  • secretsmanager:GetSecretValue

  • secretsmanager:DescribeSecret

Das folgende Beispiel für eine IAM-Richtlinie gewährt Ihrer State-Machine-Rolle die geringsten Berechtigungen, die für den Aufruf von Stripe-APIs erforderlich sind. Diese IAM-Richtlinie gewährt der State-Machine-Rolle auch die Erlaubnis, auf eine bestimmte EventBridge Verbindung, 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/*" } ] }
Wichtig

Sie können einen Umfang festlegen states:InvokeHTTPEndpoint Berechtigungen für eine bestimmte Zustandsmaschine, indem Sie einen Zustandsmaschinen-ARN in der Policy-Anweisung angeben Resource Feld, aber mit weiterem Geltungsbereich der Berechtigungen mithilfe eines aws:ResourceTag/${TagKey} Der Bedingungsschlüssel wird derzeit nicht unterstützt.

Beispiel für eine HTTP-Aufgabe

Die folgende State-Machine-Definition zeigt eine HTTP-Task, die Folgendes beinhaltet Headers, QueryParameters, Transform, und RequestBody Parameter. Die HTTP-Task ruft eine Stripe-API auf, https://api.stripe.com/v1/invoices, um eine Rechnung zu generieren. Die HTTP-Task spezifiziert außerdem URL-encoding für den Anfragetext unter Verwendung der INDICES Kodierungsoption.

Stellen Sie sicher, dass Sie eine erstellt haben EventBridge Verbindung. Das folgende Beispiel zeigt eine Verbindung, die mit dem Authentifizierungstyp BASIC 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:region:account-id: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 State Machine 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 sendet an die Stripe-API.

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|region description=Monthly%20subscription&metadata%5Border_details%5D=monthly%20report%20data&customer=1234567890

Eine HTTP-Aufgabe testen

Sie können das verwenden TestState API über die Konsole, das SDK oder das AWS CLI zu testen eine HTTP-Aufgabe. Das folgende Verfahren beschreibt die Verwendung von TestState API in der Step Functions Konsole. Sie können die API-Anfrage-, Antwort- und Authentifizierungsdetails iterativ testen, bis Ihre HTTP-Task wie erwartet funktioniert.

Testen Sie den Status einer HTTP-Task in Step-Funktionen Konsole
  1. Öffne das Konsole „Step Functions“.

  2. Wählen Erstellen Sie eine Zustandsmaschine um mit der Erstellung einer Zustandsmaschine zu beginnen, oder wählen Sie eine vorhandene Zustandsmaschine aus, die eine HTTP-Task enthält.

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

  3. In der Entwurfsmodus Konfigurieren Sie in Workflow Studio visuell eine HTTP-Task. Oder wählen Sie den Code-Modus, um die State-Machine-Definition aus Ihrer lokalen Entwicklungsumgebung zu kopieren und einzufügen.

  4. Wählen Sie im Entwurfsmodus Status testen in der Bereich „Inspektor“ Bedienfeld von Workflow Studio.

  5. In der Zustand testen Gehen Sie im Dialogfeld wie folgt vor:

    1. Für Rolle „Ausführung“, wählen Sie eine Ausführungsrolle, um den Status zu testen. Wenn Sie keine Rolle haben bei ausreichende Berechtigungen Informationen zu einer HTTP-Task finden Sie unter Rolle zum Testen von HTTP-Aufgaben in Workflow Studio um eine Rolle zu erstellen.

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

    3. Für Stufe der Inspektion, behalten Sie die Standardauswahl von INFORMATIONEN. Diese Ebene zeigt Ihnen den Status des API-Aufrufs und die Statusausgabe. Dies ist nützlich, um die API-Antwort schnell zu überprüfen.

    4. Wählen Sie Test starten.

    5. Wenn der Test erfolgreich ist, erscheint die Statusausgabe auf der rechten Seite des Status testen Dialogfeld. Wenn der Test fehlschlägt, wird ein Fehler angezeigt.

      In der Angaben zum Bundesstaat Auf der Registerkarte des Dialogfensters sehen Sie die Statusdefinition und einen Link zu Ihrem EventBridge Verbindung.

    6. Ändere das Inspektionsstufe zu VERFOLGEN. Diese Ebene zeigt Ihnen die unformatierte HTTP-Anfrage und -Antwort und ist nützlich für die Überprüfung von Headern, Abfrageparametern und anderen API-specific Einzelheiten.

    7. Wählen Sie die Enthülle Geheimnisse Checkbox. In Kombination mit VERFOLGEN, mit dieser Einstellung können Sie die sensiblen Daten sehen, die EventBridge Verbindungseinfügungen, z. B. API-Schlüssel. Die IAM Die Benutzeridentität, die Sie für den Zugriff auf die Konsole verwenden, muss über die Berechtigung verfügen, states:RevealSecrets Aktion. Ohne diese Erlaubnis Step Functions gibt beim Starten des Tests einen Fehler „Zugriff verweigert“ aus. Für ein Beispiel für eine IAM Richtlinie, die festlegt states:RevealSecrets Erlaubnis, siehe IAM Berechtigungen für die Verwendung der TestState API.

      Die folgende Abbildung zeigt einen Test für eine HTTP-Task, der erfolgreich ist. Das Stufe der Inspektion für diesen Zustand ist gesetzt VERFOLGEN. Das HTTP-Anfrage und Antwort Die Registerkarte in der folgenden Abbildung zeigt das Ergebnis des HTTPS-API-Aufrufs.

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

    9. Wenn der Test erfolgreich ist, können Sie Ihre HTTP-Daten unter dem HTTP-Anfrage und Antwort Tab.

Antworten auf HTTP-Tasks werden nicht unterstützt

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

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

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

Verbindungsfehler

Wenn EventBridge bei der Verbindung mit der angegebenen API während der Workflow-Ausführung ein Problem auftritt, löst Step Functions den Fehler in Ihrem Workflow aus. Verbindungsfehlern wird ein Präfix vorangestellt Events.ConnectionResource..

Zu diesen Fehlern gehören:

  • Events.ConnectionResource.InvalidConnectionState

  • Events.ConnectionResource.InvalidPrivateConnectionState

  • Events.ConnectionResource.AccessDenied

  • Events.ConnectionResource.ResourceNotFound

  • Events.ConnectionResource.AuthInProgress

  • Events.ConnectionResource.ConcurrentModification

  • Events.ConnectionResource.InternalError