Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Appelez un tiers APIs dans les flux de travail Step Functions
Une HTTP tâche est un type d'État du flux de travail des tâchesétat qui vous permet d'appeler n'importe quel public, tiersAPI, tel que Salesforce et Stripe, dans vos flux de travail. Pour appeler un tiersAPI, utilisez l'état de tâche associé à la arn:aws:states:::http:invoke
ressource. Fournissez ensuite les détails de configuration du point de API terminaison APIURL, tels que la méthode que vous souhaitez utiliser et les détails d'authentification.
Si vous utilisez Workflow Studio pour créer votre machine d'état contenant une HTTP tâche, Workflow Studio génère automatiquement un rôle d'exécution avec des IAM politiques pour la HTTP tâche. Pour de plus amples informations, veuillez consulter Rôle pour tester les HTTP tâches dans Workflow Studio.
Rubriques
- HTTPDéfinition de la tâche
- HTTPChamps de tâches
- Authentification pour une HTTP tâche
- Fusion des données de EventBridge connexion et de définition des HTTP tâches
- Appliquer l'URLencodage au corps de la demande
- IAMautorisations pour exécuter une HTTP tâche
- HTTPExemple de tâche
- Tester une HTTP tâche
- Réponses aux HTTP tâches non prises en charge
HTTPDéfinition de la tâche
La ASLdéfinition représente une HTTP tâche avec une http:invoke
ressource. La définition de HTTP tâche suivante invoque un Stripe API qui renvoie une liste de tous les clients.
"Call third-party API": {
"Type": "Task",
"Resource": "arn:aws:states:::http:invoke",
"Parameters": {
"ApiEndpoint": "https://api.stripe.com/v1/customers",
"Authentication": {
"ConnectionArn": "arn:aws:events:us-east-2
:123456789012
:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac"
},
"Method": "GET"
},
"End": true
}
HTTPChamps de tâches
Une HTTP tâche inclut les champs suivants dans sa définition.
Resource
(Obligatoire)-
Pour spécifier un type de tâche, ARN indiquez-le dans le
Resource
champ. Pour une HTTP tâche, vous devez spécifier leResource
champ comme suit."Resource": "arn:aws:states:::http:invoke"
Parameters
(Obligatoire)-
Contient les
ConnectionArn
champsApiEndpoint
Method
, et qui fournissent des informations sur le tiers que API vous souhaitez appeler.Parameters
contient également des champs facultatifs, tels queHeaders
etQueryParameters
.Vous pouvez spécifier une combinaison de statique JSON et de JsonPath
syntaxe comme Parameters
dans leParameters
champ. Pour de plus amples informations, veuillez consulter Transmission de paramètres à un service API dans Step Functions.ApiEndpoint
(Obligatoire)-
Spécifie URL le tiers API que vous souhaitez appeler. Pour leur ajouter des paramètres de requêteURL, utilisez le champ.
QueryParameters
L'exemple suivant montre comment vous pouvez appeler un Stripe API pour récupérer la liste de tous les clients."ApiEndpoint":"https://api.stripe.com/v1/customers"
Vous pouvez également spécifier un chemin de référence à l'aide de la JsonPath
syntaxe permettant de sélectionner le JSON nœud contenant le tiers APIURL. Supposons, par exemple, que vous souhaitiez appeler l'un des Stripe APIs en utilisant un identifiant client spécifique. Imaginez que vous avez fourni l'entrée d'état suivante. { "customer_id": "1234567890", "name": "John Doe" }
Pour récupérer les détails de cet identifiant client à l'aide d'un StripeAPI, spécifiez le
ApiEndpoint
comme indiqué dans l'exemple suivant. Cet exemple utilise une fonction intrinsèque et un chemin de référence."ApiEndpoint.$":"States.Format('https://api.stripe.com/v1/customers/{}', $.customer_id)"
Au moment de l'exécution, Step Functions résout la valeur de la manière
ApiEndpoint
suivante.https://api.stripe.com/v1/customers/
1234567890
Method
(Obligatoire)-
Spécifie la HTTP méthode que vous souhaitez utiliser pour appeler un tiersAPI. Vous pouvez spécifier l'une des méthodes suivantes dans votre HTTP tâche : GET POSTPUT,DELETE,PATCH,OPTIONS, ouHEAD.
Par exemple, pour utiliser la GET méthode, spécifiez le
Method
champ comme suit."Method": "GET"
Vous pouvez également utiliser un chemin de référence pour spécifier la méthode lors de l'exécution. Par exemple,
"Method.$": "$.myHTTPMethod"
. Authentication
(Obligatoire)-
Contient le
ConnectionArn
champ qui indique comment authentifier un API appel tiers. Step Functionsprend en charge l'authentification pour un élément spécifiéApiEndpoint
à l'aide de la ressource de connexion deAmazon EventBridge.ConnectionArn
(Obligatoire)-
Spécifie la EventBridge connexionARN.
Une HTTP tâche nécessite une EventBridge connexion qui gère de manière sécurisée les informations d'authentification d'un API fournisseur. Une connexion indique le type d'autorisation et les informations d'identification à utiliser pour autoriser un tiersAPI. L'utilisation d'une connexion vous permet d'éviter de coder en dur des secrets, tels que API des clés, dans la définition de votre machine à états. Dans une connexion, vous pouvez également spécifier
Headers
QueryParameters
, et desRequestBody
paramètres.Lorsque vous créez une EventBridge connexion, vous fournissez vos informations d'authentification. Pour plus d'informations sur le fonctionnement de l'authentification pour une HTTP tâche, consultezAuthentification pour une HTTP tâche.
L'exemple suivant montre comment vous pouvez spécifier le
Authentication
champ dans votre définition de HTTP tâche."Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:
123456789012
:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" } Headers
(facultatif)-
Fournit du contexte et des métadonnées supplémentaires au API point de terminaison. Vous pouvez spécifier les en-têtes sous forme de chaîne ou de JSON tableau.
Vous pouvez spécifier des en-têtes dans la EventBridge connexion et dans le
Headers
champ d'une HTTP tâche. Nous vous recommandons de ne pas inclure les informations d'authentification de vos API fournisseursHeaders
sur le terrain. Nous vous recommandons d'inclure ces informations dans votre EventBridge connexion.Step Functionsajoute les en-têtes que vous spécifiez dans la EventBridge connexion aux en-têtes que vous spécifiez dans la définition de la HTTP tâche. Si les mêmes clés d'en-tête sont présentes dans la définition et la connexion, Step Functions utilise les valeurs correspondantes spécifiées dans la EventBridge connexion pour ces en-têtes. Pour plus d'informations sur le Step Functions mode de fusion des données, consultezFusion des données de EventBridge connexion et de définition des HTTP tâches.
L'exemple suivant spécifie un en-tête qui sera inclus dans un API appel tiers :
content-type
."Headers": { "content-type": "application/json" }
Vous pouvez également utiliser un chemin de référence pour spécifier les en-têtes lors de l'exécution. Par exemple,
"Headers.$": "$.myHTTPHeaders"
.Step Functionsdéfinit les
Host
en-têtesUser-Agent
Range
, et. Step Functionsdéfinit la valeur de l'Host
en-tête en fonction du nom que API vous appelez. Voici un exemple de ces en-têtes.User-Agent: Amazon|StepFunctions|HttpInvoke|
us-east-1
, Range: bytes=0-262144, Host: api.stripe.comVous ne pouvez pas utiliser les en-têtes suivants dans votre définition de HTTP tâche. Si vous utilisez ces en-têtes, la HTTP tâche échoue avec l'
States.Runtime
erreur.-
A-IM
-
Accept-Charset
-
Accept-Datetime
-
Accept-Encoding
-
Cache-Control
-
Connexion
-
Encodage-Contenu
-
Contenu- MD5
-
Date
-
Expect
-
Forwarded
-
De
-
Host (Hôte)
-
HTTP2-Réglages
-
If-Match
-
If-Modified-Since
-
If-None-Match
-
If-Range
-
If-Unmodified-Since
-
Max-Forwards
-
Origin
-
Pragma
-
Proxy-Authorization
-
Référent
-
Serveur
-
TE
-
Trailer
-
Transfer-Encoding
-
Upgrade
-
Via
-
Avertissement
-
X-Forwarded-*
-
x-amz-*
-
x-amzn-*
-
QueryParameters
(facultatif)-
Insère des paires clé-valeur à la fin d'un. API URL Vous pouvez spécifier les paramètres de requête sous forme de chaîne, de JSON tableau ou d'JSONobjet. Step FunctionsURL-encode automatiquement les paramètres de requête lorsqu'il appelle un tiers. API
Supposons, par exemple, que vous souhaitiez appeler Stripe API pour rechercher des clients qui effectuent leurs transactions en dollars américains (USD). Imaginez que vous avez fourni ce qui suit
QueryParameters
comme entrée d'état."QueryParameters": { "currency": "usd" }
Au moment de l'exécution, Step Functions ajoute le
QueryParameters
au API URL comme suit.https://api.stripe.com/v1/customers/search?currency=usd
Vous pouvez également utiliser un chemin de référence pour spécifier les paramètres de requête lors de l'exécution. Par exemple,
"QueryParameters.$": "$.myQueryParameters"
.Si vous avez spécifié des paramètres de requête dans votre EventBridge connexion, Step Functions ajoute ces paramètres de requête aux paramètres de requête que vous spécifiez dans la définition de la HTTP tâche. Si les mêmes clés de paramètres de requête sont présentes dans la définition et la connexion, Step Functions utilise les valeurs correspondantes spécifiées dans la EventBridge connexion pour ces en-têtes. Pour plus d'informations sur le Step Functions mode de fusion des données, consultezFusion des données de EventBridge connexion et de définition des HTTP tâches.
Transform
(facultatif)-
Contient les
RequestEncodingOptions
champsRequestBodyEncoding
et. Par défaut, Step Functions envoie le corps de la demande sous forme de JSON données à un API point de terminaison.Si votre API fournisseur accepte les corps de
form-urlencoded
demande, utilisez leTransform
champ pour spécifier URL -encoding pour les corps de demande. Vous devez également spécifier l'content-type
en-tête sous la formeapplication/x-www-form-urlencoded
. Step Functionspuis URL encode automatiquement le corps de votre demande.RequestBodyEncoding
-
Spécifie l'URLencodage du corps de votre demande. Vous pouvez spécifier l'une des valeurs suivantes :
NONE
ouURL_ENCODED
.-
NONE
— Le corps de la HTTP demande sera le numéro de série JSON duRequestBody
champ. C’est la valeur par défaut. -
URL_ENCODED
— Le corps de la HTTP demande sera constitué des données de formulaire URL codées duRequestBody
champ.
-
RequestEncodingOptions
-
Détermine l'option de codage à utiliser pour les tableaux dans le corps de votre demande si vous définissez sur
RequestBodyEncoding
.URL_ENCODED
Step Functionsprend en charge les options de codage de tableau suivantes. Pour plus d'informations sur ces options et leurs exemples, consultezAppliquer l'URLencodage au corps de la demande.
-
INDICES
— Encode les tableaux en utilisant la valeur d'index des éléments du tableau. Step FunctionsUtilise cette option de codage par défaut. -
REPEAT
— Répète une clé pour chaque élément d'un tableau. -
COMMAS
— Encode toutes les valeurs d'une clé sous forme de liste de valeurs séparées par des virgules. -
BRACKETS
— Répète une clé pour chaque élément d'un tableau et ajoute un crochet, [], à la clé pour indiquer qu'il s'agit d'un tableau.
-
L'exemple suivant définit URL -encoding pour les données du corps de la demande. Il indique également d'utiliser l'option d'
COMMAS
encodage pour les tableaux dans le corps de la requête."Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "COMMAS" } }
RequestBody
(facultatif)-
Accepte JSON les données que vous fournissez dans l'entrée d'état. Dans
RequestBody
, vous pouvez spécifier une combinaison de statique JSON et de JsonPathsyntaxe. Supposons, par exemple, que vous fournissiez l'entrée d'état suivante : { "CardNumber": "1234567890", "ExpiryDate": "09/25" }
Pour utiliser ces valeurs de
CardNumber
etExpiryDate
dans le corps de votre demande lors de l'exécution, vous pouvez spécifier les JSON données suivantes dans le corps de votre demande."RequestBody": { "Card": { "Number.$": "$.CardNumber", "Expiry.$": "$.ExpiryDate", "Name": "John Doe", "Address": "123 Any Street, Any Town, USA" } }
Si le tiers que API vous souhaitez appeler a besoin de corps de
form-urlencoded
demande, vous devez spécifier URL -encoding pour les données du corps de votre demande. Pour de plus amples informations, veuillez consulter Appliquer l'URLencodage au corps de la demande.
Authentification pour une HTTP tâche
Une HTTP tâche nécessite une EventBridge connexion qui gère de manière sécurisée les informations d'authentification d'un API fournisseur. Une connexion indique le type d'autorisation et les informations d'identification à utiliser pour autoriser un tiersAPI. L'utilisation d'une connexion vous permet d'éviter de coder en dur des secrets, tels que API des clés, dans la définition de votre machine à états. Une EventBridge connexion prend en charge les schémas OAuth d'autorisation Basic et API Key.
Lorsque vous créez une EventBridge connexion, vous fournissez vos informations d'authentification. Vous pouvez également inclure les paramètres d'en-tête, de corps et de requête requis pour l'autorisation avec unAPI. Vous devez inclure la connexion ARN dans toute HTTP tâche qui appelle un tiersAPI.
Lorsque vous créez une connexion et que vous ajoutez des paramètres d'autorisation, EventBridge crée un secret dans AWS Secrets Manager. Dans ce secret, EventBridge stocke les paramètres de connexion et d'autorisation sous une forme cryptée. Pour créer ou mettre à jour correctement une connexion, vous devez utiliser une Compte AWS personne autorisée à utiliser Secrets Manager. Pour plus d'informations sur les IAM autorisations dont votre machine d'état a besoin pour accéder à une EventBridge connexion, consultezIAMautorisations pour exécuter une HTTP tâche.
L'image suivante montre comment Step Functions gère l'authentification pour les API appels tiers via une EventBridge connexion. La EventBridge connexion qui gère les informations d'identification d'un API fournisseur tiers. EventBridgecrée un secret Secrets Manager pour stocker les paramètres de connexion et d'autorisation sous une forme cryptée.
![Schéma montrant comment Step Functions utilise EventBridge les connexions pour les appels aux HTTP points de terminaison.](images/http-task-how-auth-works.png)
Fusion des données de EventBridge connexion et de définition des HTTP tâches
Lorsque vous appelez une HTTP tâche, vous pouvez spécifier des données dans votre EventBridge connexion et dans votre définition de HTTP tâche. Ces données incluent Headers
QueryParameters
, et les RequestBody
paramètres. Avant d'appeler un tiersAPI, Step Functions fusionne le corps de la requête avec les paramètres du corps de connexion dans tous les cas, sauf si le corps de votre demande est une chaîne et que les paramètres du corps de connexion ne sont pas vides. Dans ce cas, la HTTP tâche échoue avec l'States.Runtime
erreur.
Si des clés dupliquées sont spécifiées dans la définition de la HTTP tâche et dans la EventBridge connexionStep Functions, les valeurs de la HTTP tâche sont remplacées par celles de la connexion.
La liste suivante décrit comment Step Functions fusionner les données avant d'appeler un tiers API :
-
En-têtes : Step Functions ajoute tous les en-têtes que vous avez spécifiés dans la connexion aux en-têtes du
Headers
champ de la tâche. HTTP En cas de conflit entre les clés d'en-tête, Step Functions utilise les valeurs spécifiées dans la connexion pour ces en-têtes. Par exemple, si vous avez spécifié l'content-type
en-tête à la fois dans la définition de la HTTP tâche et dans la EventBridge connexion, Step Functions utilise la valeurcontent-type
d'en-tête spécifiée dans la connexion. -
Paramètres de requête : Step Functions ajoute tous les paramètres de requête que vous avez spécifiés dans la connexion aux paramètres de requête dans le
QueryParameters
champ de la HTTP tâche. En cas de conflit entre les clés des paramètres de requête, Step Functions utilise les valeurs spécifiées dans la connexion pour ces paramètres de requête. Par exemple, si vous avez spécifié le paramètre demaxItems
requête à la fois dans la définition de la HTTP tâche et dans la EventBridge connexion, Step Functions utilise la valeur du paramètre demaxItems
requête spécifiée dans la connexion. -
Paramètres de corps
-
Step Functionsajoute toutes les valeurs du corps de demande spécifiées dans la connexion au corps de la demande dans le
RequestBody
champ de la HTTP tâche. En cas de conflit entre les clés du corps de la demande, Step Functions utilise les valeurs spécifiées dans la connexion pour le corps de la demande. Supposons, par exemple, que vous ayez spécifié unMode
champ dans la définitionRequestBody
de la HTTP tâche et dans la EventBridge connexion. Step Functionsutilise la valeur duMode
champ que vous avez spécifiée dans la connexion. -
Si vous spécifiez le corps de la demande sous la forme d'une chaîne plutôt que d'un JSON objet et que la EventBridge connexion contient également le corps de la demande, Step Functions vous ne pouvez pas fusionner le corps de la demande spécifié à ces deux endroits. La HTTP tâche avec l'
States.Runtime
erreur échoue.
Step Functionsapplique toutes les transformations et sérialise le corps de la demande une fois la fusion terminée.
-
L'exemple suivant définit les RequestBody
champs Headers
QueryParameters
, et dans la HTTP tâche et dans la EventBridge connexion.
HTTPDéfinition de la tâche
{ "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"
} } } } }
Connexion 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"
} ] } } }
Dans cet exemple, les clés dupliquées sont spécifiées dans la HTTP tâche et la EventBridge connexion. Par conséquent, Step Functions remplace les valeurs de la HTTP tâche par celles de la connexion. L'extrait de code suivant montre la HTTP demande envoyée Step Functions au tiers. 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"}
Appliquer l'URLencodage au corps de la demande
Par défaut, Step Functions envoie le corps de la demande sous forme de JSON données à un API point de terminaison. Si votre API fournisseur tiers a besoin de corps de form-urlencoded
demande, vous devez spécifier URL -encoding pour les corps de demande. Step FunctionsURLencode ensuite automatiquement le corps de la demande en fonction de l'option URL -encoding que vous avez sélectionnée.
Vous spécifiez URL -encoding à l'aide du Transform
champ. Ce champ contient le RequestBodyEncoding
champ qui indique si vous souhaitez ou non appliquer l'URLencodage aux corps de vos demandes. Lorsque vous spécifiez le RequestBodyEncoding
champ, Step Functions convertit le corps de votre JSON demande en corps de form-urlencoded
demande avant d'appeler le tiersAPI. Vous devez également spécifier l'content-type
en-tête application/x-www-form-urlencoded
car APIs les données URL codées par acceptation attendent l'content-type
en-tête.
Pour coder des tableaux dans le corps de votre requête, Step Functions fournit les options de codage des tableaux suivantes.
-
INDICES
— Répète une clé pour chaque élément d'un tableau et ajoute un crochet, [], à la clé pour indiquer qu'il s'agit d'un tableau. Ce crochet contient l'index de l'élément du tableau. L'ajout de l'index permet de définir l'ordre des éléments du tableau. Step FunctionsUtilise cette option de codage par défaut.Par exemple, si le corps de votre requête contient le tableau suivant.
{"array": ["a","b","c","d"]}
Step Functionscode ce tableau dans la chaîne suivante.
array[0]=a&array[1]=b&array[2]=c&array[3]=d
-
REPEAT
— Répète une clé pour chaque élément d'un tableau.Par exemple, si le corps de votre requête contient le tableau suivant.
{"array": ["a","b","c","d"]}
Step Functionscode ce tableau dans la chaîne suivante.
array=a&array=b&array=c&array=d
-
COMMAS
— Encode toutes les valeurs d'une clé sous forme de liste de valeurs séparées par des virgules.Par exemple, si le corps de votre requête contient le tableau suivant.
{"array": ["a","b","c","d"]}
Step Functionscode ce tableau dans la chaîne suivante.
array=a,b,c,d
-
BRACKETS
— Répète une clé pour chaque élément d'un tableau et ajoute un crochet, [], à la clé pour indiquer qu'il s'agit d'un tableau.Par exemple, si le corps de votre requête contient le tableau suivant.
{"array": ["a","b","c","d"]}
Step Functionscode ce tableau dans la chaîne suivante.
array[]=a&array[]=b&array[]=c&array[]=d
IAMautorisations pour exécuter une HTTP tâche
Votre rôle d'exécution de machine à états doit disposer des secretsmanager:DescribeSecret
autorisations states:InvokeHTTPEndpoint
events:RetrieveConnectionCredentials
secretsmanager:GetSecretValue
,, et pour qu'une HTTP tâche puisse appeler un tiersAPI. L'exemple IAM de politique suivant accorde le minimum de privilèges requis à votre rôle de machine d'État pour appeler StripeAPIs. Cette IAM politique autorise également le rôle de machine d'état à accéder à une EventBridge connexion spécifique, y compris le secret de cette connexion qui est stocké dans Secrets Manager.
{ "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/*" } ] }
HTTPExemple de tâche
La définition de machine à états suivante montre une HTTP tâche qui inclut les RequestBody
paramètres Headers
QueryParameters
Transform
,, et. La HTTP tâche appelle un StripeAPI, https://api.stripe.com/v1/ des factures, pour générer une facture. La HTTP tâche spécifie également URL -encoding pour le corps de la demande à l'aide de l'option INDICES
encoding.
Assurez-vous d'avoir créé une EventBridge connexion. L'exemple suivant montre une connexion créée à l'aide BASIC du type d'authentification.
{
"Type": "BASIC",
"AuthParameters": {
"BasicAuthParameters": {
"Password": "myPassword",
"Username": "myUsername"
},
}
}
N'oubliez pas de remplacer le italicized
texte contenant les informations spécifiques à votre ressource.
{ "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 } } }
Pour exécuter cette machine d'état, entrez l'ID client comme entrée, comme indiqué dans l'exemple suivant :
{
"customer_id": "1234567890"
}
L'exemple suivant montre la HTTP demande Step Functions envoyée au 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
Tester une HTTP tâche
Vous pouvez l'utiliser TestStateAPIvia la SDK console ou AWS CLI pour tester une HTTP tâche. La procédure suivante décrit comment utiliser le TestState API dans la Step Functions console. Vous pouvez tester de manière itérative les détails de la API demande, de la réponse et de l'authentification jusqu'à ce que votre HTTP tâche fonctionne comme prévu.
Tester l'état d'une HTTP tâche dans Step Functions la console
-
Ouvrez la console Step Functions
. -
Choisissez Créer une machine à états pour commencer à créer une machine à états ou choisissez une machine à états existante contenant une HTTP tâche.
Reportez-vous à l'étape 4 si vous testez la tâche sur une machine à états existante.
-
Dans Workflow Studio, configurez une HTTP tâche visuellement. Mode de conception Vous pouvez également choisir le mode Code pour copier-coller la définition de la machine à états depuis votre environnement de développement local.
-
En mode Design, choisissez Test state dans le Panneau Inspector panneau de Workflow Studio.
-
Dans la boîte de dialogue État du test, procédez comme suit :
-
Pour Rôle d'exécution, choisissez un rôle d'exécution pour tester l'état. Si vous ne disposez pas d'un rôle doté d'autorisations suffisantes pour une HTTP tâche, consultez la section Rôle pour tester les HTTP tâches dans Workflow Studio pour créer un rôle.
-
(Facultatif) Fournissez JSON toutes les données dont l'État sélectionné a besoin pour le test.
-
Pour le niveau d'inspection, conservez la sélection par défaut de INFO. Ce niveau vous indique le statut de l'APIappel et l'état de sortie. Ceci est utile pour vérifier rapidement la API réponse.
-
Choisissez Démarrer le test.
-
Si le test réussit, la sortie d'état apparaît sur le côté droit de la boîte de dialogue État du test. Si le test échoue, une erreur apparaît.
Dans l'onglet Détails de l'état de la boîte de dialogue, vous pouvez voir la définition de l'état et un lien vers votre EventBridgeconnexion.
-
Changez le niveau d'inspection en TRACE. Ce niveau affiche la HTTP requête et la réponse brutes et est utile pour vérifier les en-têtes, les paramètres de requête et d'autres détails API spécifiques.
-
Cochez la case Révéler les secrets. Associé à ce paramètre TRACE, vous pouvez voir les données sensibles insérées par la EventBridge connexion, telles que API les clés. L'identité IAM utilisateur que vous utilisez pour accéder à la console doit être autorisée à effectuer l'
states:RevealSecrets
action. Sans cette autorisation, Step Functions génère une erreur de refus d'accès lorsque vous lancez le test. Pour un exemple de IAM politique définissant l'states:RevealSecrets
autorisation, consultezIAMautorisations d'utilisation TestState API.L'image suivante montre le test d'une HTTP tâche qui aboutit. Le niveau d'inspection pour cet état est défini sur TRACE. L'onglet HTTPDemande et réponse de l'image suivante montre le résultat de l'APIappel d'un tiers.
-
Choisissez Démarrer le test.
-
Si le test réussit, vous pouvez consulter vos HTTP informations dans l'onglet HTTPDemande et réponse.
-
Réponses aux HTTP tâches non prises en charge
Une HTTP tâche échoue avec l'States.Runtime
erreur si l'une des conditions suivantes est vraie pour la réponse renvoyée :
-
La réponse contient un en-tête de type contenu
application/octet-stream
,image/*
video/*
, ou.audio/*
-
La réponse ne peut pas être lue comme une chaîne valide. Par exemple, des données binaires ou d'image.