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.
Workflows mit Step Functions aufrufen HTTPS APIs
Eine HTTP Aufgabe ist eine Art von Workflow-Status der Aufgabe Status, mit dem Sie HTTPS API in Ihren Workflows eine Aufgabe aufrufen können. APISie können öffentlich sein, z. B. SaaS-Anwendungen von Drittanbietern wie Stripe oder Salesforce. Sie können auch private Anwendungen aufrufenAPI, z. B. HTTPS basierte Anwendungen in einer Amazon Virtual Private Cloud.
Für die Autorisierung und Netzwerkkonnektivität benötigt eine HTTP Aufgabe eine EventBridge Verbindung.
Um eine aufzurufen HTTPSAPI, verwenden Sie den Task-Status 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 Verbindungsdetails.
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.
Anmerkung
HTTPDie Aufgabe unterstützt derzeit nur öffentliche Domainnamen mit öffentlich vertrauenswürdigen Zertifikaten für HTTPS Endgeräte, wenn private APIs Zertifikate verwendet werden. HTTP Task unterstützt Mutual TLS (mTLS) nicht.
Themen
- Konnektivität für eine HTTP Aufgabe
- HTTPDefinition der Aufgabe
- HTTPFelder für Aufgaben
- Zusammenführen EventBridge Verbindungs- und HTTP Aufgabendefinitionsdaten
- Wendet URL -Encoding auf den Hauptteil der Anfrage an
- IAMBerechtigungen zum Ausführen einer Aufgabe HTTP
- HTTPBeispiel für eine Aufgabe
- Eine HTTP Aufgabe testen
- Antworten auf Aufgaben werden nicht unterstützt HTTP
- Verbindungsfehler
Konnektivität für eine HTTP Aufgabe
Eine HTTP Aufgabe erfordert eine EventBridgeVerbindung, die die Authentifizierungsdaten eines API Anbieters sicher verwaltet. Eine Verbindung definiert die Autorisierungsmethode und die Anmeldeinformationen, die verwendet werden sollen, um eine Verbindung zu einer bestimmten Verbindung herzustellenAPI. Wenn Sie eine Verbindung zu einer privaten Verbindung herstellenAPI, z. B. zu einer privaten Verbindung API in einer Amazon Virtual Private Cloud (AmazonVPC), können Sie die Verbindung auch verwenden, um eine sichere point-to-point Netzwerkkonnektivität zu definieren. 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 Autorisierungs- und Netzwerkverbindungsdetails 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 eine aufruft HTTPSAPI.
Wenn Sie eine Verbindung herstellen, EventBridge erstellt ein Geheimnis in AWS Secrets Manager. EventBridge Speichert in diesem Secret die Verbindungs- und Autorisierungsparameter in verschlüsselter Form. 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. Für weitere Informationen über IAM Berechtigungen, die Ihr Zustandsmaschine für den Zugriff auf eine EventBridge Verbindung benötigt, finden Sie unterIAMBerechtigungen zum Ausführen einer Aufgabe HTTP.
Die folgende Abbildung zeigt, wie Step Functions verarbeitet die Autorisierung von HTTPS API Anrufen mit einem EventBridge Verbindung. Das Tool EventBridge Die Verbindung verwaltet die Anmeldeinformationen eines HTTPS API Anbieters. EventBridge erstellt ein Geheimnis in Secrets Manager um die Verbindungs- und Autorisierungsparameter in verschlüsselter Form zu speichern. Speichert im privaten APIs Fall EventBridge auch Netzwerkkonnektivitätskonfigurationen.
HTTPDefinition der Aufgabe
Die ASLDefinition stellt eine HTTP Aufgabe mit http:invoke
Ressource dar. Die folgende HTTP Aufgabendefinition ruft einen öffentlichen Stripe aufAPI, der 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:us-east-2
:123456789012
:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac"
},
"Method": "GET"
},
"End": true
}
HTTPFelder für Aufgaben
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 dasResource
Feld wie folgt an."Resource": "arn:aws:states:::http:invoke"
Parameters
(Erforderlich)-
Enthält die
ConnectionArn
FelderApiEndpoint
Method
, und, die Informationen über das Objekt enthalten, das HTTPS API Sie anrufen möchten.Parameters
enthält auch optionale Felder wieHeaders
undQueryParameters
.Sie können eine Kombination aus Statik JSON und JsonPath
Syntax wie Parameters
imParameters
Feld angeben. Weitere Informationen finden Sie unter Übergeben von Parametern an einen Dienst API in Step Functions.Um die EventBridge Verbindung anzugeben, verwenden Sie entweder das
InvocationConfig
FeldAuthentication
oder.ApiEndpoint
(Erforderlich)-
Gibt den URL von denen an HTTPSAPI, die Sie anrufen möchten. Verwenden Sie das
QueryParameters
FeldURL, um Abfrageparameter an die anzuhängen. 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 auch einen Referenzpfad angeben, indem Sie die JsonPath
Syntax verwenden, um den JSON Knoten auszuwählen, der den HTTPS 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 von verwenden möchten HTTPSAPI. 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
(Bedingt)-
Sie müssen entweder
Authentication
oder angebenInvocationConfig
.Enthält das
ConnectionArn
Feld, das angibt, wie ein öffentlicher HTTPS API Anruf authentifiziert werden soll. Step Functions unterstützt die Authentifizierung für einen angegebenen BenutzerApiEndpoint
mithilfe der Verbindungsressource von Amazon EventBridge.ConnectionArn
(Erforderlich)-
Spezifiziert die EventBridge VerbindungARN.
Eine HTTP Aufgabe erfordert eine EventBridge Verbindung, die die Autorisierungsdaten eines API Anbieters sicher verwaltet. Eine Verbindung gibt den Autorisierungstyp und die Anmeldeinformationen an, die für die Autorisierung eines HTTPS API verwendet werden sollen. Durch die Verwendung einer Verbindung können Sie verhindern, dass Geheimnisse wie API Schlüssel fest in Ihrer Zustandsmaschinen-Definition kodiert werden. In einer Verbindung können Sie auch
RequestBody
ParameterHeaders
QueryParameters
, und angeben.Weitere Informationen finden Sie unter Konnektivität für eine HTTP Aufgabe.
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" } InvocationConfig
(Befriedigend)-
Sie müssen entweder
Authentication
oder angebenInvocationConfig
.Enthält die Autorisierungs- und Netzwerkkonnektivitätskonfiguration für einen privaten HTTPS API Anruf. Step Functions unterstützt die Verbindung für eine angegebene Verbindung
ApiEndpoint
mithilfe der Verbindungsressource von Amazon EventBridge. Weitere Informationen finden Sie unter Herstellen einer privaten Verbindung APIs im EventBridge Amazon-Benutzerhandbuch.ConnectionArn
(Erforderlich)-
Spezifiziert die EventBridge VerbindungARN.
Eine HTTP Aufgabe erfordert eine EventBridge Verbindung, die die Autorisierungsdaten eines API Anbieters sicher verwaltet. Eine Verbindung gibt den Autorisierungstyp und die Anmeldeinformationen an, die für die Autorisierung eines HTTPS API verwendet werden sollen. Bei privaten APIs Verbindungen definiert die Verbindung auch eine sichere point-to-point Netzwerkkonnektivität. 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
ParameterHeaders
QueryParameters
, und angeben.Weitere Informationen finden Sie unter Konnektivität für eine HTTP Aufgabe.
Das folgende Beispiel zeigt, wie Sie ein
InvocationConfig
Feld in Ihrer HTTP Aufgabendefinition angeben können."InvocationConfig": { "ConnectionArn": "arn:aws:events:
us-east-2
:123456789012
: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 das
Headers
Feld in einer HTTP Aufgabe. Wir empfehlen, dass Sie in demHeaders
Feld keine Authentifizierungsinformationen für Ihre API Anbieter angeben. Wir empfehlen Ihnen, diese Daten in Ihre aufzunehmen EventBridge Verbindung.Step Functions fügt die Header hinzu, die Sie in der EventBridge Verbindung zu den Headern, 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. Für weitere Informationen darüber, wie Step Functions führt die Zusammenführung von Daten durch, sieheZusammenfü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 einen Referenzpfad verwenden, um die Header zur Laufzeit anzugeben. Beispiel,
"Headers.$": "$.myHTTPHeaders"
.Step Functions legt die
User-Agent
Host
HeaderRange
, und fest. Step Functions legt den Wert desHost
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.comSie 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 Functions URL-kodiert Abfrageparameter automatisch, wenn ein aufgerufen wird. HTTPS API
Angenommen, Sie möchten Stripe aufrufen, 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 Abfrageparameter in Ihrem angegeben haben EventBridge Verbindung, Step Functions fügt diese Abfrageparameter zu den Abfrageparametern hinzu, die Sie in der HTTP Aufgabendefinition angeben. Wenn dieselben Schlüssel für Abfrageparameter 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 die Zusammenführung von Daten durch, sieheZusammenführen EventBridge Verbindungs- und HTTP Aufgabendefinitionsdaten.
Transform
(Optional)-
Enthält die
RequestEncodingOptions
FelderRequestBodyEncoding
und. Standardmäßig Step Functions sendet den Anforderungstext als JSON Daten an einen API Endpunkt.Wenn Ihr API Anbieter
form-urlencoded
Anfragetexte akzeptiert, verwenden Sie dasTransform
Feld, um URL -encoding für die Anfragetexte anzugeben. Sie müssen dencontent-type
Header auch alsapplication/x-www-form-urlencoded
angeben. Step Functions URLkodiert 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 desRequestBody
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 Functions unterstützt die folgenden Array-Kodierungsoptionen. Weitere Informationen zu diesen Optionen und ihren Beispielen finden Sie unterWendet URL -Encoding auf den Hauptteil der Anfrage an.
-
INDICES
— Kodiert Arrays mithilfe des Indexwerts von Array-Elementen. Standardmäßig 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.
-
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.
RequestBody
In 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 LaufzeitExpiryDate
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 für das, HTTPS API was Sie aufrufen möchten,
form-urlencoded
Anforderungstexte erforderlich sind, müssen Sie URL -encoding für Ihre Anfragetextdaten angeben. Weitere Informationen finden Sie unter Wendet URL -Encoding auf den Hauptteil der Anfrage an.
Zusammenführen EventBridge Verbindungs- und HTTP Aufgabendefinitionsdaten
Wenn Sie eine HTTP Aufgabe aufrufen, können Sie Daten in Ihrem angeben EventBridge Verbindung und Ihre HTTP Aufgabendefinition. Diese Daten beinhalten Headers
QueryParameters
, und RequestBody
Parameter. Vor dem HTTPS API Aufrufen von führt Step Functions in allen Fällen den Hauptteil der Anfrage 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 doppelte Schlüssel angegeben sind und EventBridge Verbindung, Step Functions überschreibt die Werte in der HTTP Aufgabe mit den Werten in der Verbindung.
In der folgenden Liste wird beschrieben, wie Step Functions führt Daten zusammen, bevor ein HTTPS API aufgerufen wird:
-
Kopfzeilen — Step Functions fügt alle Header, die Sie in der Verbindung angegeben haben, zu den Headern im
Headers
Feld der Aufgabe hinzu. HTTP Wenn es einen Konflikt zwischen den Header-Tasten gibt, Step Functions verwendet die in der Verbindung angegebenen Werte für diese Header. Wenn Sie beispielsweise dencontent-type
Header sowohl in der Aufgabendefinition als auch in der HTTP Aufgabendefinition angegeben haben EventBridge Verbindung, Step Functions verwendet den in der Verbindung angegebenencontent-type
Header-Wert. -
Parameter abfragen — Step Functions fügt alle Abfrageparameter, die Sie in der Verbindung angegeben haben, zu den Abfrageparametern im
QueryParameters
Feld der HTTP Aufgabe hinzu. Wenn es einen Konflikt zwischen den Schlüsseln der Abfrageparameter gibt, Step Functions verwendet die in der Verbindung angegebenen Werte für diese Abfrageparameter. Wenn Sie beispielsweise denmaxItems
Abfrageparameter sowohl in der Aufgabendefinition als auch in der HTTP Aufgabendefinition angegeben haben EventBridge Verbindung, Step Functions verwendet den in der Verbindung angegebenenmaxItems
Abfrageparameterwert. -
Body-Parameter
-
Step Functions fügt alle in der Verbindung angegebenen Werte des Anforderungstexts zum Anforderungstext im
RequestBody
Feld der HTTP Aufgabe hinzu. Wenn es einen Konflikt zwischen den Tasten des Anforderungstextes gibt, Step Functions verwendet die in der Verbindung angegebenen Werte für den Hauptteil der Anfrage. Nehmen wir beispielsweise an, Sie haben einMode
Feld sowohl inRequestBody
der HTTP Aufgabendefinition als auch in der EventBridge Verbindung. Step Functions verwendet denMode
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 Hauptteil der Anfrage, Step Functions kann den an diesen beiden Stellen angegebenen Anforderungstext nicht zusammenführen. Die HTTP Aufgabe schlägt mit dem
States.Runtime
Fehler fehl.
Step Functions wendet alle Transformationen an und serialisiert den Anforderungstext, nachdem die Zusammenführung des Anforderungstexts abgeschlossen ist.
-
Im folgenden Beispiel werden die FelderHeaders
, und sowohl in Task als QueryParameters
auch in den RequestBody
Feldern Task und festgelegt HTTP EventBridge Verbindung.
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"
} } } } }
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 Aufgabe angegeben und EventBridge Verbindung. Daher Step Functions überschreibt die Werte in der HTTP Aufgabe mit den Werten in der Verbindung. Der folgende Codeausschnitt zeigt die Anfrage HTTP 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|us-east-1
{"Job":"Software Engineer","Company":"AnyCompany","BodyParam":"connection_body_param"}
Wendet URL -Encoding auf den Hauptteil der Anfrage an
Standardmäßig Step Functions sendet den Anforderungstext als JSON Daten an einen API Endpunkt. Wenn Ihr HTTPS API Anbieter form-urlencoded
Anforderungstexte benötigt, müssen Sie URL -encoding für die Anfragetexte angeben. Step Functions URLkodiert 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, Step Functions konvertiert den Hauptteil Ihrer JSON Anfrage in den form-urlencoded
Hauptteil der Anfrage, bevor Sie den aufrufen HTTPSAPI. Sie müssen auch den content-type
Header angebenAPIs, application/x-www-form-urlencoded
da die URL Accept-kodierten Daten den content-type
Header erwarten.
Um Arrays in Ihrem Anfragetext zu kodieren, Step Functions bietet die folgenden Optionen zur Array-Kodierung.
-
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. Standardmäßig 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
IAMBerechtigungen zum Ausführen einer Aufgabe HTTP
Ihre State-Machine-Ausführungsrolle muss über die folgenden Berechtigungen verfügen, damit ein HTTP Task eine aufrufen kann HTTPSAPI:
states:InvokeHTTPEndpoint
events:RetrieveConnectionCredentials
secretsmanager:GetSecretValue
secretsmanager:DescribeSecret
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.
Stellen Sie sicher, dass Sie eine erstellt haben EventBridge Verbindung. Das folgende Beispiel zeigt eine Verbindung, die mit dem BASIC Authentifizierungstyp erstellt wurde.
{
"Type": "BASIC",
"AuthParameters": {
"BasicAuthParameters": {
"Password": "myPassword",
"Username": "myUsername"
},
}
}
Denken Sie daran, den italicized
Text durch Ihre ressourcenspezifischen Informationen zu ersetzen.
{ "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 Step Functions sendet an den StripeAPI.
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 console. Sie können die API Anfrage-, Antwort- und Authentifizierungsdetails iterativ testen, bis Ihre HTTP Aufgabe erwartungsgemäß funktioniert.
Testen Sie einen HTTP Aufgabenstatus in Step Functions Konsole
-
Öffnen Sie die Step Functions Functions-Konsole
. -
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.
-
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.
-
Wählen Sie im Entwurfsmodus im Inspektor-Panel Bedienfeld von Workflow Studio die Option Teststatus aus.
-
Gehen Sie im Dialogfeld Teststatus wie folgt vor:
-
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.
-
(Optional) Geben Sie alle JSON Eingaben ein, die Ihr ausgewählter Bundesstaat für den Test benötigt.
-
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.
-
Wählen Sie Test starten.
-
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 finden Sie die Statusdefinition und einen Link zu Ihrem EventBridge Verbindung.
-
Ä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.
-
Wählen Sie das Kontrollkästchen „Geheimnisse enthüllen“. In Kombination mit TRACEkönnen Sie mit dieser Einstellung die sensiblen Daten sehen, die EventBridge Verbindungseinfügungen, z. B. API Schlüssel. Das Tool IAM Die Benutzeridentität, die Sie für den Zugriff auf die Konsole verwenden, muss über die erforderliche Berechtigung zum Ausführen der
states:RevealSecrets
Aktion verfügen. Ohne diese Erlaubnis Step Functions gibt den Fehler „Zugriff verweigert“ aus, wenn Sie den Test starten. Für ein Beispiel für ein IAM Eine Richtlinie, die diestates:RevealSecrets
Berechtigung festlegt, finden Sie unterIAM Berechtigungen 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 HTTPS API Anrufs.
-
Wählen Sie Test starten.
-
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 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 bei EventBridge der Verbindung mit dem 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 vorangestelltEvents.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