Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Chiama le API HTTPS nei flussi di lavoro di Step Functions
Un HTTP Task è un tipo di Stato del flusso di lavoro delle attività stato che puoi utilizzare per chiamare le API HTTPS nei tuoi flussi di lavoro. L'API può essere pubblica, ad esempio applicazioni SaaS di terze parti come Stripe o Salesforce. Puoi anche chiamare API private, ad esempio HTTPS-based applicazioni in un Amazon Virtual Private Cloud.
Per l'autorizzazione e la connettività di rete, un'attività HTTP richiede un EventBridge connessione.
Per chiamare un'API HTTPS, usa Attività stato con arn:aws:states:::http:invoke risorsa. Quindi, fornisci i dettagli di configurazione dell'endpoint dell'API, come l'URL dell'API, il metodo che desideri utilizzare e connessione dettagli.
Se usi Workflow Studio per creare la macchina a stati che contiene un'attività HTTP, Workflow Studio genera automaticamente un ruolo di esecuzione con IAM politiche per l'HTTP Task. Per ulteriori informazioni, consulta Ruolo per testare le attività HTTP in Workflow Studio.
Nota
HTTP Task attualmente supporta solo nomi di dominio pubblico con certificati pubblicamente affidabili per gli endpoint HTTPS quando si utilizzano API private. HTTP Task non supporta il protocollo TLS reciproco (MTL).
Connettività per un'attività HTTP
Un task HTTP richiede un EventBridge connessione, che gestisce in modo sicuro le credenziali di autenticazione di un provider di API. A connessione definisce il metodo di autorizzazione e le credenziali da utilizzare per la connessione a una determinata API. Se ti connetti a un'API privata, ad esempio un'API privata in un Amazon Virtual Private Cloud (Amazon VPC), puoi anche utilizzare la connessione per definire una connettività di rete point-to-point sicura. L’utilizzo di una connessione consente di evitare l’inserimento di segreti a codifica fissa, come le chiavi API, nella definizione della macchina a stati. Un EventBridge la connessione supporta gli schemi di autorizzazione Basic, OAuth e API Key.
Quando si crea un EventBridge connessione, fornisci i tuoi dati di autorizzazione e connettività di rete. Puoi anche includere i parametri di intestazione, corpo e query necessari per l'autorizzazione con un'API. È necessario includere l'ARN di connessione in qualsiasi attività HTTP che richiama un'API HTTPS.
Quando si crea una connessione, EventBridge crea un segreto nel AWS Secrets Manager. In questo segreto, EventBridge memorizza i parametri di connessione e autorizzazione in forma crittografata. Per creare o aggiornare correttamente una connessione, è necessario utilizzare un Account AWS che dispone del permesso di utilizzare Secrets Manager. Per ulteriori informazioni su IAM autorizzazioni necessarie alla macchina a stato per accedere a EventBridge connessione, vedi Autorizzazioni IAM per eseguire un task HTTP.
L'immagine seguente mostra come Step Functions gestisce l'autorizzazione per le chiamate API HTTPS utilizzando un EventBridge connessione. La EventBridge la connessione gestisce le credenziali di un provider di API HTTPS. EventBridge crea un segreto nel Secrets Manager per memorizzare i parametri di connessione e autorizzazione in forma crittografata. Nel caso di API private, EventBridge memorizza anche le configurazioni di connettività di rete.
Timeout per le connessioni
Le richieste di attività HTTP scadranno dopo 60 secondi.
Definizione dell'attività HTTP
La Definizione ASL rappresenta un'attività HTTP con http:invoke risorsa. La seguente definizione di HTTP Task richiama un'API Stripe pubblica che restituisce un elenco di tutti i clienti.
"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
}
Campi HTTP Task
Un Task HTTP include i seguenti campi nella sua definizione.
Resource(Obbligatorio)-
Per specificare un tipo di attività, fornire il proprio ARN nel
Resourcecampo. Per un Task HTTP, si specifica ilResourcecampo come segue."Resource": "arn:aws:states:::http:invoke" Parameters(Obbligatorio)-
Contiene
ApiEndpoint,Method, eConnectionArncampi che forniscono informazioni sull'API HTTPS da chiamare.Parameterscontiene anche campi opzionali, comeHeaderseQueryParameters.È possibile specificare una combinazione di JSON statico e JsonPath
sintassi come ParametersnelParameterscampo. Per ulteriori informazioni, consulta Passaggio di parametri a un'API di servizio in Step Functions.Per specificare EventBridge connessione, utilizzare
AuthenticationoInvocationConfigcampo.ApiEndpoint(Obbligatorio)-
Specifica l'URL dell'API HTTPS che desideri chiamare. Per aggiungere i parametri di interrogazione all'URL, usa
QueryParameterscampo. L'esempio seguente mostra come chiamare un'API Stripe per recuperare l'elenco di tutti i clienti."ApiEndpoint":"https://api.stripe.com/v1/customers"Puoi anche specificare un percorso di riferimento utilizzando il JsonPath
sintassi per selezionare il nodo JSON che contiene l'URL dell'API HTTPS. Ad esempio, supponiamo di voler chiamare una delle API di Stripe utilizzando un ID cliente specifico. Immagina di aver fornito il seguente input di stato. { "customer_id": "1234567890", "name": "John Doe" }Per recuperare i dettagli di questo ID cliente utilizzando un'API Stripe, specifica
ApiEndpointcome mostrato nell'esempio seguente. Questo esempio utilizza un funzione intrinseca e un percorso di riferimento."ApiEndpoint.$":"States.Format('https://api.stripe.com/v1/customers/{}', $.customer_id)"In fase di esecuzione, Step Functions risolve il valore di
ApiEndpointcome segue.https://api.stripe.com/v1/customers/1234567890 Method(Obbligatorio)-
Specifica il metodo HTTP da utilizzare per chiamare un'API HTTPS. È possibile specificare uno di questi metodi nel task HTTP: GET, POST, PUT, DELETE, PATCH, OPTIONS o HEAD.
Ad esempio, per utilizzare il metodo GET, specificare
Methodcampo come segue."Method": "GET"Puoi anche usare un percorso di riferimento per specificare il metodo in fase di esecuzione. Ad esempio,
"Method.$": "$.myHTTPMethod". Authentication(Condizionale)-
Si consiglia di utilizzare
InvocationConfigconclusoAuthenticationper chiamate API HTTPS pubbliche e private.Esistente
Authenticationi riferimenti vengono mantenuti per garantire la compatibilità con le versioni precedenti. All'interno del campo, è necessario specificare unConnectionArncampo che specifica una risorsa di connessione di Amazon EventBridge per connettersi aApiEndpoint. InvocationConfig(Condizionale)-
Contiene l'autorizzazione e la configurazione della connettività di rete per tutti e due chiamate API HTTPS pubbliche e private.
Step Functions gestisce la connessione per un determinato
ApiEndpointutilizzando la risorsa di connessione di Amazon EventBridge. Per ulteriori informazioni, vedere Connessione a API private nel Amazon EventBridge Guida per l'utente.ConnectionArn(Obbligatorio)-
Specifica EventBridge ARN di connessione.
Un'operazione HTTP richiede un EventBridge connessione, che gestisce in modo sicuro le credenziali di autorizzazione di un provider di API. A connessione specifica il tipo di autorizzazione e le credenziali da utilizzare per autorizzare un'API HTTPS. Per le API private, la connessione definisce anche una connettività di rete point-to-point sicura. L’utilizzo di una connessione consente di evitare l’inserimento di segreti a codifica fissa, come le chiavi API, nella definizione della macchina a stati. In una connessione, puoi anche specificare
Headers,QueryParameters, eRequestBodyparametri.Per ulteriori informazioni, consulta Connettività per un'attività HTTP.
L'esempio seguente mostra il formato di
InvocationConfigin un Task HTTP:"InvocationConfig": { "ConnectionArn": "arn:aws:events:region:account-id:connection/connection-id" } Headers(facoltativo).-
Fornisce contesto e metadati aggiuntivi all'endpoint API. È possibile specificare le intestazioni come stringa o array JSON.
È possibile specificare le intestazioni in EventBridge connessione e
Headerscampo in un Task HTTP. Ti consigliamo di non includere i dettagli di autenticazione dei tuoi provider API nelHeaderscampo. Ti consigliamo di includere questi dettagli nel tuo EventBridge connessione.Step Functions aggiunge le intestazioni specificate nel EventBridge connessione alle intestazioni specificate nella definizione dell'attività HTTP. Se nella definizione e nella connessione sono presenti le stesse chiavi di intestazione, Step Functions utilizza i valori corrispondenti specificati in EventBridge connessione per quelle intestazioni. Per ulteriori informazioni su come Step Functions esegue l'unione dei dati, vedere Fusione EventBridge dati di connessione e definizione delle attività HTTP.
L'esempio seguente specifica un'intestazione che verrà inclusa in una chiamata API HTTPS:
content-type."Headers": { "content-type": "application/json" }Puoi anche usare un percorso di riferimento per specificare le intestazioni in fase di esecuzione. Ad esempio,
"Headers.$": "$.myHTTPHeaders".Step Functions imposta il
User-Agent,Range, eHostintestazioni. Step Functions imposta il valore diHostintestazione basata sull'API che stai chiamando. Di seguito è riportato un esempio di queste intestazioni.User-Agent: Amazon|StepFunctions|HttpInvoke|, Range: bytes=0-262144, Host: api.stripe.comregionNon è possibile utilizzare le seguenti intestazioni nella definizione dell'attività HTTP. Se utilizzi queste intestazioni, l'HTTP Task ha esito negativo con
States.Runtimeerrore.-
A-IM
-
Accept-Charset
-
Accept-Datetime
-
Accept-Encoding
-
Autorizzazione
-
Cache-Control
-
Connessione
-
Content-Encoding
-
Content-MD5
-
Data
-
Expect
-
Forwarded
-
Da
-
Host
-
HTTP2-Settings
-
Max-Forwards
-
Origin
-
Pragma
-
Proxy-Authenticate
-
Proxy-Authorization
-
Referente
-
Server
-
TE
-
Trailer
-
Transfer-Encoding
-
Upgrade
-
Via
-
Attenzione
-
WWW-Authenticate
-
x-forwarded-*
-
x-amz-*
-
x-amzn-*
-
QueryParameters(facoltativo).-
Inserisce coppie chiave-valore alla fine di un URL API. È possibile specificare i parametri di interrogazione come stringa, array JSON o oggetto JSON. Step Functions automaticamente URL-encodes parametri di interrogazione quando chiama un'API HTTPS.
Ad esempio, supponiamo di voler chiamare l'API di Stripe per cercare clienti che effettuano le loro transazioni in dollari USA (USD). Immagina di aver fornito quanto segue
QueryParameterscome input di stato."QueryParameters": { "currency": "usd" }In fase di esecuzione, Step Functions aggiunge
QueryParametersall'URL dell'API come segue.https://api.stripe.com/v1/customers/search?currency=usdPuoi anche usare un percorso di riferimento per specificare i parametri dell'interrogazione in fase di esecuzione. Ad esempio,
"QueryParameters.$": "$.myQueryParameters".Se hai specificato i parametri di interrogazione nel tuo EventBridge connessione, Step Functions aggiunge questi parametri di interrogazione ai parametri di interrogazione specificati nella definizione dell'attività HTTP. Se nella definizione e nella connessione sono presenti le stesse chiavi dei parametri di interrogazione, Step Functions utilizza i valori corrispondenti specificati in EventBridge connessione per quelle intestazioni. Per ulteriori informazioni su come Step Functions esegue l'unione dei dati, vedere Fusione EventBridge dati di connessione e definizione delle attività HTTP.
Transform(facoltativo).-
Contiene
RequestBodyEncodingeRequestEncodingOptionscampi. Per impostazione predefinita, Step Functions invia il corpo della richiesta come dati JSON a un endpoint API.Se il tuo fornitore di API accetta
form-urlencodedenti preposti alle richieste, usa ilTransformcampo da specificare URL-encoding per gli enti richiedenti. È inoltre necessario specificarecontent-typeintestazione comeapplication/x-www-form-urlencoded. Step Functions quindi automaticamente URL-encodes il corpo della tua richiesta.RequestBodyEncoding-
Specifica URL-encoding del corpo della richiesta. Puoi specificare uno dei seguenti valori:
NONEoURL_ENCODED.-
NONE— Il corpo della richiesta HTTP sarà il JSON serializzato diRequestBodycampo. Si tratta del valore di default. -
URL_ENCODED— Il corpo della richiesta HTTP sarà il URL-encoded dati del modulo diRequestBodycampo.
-
RequestEncodingOptions-
Determina l'opzione di codifica da utilizzare per gli array nel corpo della richiesta, se impostata
RequestBodyEncodingaURL_ENCODED.Step Functions supporta le seguenti opzioni di codifica degli array. Per ulteriori informazioni su queste opzioni e sui relativi esempi, vedete Applicando URL-encoding ente su richiesta.
-
INDICES— Codifica gli array utilizzando il valore di indice degli elementi dell'array. Per impostazione predefinita, Step Functions utilizza questa opzione di codifica. -
REPEAT— Ripete una chiave per ogni elemento di un array. -
COMMAS— Codifica tutti i valori di una chiave come elenco di valori delimitato da virgole. -
BRACKETS— Ripete una chiave per ogni elemento di una matrice e aggiunge una parentesi, [], alla chiave per indicare che si tratta di una matrice.
-
L'esempio seguente imposta URL-encoding per i dati relativi al corpo della richiesta. Specifica inoltre di utilizzare il
COMMASopzione di codifica per gli array nel corpo della richiesta."Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "COMMAS" } } RequestBody(facoltativo).-
Accetta i dati JSON forniti nell'input di stato. In
RequestBody, puoi specificare una combinazione di JSON statico e JsonPathsintassi. Ad esempio, supponiamo di fornire il seguente input di stato: { "CardNumber": "1234567890", "ExpiryDate": "09/25" }Per utilizzare questi valori di
CardNumbereExpiryDatenel corpo della richiesta in fase di esecuzione, puoi specificare i seguenti dati JSON nel corpo della richiesta."RequestBody": { "Card": { "Number.$": "$.CardNumber", "Expiry.$": "$.ExpiryDate", "Name": "John Doe", "Address": "123 Any Street, Any Town, USA" } }Se l'API HTTPS che desideri chiamare richiede
form-urlencodedcorpi delle richieste, è necessario specificare URL-encoding per i dati relativi al corpo della richiesta. Per ulteriori informazioni, consulta Applicando URL-encoding ente su richiesta.
Fusione EventBridge dati di connessione e definizione delle attività HTTP
Quando si richiama un Task HTTP, è possibile specificare i dati nel EventBridge connessione e definizione dell'attività HTTP. Questi dati includono Headers, QueryParameters, e RequestBody parametri. Prima di chiamare un'API HTTPS, Step Functions unisce il corpo della richiesta con i parametri del corpo della connessione in tutti i casi, tranne se il corpo della richiesta è una stringa e i parametri del corpo della connessione non sono vuoti. In questo caso, l'HTTP Task ha esito negativo con States.Runtime errore.
Se sono presenti chiavi duplicate specificate nella definizione dell'attività HTTP e nel EventBridge connessione, Step Functions sovrascrive i valori del Task HTTP con i valori della connessione.
L'elenco seguente descrive come Step Functions unisce i dati prima di chiamare un'API HTTPS:
-
Intestazioni — Step Functions aggiunge le intestazioni specificate nella connessione alle intestazioni in
Headerscampo dell'attività HTTP. Se c'è un conflitto tra le chiavi di intestazione, Step Functions utilizza i valori specificati nella connessione per tali intestazioni. Ad esempio, se hai specificatocontent-typeintestazione sia nella definizione dell'attività HTTP che EventBridge connessione, Step Functions utilizzacontent-typevalore di intestazione specificato nella connessione. -
Parametri della query — Step Functions aggiunge tutti i parametri di interrogazione specificati nella connessione ai parametri di interrogazione in
QueryParameterscampo dell'attività HTTP. In caso di conflitto tra le chiavi dei parametri di interrogazione, Step Functions utilizza i valori specificati nella connessione per tali parametri di interrogazione. Ad esempio, se hai specificatomaxItemsparametro di query sia nella definizione dell'attività HTTP che EventBridge connessione, Step Functions utilizzamaxItemsvalore del parametro di interrogazione specificato nella connessione. -
Parametri corpo
-
Step Functions aggiunge qualsiasi valore del corpo della richiesta specificato nella connessione al corpo della richiesta in
RequestBodycampo dell'attività HTTP. In caso di conflitto tra le chiavi del corpo della richiesta, Step Functions utilizza i valori specificati nella connessione per il corpo della richiesta. Ad esempio, supponiamo di aver specificato unModecampo inRequestBodysia della definizione dell'attività HTTP che EventBridge connessione. Step Functions utilizza ilModevalore del campo specificato nella connessione. -
Se si specifica il corpo della richiesta come stringa anziché come oggetto JSON e EventBridge la connessione contiene anche il corpo della richiesta, Step Functions non è possibile unire il corpo della richiesta specificato in entrambe queste posizioni. Fallisce il Task HTTP con
States.Runtimeerrore.
Step Functions applica tutte le trasformazioni e serializza il corpo della richiesta dopo aver completato l'unione del corpo della richiesta.
-
L'esempio seguente imposta Headers, QueryParameters, e RequestBody campi sia nel Task HTTP che EventBridge connessione.
Definizione dell'attività HTTP
{ "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"} } } } }
connessione EventBridge
{ "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 questo esempio, le chiavi duplicate vengono specificate nell'attività HTTP e EventBridge connessione. Pertanto, Step Functions sovrascrive i valori del Task HTTP con i valori della connessione. Il seguente frammento di codice mostra la richiesta HTTP che Step Functions invia all'API HTTPS.
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"}
Applicando URL-encoding ente su richiesta
Per impostazione predefinita, Step Functions invia il corpo della richiesta come dati JSON a un endpoint API. Se il tuo provider di API HTTPS richiede form-urlencoded corpi delle richieste, è necessario specificare URL-encoding per gli organismi richiedenti. Step Functions quindi automaticamente URL-encodes il corpo della richiesta in base a URL-encoding opzione selezionata.
Tu specifichi URL-encoding utilizzando il Transform campo. Questo campo contiene RequestBodyEncoding campo che specifica se si desidera candidarsi o meno URL-encoding per gli enti preposti alla richiesta. Quando si specifica il RequestBodyEncoding campo, Step Functions converte il corpo della richiesta JSON in form-urlencoded corpo della richiesta prima di chiamare l'API HTTPS. È inoltre necessario specificare il content-type intestazione come application/x-www-form-urlencoded perché API che accettano URL-encoded i dati si aspettano il content-type intestazione.
Per codificare gli array nel corpo della richiesta, Step Functions fornisce le seguenti opzioni di codifica degli array.
-
INDICES— Ripete una chiave per ogni elemento di un array e aggiunge una parentesi, [], alla chiave per indicare che si tratta di una matrice. Questa parentesi contiene l’indice dell’elemento dell’array. L’aggiunta dell’indice consente di specificare l’ordine degli elementi dell’array. Per impostazione predefinita, Step Functions utilizza questa opzione di codifica.Ad esempio, se il corpo della richiesta contiene il seguente array.
{"array": ["a","b","c","d"]}Step Functions codifica questo array nella stringa seguente.
array[0]=a&array[1]=b&array[2]=c&array[3]=d -
REPEAT— Ripete una chiave per ogni elemento di un array.Ad esempio, se il corpo della richiesta contiene il seguente array.
{"array": ["a","b","c","d"]}Step Functions codifica questo array nella stringa seguente.
array=a&array=b&array=c&array=d -
COMMAS— Codifica tutti i valori di una chiave come elenco di valori delimitato da virgole.Ad esempio, se il corpo della richiesta contiene il seguente array.
{"array": ["a","b","c","d"]}Step Functions codifica questo array nella stringa seguente.
array=a,b,c,d -
BRACKETS— Ripete una chiave per ogni elemento di un array e aggiunge una parentesi, [], alla chiave per indicare che si tratta di un array.Ad esempio, se il corpo della richiesta contiene il seguente array.
{"array": ["a","b","c","d"]}Step Functions codifica questo array nella stringa seguente.
array[]=a&array[]=b&array[]=c&array[]=d
Autorizzazioni IAM per eseguire un task HTTP
Il ruolo di esecuzione della macchina a stati deve disporre delle seguenti autorizzazioni affinché un task HTTP possa chiamare un'API HTTPS:
states:InvokeHTTPEndpointevents:RetrieveConnectionCredentialssecretsmanager:GetSecretValuesecretsmanager:DescribeSecret
Il seguente esempio di policy IAM concede i privilegi minimi richiesti al tuo ruolo di macchina statale per chiamare le API di Stripe. Questa policy IAM concede inoltre l'autorizzazione al ruolo di macchina statale per accedere a uno specifico EventBridge connessione, incluso il segreto di questa connessione memorizzato in Secrets Manager.
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "states:InvokeHTTPEndpoint", "Resource": "arn:aws:states:us-east-2::stateMachine:123456789012myStateMachine", "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::connection/123456789012oauth_connection/aeabd89e-d39c-4181-9486-9fe03e6f286a" }, { "Sid": "Statement3", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:events!connection/*" } ] }
Importante
Puoi avere un ambito states:InvokeHTTPEndpoint autorizzazioni per una macchina a stati specifica specificando un ARN della macchina a stati nella dichiarazione della politica Resource campo, ma definendo ulteriormente l'ambito delle autorizzazioni utilizzando un aws:ResourceTag/${TagKey} la chiave di condizione non è supportata al momento.
Esempio di attività HTTP
La seguente definizione di macchina a stati mostra un Task HTTP che include Headers, QueryParameters, Transform, e RequestBody parametri. L'HTTP Task chiama un'API Stripe, https://api.stripe.com/v1/invoices, per generare una fattura. L'HTTP Task specifica inoltre URL-encoding per il corpo della richiesta utilizzando INDICES opzione di codifica.
Assicurati di aver creato un EventBridge connessione. L'esempio seguente mostra una connessione creata utilizzando il tipo di autenticazione BASIC.
{
"Type": "BASIC",
"AuthParameters": {
"BasicAuthParameters": {
"Password": "myPassword",
"Username": "myUsername"
},
}
}
Ricordati di sostituire il italicized testo con le informazioni specifiche della risorsa.
{ "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 } } }
Per eseguire questa macchina a stati, fornisci l'ID cliente come input, come mostrato nell'esempio seguente:
{
"customer_id": "1234567890"
}
L'esempio seguente mostra la richiesta HTTP che Step Functions invia all'API Stripe.
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
Test di un task HTTP
Puoi usare il TestState API tramite la console, l'SDK o il AWS CLI a test un'attività HTTP. La procedura seguente descrive come utilizzare TestState API in Step Functions console. Puoi testare in modo iterativo i dettagli di richiesta, risposta e autenticazione dell'API finché l'HTTP Task non funziona come previsto.
Verifica lo stato di un'attività HTTP in Funzioni Step console
-
Aprire il Console Step Functions
. -
Scegli Crea una macchina a stati per iniziare a creare una macchina a stati o scegliere una macchina a stati esistente che contenga un'attività HTTP.
Fai riferimento al passaggio 4 se stai testando l'attività in una macchina a stati esistente.
-
Nel Modalità di progettazione di Workflow Studio, configura visivamente un'attività HTTP. Oppure scegli la modalità Codice per copiare e incollare la definizione della macchina a stati dal tuo ambiente di sviluppo locale.
-
In modalità Progettazione, scegli Stato del test nel Pannello Ispettore pannello di Workflow Studio.
-
Nel Stato del test finestra di dialogo, effettuate le seguenti operazioni:
-
Per Ruolo di esecuzione, scegli un ruolo di esecuzione per testare lo stato. Se non hai un ruolo con autorizzazioni sufficienti per un'attività HTTP, vedere Ruolo per testare le attività HTTP in Workflow Studio per creare un ruolo.
-
(Facoltativo) Fornisci qualsiasi input JSON necessario per il test nello stato selezionato.
-
Per Livello di ispezione, mantieni la selezione predefinita di INFORMAZIONI. Questo livello mostra lo stato della chiamata API e lo stato dell'output. Ciò è utile per verificare rapidamente la risposta dell'API.
-
Scegli Inizia il test.
-
Se il test ha esito positivo, l'uscita di stato appare sul lato destro del Stato del test finestra di dialogo. Se il test fallisce, viene visualizzato un errore.
Nel Dettagli sullo stato nella scheda della finestra di dialogo, puoi vedere la definizione dello stato e un link al tuo EventBridge connessione.
-
Cambia il Livello di ispezione a TRACCIA. Questo livello mostra la richiesta e la risposta HTTP non elaborate ed è utile per verificare le intestazioni, i parametri delle query e altro API-specific dettagli.
-
Scegli il Rivela i segreti casella di controllo. In combinazione con TRACCIA, questa impostazione consente di visualizzare i dati sensibili che EventBridge inserti di connessione, come le chiavi API. Il IAM l'identità utente utilizzata per accedere alla console deve disporre dell'autorizzazione per eseguire
states:RevealSecretsazione. Senza questo permesso, Step Functions genera un errore di accesso negato all'avvio del test. Per un esempio di IAM politica che stabilisce ilstates:RevealSecretsautorizzazione, vedi IAM autorizzazioni per l'utilizzo dell'API TestState.L'immagine seguente mostra un test per un'operazione HTTP che ha esito positivo. Il Livello di ispezione per questo stato è impostato su TRACCIA. Il Richiesta e risposta HTTP la scheda nell'immagine seguente mostra il risultato della chiamata all'API HTTPS.
-
Scegli Inizia il test.
-
Se il test ha esito positivo, puoi vedere i tuoi dati HTTP sotto Richiesta e risposta HTTP scheda.
-
Risposte alle attività HTTP non supportate
Un'operazione HTTP ha esito negativo con States.Runtime errore se una delle seguenti condizioni è vera per la risposta restituita:
-
La risposta contiene un'intestazione di tipo di contenuto di
application/octet-stream,image/*,video/*, oaudio/*. -
La risposta non può essere letta come una stringa valida. Ad esempio, dati binari o di immagine.
Errori di connessione
Se EventBridge riscontra un problema durante la connessione all'API specificata durante l'esecuzione del flusso di lavoro, Step Functions genera l'errore nel flusso di lavoro. Gli errori di connessione sono preceduti da Events.ConnectionResource..
Questi errori includono:
Events.ConnectionResource.InvalidConnectionStateEvents.ConnectionResource.InvalidPrivateConnectionStateEvents.ConnectionResource.AccessDeniedEvents.ConnectionResource.ResourceNotFoundEvents.ConnectionResource.AuthInProgressEvents.ConnectionResource.ConcurrentModificationEvents.ConnectionResource.InternalError