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 les API HTTPS dans les flux de travail Step Functions
Une tâche HTTP est un type de État du flux de travail des tâches état que vous pouvez utiliser pour appeler des API HTTPS dans vos flux de travail. L'API peut être publique, comme des applications SaaS tierces telles que Stripe ou Salesforce. Vous pouvez également appeler une API privée, telle que HTTPS-based applications dans un Amazon Virtual Private Cloud.
Pour l'autorisation et la connectivité réseau, une tâche HTTP nécessite EventBridge connexion.
Pour appeler une API HTTPS, utilisez Tâche état avec arn:aws:states:::http:invoke ressource. Fournissez ensuite les détails de configuration du point de terminaison de l'API, tels que l'URL de l'API, la méthode que vous souhaitez utiliser et connexion détails.
Si vous utilisez Workflow Studio pour créer votre machine d'état contenant une tâche HTTP, Workflow Studio génère automatiquement un rôle d'exécution avec IAM politiques pour la tâche HTTP. Pour plus d’informations, consultez Rôle pour tester les tâches HTTP dans Workflow Studio.
Note
HTTP Task ne prend actuellement en charge que les noms de domaine publics avec des certificats approuvés publiquement pour les points de terminaison HTTPS lors de l'utilisation d'API privées. La tâche HTTP ne prend pas en charge le protocole TLS mutuel (mTLS).
Connectivité pour une tâche HTTP
Une tâche HTTP nécessite un EventBridge connexion, qui gère en toute sécurité les informations d'authentification d'un fournisseur d'API. UNE connexion définit la méthode d'autorisation et les informations d'identification à utiliser pour se connecter à une API donnée. Si vous vous connectez à une API privée, telle qu'une API privée dans un Amazon Virtual Private Cloud (Amazon VPC), vous pouvez également utiliser la connexion pour définir une connectivité réseau point à point sécurisée. L’utilisation d’une connexion vous permet d’éviter de coder en dur des secrets, tels que des clés API, dans la définition de votre machine d’état. Un EventBridge connection prend en charge les schémas d'autorisation Basic, OAuth et API Key.
Lorsque vous créez un EventBridge connexion, vous fournissez vos informations d'autorisation et de connectivité réseau. Vous pouvez également inclure les paramètres d'en-tête, de corps et de requête requis pour l'autorisation auprès d'une API. Vous devez inclure l'ARN de connexion dans toute tâche HTTP qui appelle une API HTTPS.
Lorsque vous créez une connexion, EventBridge crée un secret dans AWS Secrets Manager. Dans ce secret, EventBridge stocke les paramètres de connexion et d'autorisation sous forme cryptée. Pour créer ou mettre à jour correctement une connexion, vous devez utiliser Compte AWS qui est autorisé à utiliser Secrets Manager. Pour plus d'informations sur le IAM autorisations dont votre machine d'état a besoin pour accéder à EventBridge connexion, voir Autorisations IAM pour exécuter une tâche HTTP.
L'image suivante montre comment Step Functions gère l'autorisation pour les appels d'API HTTPS à l'aide d'un EventBridge connexion. Le EventBridge connection gère les informations d'identification d'un fournisseur d'API HTTPS. EventBridge crée un secret dans Secrets Manager pour stocker les paramètres de connexion et d'autorisation sous forme cryptée. Dans le cas des API privées, EventBridge stocke également les configurations de connectivité réseau.
Délais d'attente pour les connexions
Les requêtes de tâches HTTP expireront au bout de 60 secondes.
Définition de la tâche HTTP
Le Définition de l'ASL représente une tâche HTTP avec http:invoke ressource. La définition de tâche HTTP suivante invoque une API Stripe publique qui renvoie une liste de tous les clients.
"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
}
Champs de tâches HTTP
Une tâche HTTP inclut les champs suivants dans sa définition.
Resource(obligatoire)-
Pour spécifier un type de tâche, indiquez son ARN dans le
Resourcechamp. Pour une tâche HTTP, vous devez spécifierResourcechamp comme suit."Resource": "arn:aws:states:::http:invoke" Parameters(obligatoire)-
Contient le
ApiEndpoint,Method, etConnectionArnchamps qui fournissent des informations sur l'API HTTPS que vous souhaitez appeler.Parameterscontient également des champs facultatifs, tels queHeadersetQueryParameters.Vous pouvez spécifier une combinaison de JSON statique et JsonPath
syntaxe comme Parametersdans leParameterschamp. Pour plus d’informations, consultez Transmission de paramètres à une API de service dans Step Functions.Pour spécifier le EventBridge connexion, utilisez soit le
AuthenticationouInvocationConfigchamp.ApiEndpoint(Obligatoire)-
Spécifie l'URL de l'API HTTPS que vous souhaitez appeler. Pour ajouter des paramètres de requête à l'URL, utilisez
QueryParameterschamp. L'exemple suivant montre comment appeler une API Stripe 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 du JsonPath
syntaxe pour sélectionner le nœud JSON qui contient l'URL de l'API HTTPS. Supposons, par exemple, que vous souhaitiez appeler l'une des API de Stripe à l'aide d'un identifiant client spécifique. Supposons que vous ayez 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'une API Stripe, spécifiez
ApiEndpointcomme le montre l'exemple suivant. Cet exemple utilise un 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
ApiEndpointcomme suit.https://api.stripe.com/v1/customers/1234567890 Method(Obligatoire)-
Spécifie la méthode HTTP que vous souhaitez utiliser pour appeler une API HTTPS. Vous pouvez spécifier l'une des méthodes suivantes dans votre tâche HTTP : GET, POST, PUT, DELETE, PATCH, OPTIONS ou HEAD.
Par exemple, pour utiliser la méthode GET, spécifiez
Methodchamp comme suit."Method": "GET"Vous pouvez également utiliser un chemin de référence pour spécifier la méthode au moment de l'exécution. Par exemple :
"Method.$": "$.myHTTPMethod". Authentication(Conditionnel)-
Nous vous recommandons d'utiliser
InvocationConfigterminéAuthenticationpour les appels d'API HTTPS publics et privés.Existant
Authenticationles références sont conservées pour des raisons de rétrocompatibilité. Dans le champ, vous devez spécifierConnectionArnchamp qui spécifie une ressource de connexion de Amazon EventBridge pour vous connecter auApiEndpoint. InvocationConfig(Conditionnel)-
Contient la configuration de l'autorisation et de la connectivité réseau pour tous les deux appels d'API HTTPS publics et privés.
Step Functions gère la connexion pour une connexion spécifiée
ApiEndpointà l'aide de la ressource de connexion de Amazon EventBridge. Pour plus d'informations, voir Connexion à des API privées dans le Amazon EventBridge Guide de l'utilisateur.ConnectionArn(Obligatoire)-
Spécifie le EventBridge ARN de connexion.
Une tâche HTTP nécessite EventBridge connexion, qui gère en toute sécurité les informations d'autorisation d'un fournisseur d'API. UNE connexion spécifie le type d'autorisation et les informations d'identification à utiliser pour autoriser une API HTTPS. Pour les API privées, la connexion définit également une connectivité réseau point à point sécurisée. L’utilisation d’une connexion vous permet d’éviter de coder en dur des secrets, tels que des clés API, dans la définition de votre machine d’état. Dans une connexion, vous pouvez également spécifier
Headers,QueryParameters, etRequestBodyparamètres.Pour plus d’informations, consultez Connectivité pour une tâche HTTP.
L'exemple suivant montre le format de
InvocationConfigdans une tâche HTTP :"InvocationConfig": { "ConnectionArn": "arn:aws:events:region:account-id:connection/connection-id" } Headers(Facultatif)-
Fournit du contexte et des métadonnées supplémentaires au point de terminaison de l'API. Vous pouvez spécifier les en-têtes sous forme de chaîne ou de tableau JSON.
Vous pouvez spécifier des en-têtes dans EventBridge connexion et
Headerschamp d'une tâche HTTP. Nous vous recommandons de ne pas inclure les informations d'authentification de vos fournisseurs d'API dans leHeaderschamp. Nous vous recommandons d'inclure ces informations dans votre EventBridge connexion.Step Functions ajoute les en-têtes que vous spécifiez dans EventBridge connexion aux en-têtes que vous spécifiez dans la définition de la tâche HTTP. 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 EventBridge connexion pour ces en-têtes. Pour plus d'informations sur la façon dont Step Functions effectue la fusion des données, voir Fusion EventBridge données de connexion et de définition de tâches HTTP.
L'exemple suivant spécifie un en-tête qui sera inclus dans un appel d'API HTTPS :
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 Functions définit le
User-Agent,Range, etHosten-têtes. Step Functions définit la valeur deHosten-tête basé sur l'API que vous appelez. Voici un exemple de ces en-têtes.User-Agent: Amazon|StepFunctions|HttpInvoke|, Range: bytes=0-262144, Host: api.stripe.comregionVous ne pouvez pas utiliser les en-têtes suivants dans la définition de votre tâche HTTP. Si vous utilisez ces en-têtes, la tâche HTTP échoue avec
States.Runtimeerreur.-
A-IM
-
Accept-Charset
-
Accept-Datetime
-
Accept-Encoding
-
Autorisation
-
Cache-Control
-
Connexion
-
Content-Encoding
-
Content-MD5
-
Date
-
Expect
-
Forwarded
-
De
-
Host (Hôte)
-
HTTP2-Settings
-
Max-Forwards
-
Origin
-
Pragma
-
Proxy-Authenticate
-
Proxy-Authorization
-
Référent
-
Serveur
-
TE
-
Trailer
-
Transfer-Encoding
-
Upgrade
-
Via
-
Avertissement
-
WWW-Authenticate
-
x-transféré-*
-
x-amz-*
-
x-amzn-*
-
QueryParameters(Facultatif)-
Insère des paires clé-valeur à la fin d'une URL d'API. Vous pouvez spécifier les paramètres de requête sous la forme d'une chaîne, d'un tableau JSON ou d'un objet JSON. Step Functions automatiquement URL-encodes paramètres de requête lorsqu'il appelle une API HTTPS.
Supposons, par exemple, que vous souhaitiez appeler l'API Stripe pour rechercher des clients qui effectuent leurs transactions en dollars américains (USD). Imaginez que vous ayez fourni les informations suivantes
QueryParameterscomme entrée d'état."QueryParameters": { "currency": "usd" }Lors de l'exécution, Step Functions ajoute le
QueryParametersà l'URL de l'API comme suit.https://api.stripe.com/v1/customers/search?currency=usdVous 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 tâche HTTP. 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 EventBridge connexion pour ces en-têtes. Pour plus d'informations sur la façon dont Step Functions effectue la fusion des données, voir Fusion EventBridge données de connexion et de définition de tâches HTTP.
Transform(Facultatif)-
Contient le
RequestBodyEncodingetRequestEncodingOptionschamps. Par défaut, Step Functions envoie le corps de la requête sous forme de données JSON à un point de terminaison d'API.Si votre fournisseur d'API accepte
form-urlencodedorganismes de demande, utilisez leTransformchamp à spécifier URL-encoding pour les organismes demandeurs. Vous devez également spécifiercontent-typeen-tête en tant queapplication/x-www-form-urlencoded. Step Functions puis automatiquement URL-encodes l'organisme de votre demande.RequestBodyEncoding-
Spécifie URL-encoding de l'organisme de votre demande. Vous pouvez spécifier l'une des valeurs suivantes :
NONEouURL_ENCODED.-
NONE— Le corps de la requête HTTP sera le JSON sérialisé duRequestBodychamp. C’est la valeur par défaut. -
URL_ENCODED— Le corps de la requête HTTP sera URL-encoded données de formulaire duRequestBodychamp.
-
RequestEncodingOptions-
Détermine l'option de codage à utiliser pour les tableaux du corps de votre requête si vous définissez
RequestBodyEncodingpourURL_ENCODED.Step Functions prend en charge les options de codage de tableau suivantes. Pour plus d'informations sur ces options et leurs exemples, voir Postuler URL-encoding organisme sur demande.
-
INDICES— Encode les tableaux en utilisant la valeur d'index des éléments du tableau. Par défaut, Step Functions utilise cette option de codage. -
REPEAT— Répète une touche pour chaque élément d'un tableau. -
COMMAS— Encode toutes les valeurs d'une clé sous la forme d'une liste de valeurs délimitée par des virgules. -
BRACKETS— Répète une touche pour chaque élément d'un tableau et ajoute un crochet, [], à la touche pour indiquer qu'il s'agit d'un tableau.
-
Les ensembles d'exemples suivants URL-encoding pour les données corporelles de la demande. Il spécifie également d'utiliser le
COMMASoption d'encodage pour les tableaux dans le corps de la requête."Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "COMMAS" } } RequestBody(Facultatif)-
Accepte les données JSON que vous fournissez dans l'entrée d'état. Dans
RequestBody, vous pouvez spécifier une combinaison de JSON statique et JsonPathsyntaxe. Supposons, par exemple, que vous fournissiez l'entrée d'état suivante : { "CardNumber": "1234567890", "ExpiryDate": "09/25" }Pour utiliser ces valeurs de
CardNumberetExpiryDatedans le corps de votre requête au moment de l'exécution, vous pouvez spécifier les données JSON suivantes dans le corps de votre requête."RequestBody": { "Card": { "Number.$": "$.CardNumber", "Expiry.$": "$.ExpiryDate", "Name": "John Doe", "Address": "123 Any Street, Any Town, USA" } }Si l'API HTTPS que vous souhaitez appeler nécessite
form-urlencodedorganismes de demande, vous devez spécifier URL-encoding pour les données corporelles de votre demande. Pour plus d’informations, consultez Postuler URL-encoding organisme sur demande.
Fusion EventBridge données de connexion et de définition de tâches HTTP
Lorsque vous invoquez une tâche HTTP, vous pouvez spécifier des données dans EventBridge connexion et votre définition de tâche HTTP. Ces données incluent Headers, QueryParameters, et RequestBody paramètres. Avant d'appeler une API HTTPS, Step Functions fusionne le corps de la demande avec les paramètres du corps de la 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 tâche HTTP échoue avec States.Runtime erreur.
Si des clés dupliquées sont spécifiées dans la définition de la tâche HTTP et que le EventBridge connexion, Step Functions remplace les valeurs de la tâche HTTP par celles de la connexion.
La liste suivante décrit comment Step Functions fusionne les données avant d'appeler une API HTTPS :
-
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
Headerschamp de la tâche HTTP. En cas de conflit entre les touches 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é lecontent-typeen-tête à la fois dans la définition de la tâche HTTP et EventBridge connexion, Step Functions utilise lecontent-typevaleur 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 du
QueryParameterschamp de la tâche HTTP. 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é lemaxItemsparamètre de requête à la fois dans la définition de la tâche HTTP et EventBridge connexion, Step Functions utilise lemaxItemsvaleur du paramètre de requête spécifiée dans la connexion. -
Paramètres de corps
-
Step Functions ajoute toutes les valeurs de corps de demande spécifiées dans la connexion au corps de demande dans le
RequestBodychamp de la tâche HTTP. 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 requête. Supposons, par exemple, que vous ayez spécifié unModeterrain dans leRequestBodyde la définition de la tâche HTTP et EventBridge connexion. Step Functions utilise leModevaleur de champ que vous avez spécifiée dans la connexion. -
Si vous spécifiez le corps de la requête sous la forme d'une chaîne au lieu d'un objet JSON et que le EventBridge la connexion contient également le corps de la requête, Step Functions impossible de fusionner le corps de requête spécifié à ces deux endroits. Il échoue à exécuter la tâche HTTP avec le
States.Runtimeerreur.
Step Functions applique toutes les transformations et sérialise le corps de la demande une fois la fusion du corps de la demande terminée.
-
L'exemple suivant définit le Headers, QueryParameters, et RequestBody champs à la fois dans la tâche HTTP et EventBridge connexion.
Définition de la tâche 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"} } } } }
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 tâche HTTP et EventBridge connexion. Par conséquent, Step Functions remplace les valeurs de la tâche HTTP par celles de la connexion. L'extrait de code suivant montre la requête HTTP qui Step Functions envoie à l'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"}
Postuler URL-encoding organisme sur demande
Par défaut, Step Functions envoie le corps de la requête sous forme de données JSON à un point de terminaison d'API. Si votre fournisseur d'API HTTPS l'exige form-urlencoded organismes de demande, vous devez spécifier URL-encoding pour les organismes demandeurs. Step Functions puis automatiquement URL-encodes le corps de la demande en fonction du URL-encoding option que vous sélectionnez.
Vous spécifiez URL-encoding à l'aide du Transform champ. Ce champ contient RequestBodyEncoding champ qui indique si vous souhaitez ou non présenter une demande URL-encoding pour les organismes demandeurs. Lorsque vous spécifiez RequestBodyEncoding terrain, Step Functions convertit le corps de votre requête JSON en form-urlencoded corps de la requête avant d'appeler l'API HTTPS. Vous devez également spécifier content-type en-tête en tant que application/x-www-form-urlencoded car les API qui acceptent URL-encoded les données s'attendent à content-type en-tête.
Pour encoder des tableaux dans le corps de votre requête, Step Functions fournit les options de codage de tableau suivantes.
-
INDICES— Répète une touche pour chaque élément d'un tableau et ajoute un crochet, [], à la touche pour indiquer qu'il s'agit d'un tableau. Ces crochets contiennent l’index de l’élément du tableau. L’ajout de l’index vous permet de spécifier l’ordre des éléments du tableau. Par défaut, Step Functions utilise cette option de codage.Par exemple, si le corps de votre requête contient le tableau suivant.
{"array": ["a","b","c","d"]}Step Functions code ce tableau dans la chaîne suivante.
array[0]=a&array[1]=b&array[2]=c&array[3]=d -
REPEAT— Répète une touche 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 Functions code ce tableau dans la chaîne suivante.
array=a&array=b&array=c&array=d -
COMMAS— Encode toutes les valeurs d'une clé sous la forme d'une liste de valeurs délimitée par des virgules.Par exemple, si le corps de votre requête contient le tableau suivant.
{"array": ["a","b","c","d"]}Step Functions code ce tableau dans la chaîne suivante.
array=a,b,c,d -
BRACKETS— Répète une touche pour chaque élément d'un tableau et ajoute un crochet, [], à la touche 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 Functions code ce tableau dans la chaîne suivante.
array[]=a&array[]=b&array[]=c&array[]=d
Autorisations IAM pour exécuter une tâche HTTP
Votre rôle d'exécution State Machine doit disposer des autorisations suivantes pour qu'une tâche HTTP puisse appeler une API HTTPS :
states:InvokeHTTPEndpointevents:RetrieveConnectionCredentialssecretsmanager:GetSecretValuesecretsmanager:DescribeSecret
L'exemple de politique IAM suivant accorde le minimum de privilèges requis à votre rôle de machine d'état pour appeler les API Stripe. Cette politique IAM autorise également le rôle State Machine à accéder à un EventBridge connexion, 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::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/*" } ] }
Important
Vous pouvez définir states:InvokeHTTPEndpoint autorisations d'accès à une machine à états spécifique en spécifiant l'ARN d'une machine à états dans la déclaration de politique Resource champ, mais en élargissant la portée des autorisations à l'aide d'un aws:ResourceTag/${TagKey} la clé de condition n'est pas prise en charge pour le moment.
Exemple de tâche HTTP
La définition de machine à états suivante montre une tâche HTTP qui inclut le Headers, QueryParameters, Transform, et RequestBody paramètres. La tâche HTTP appelle une API Stripe, https://api.stripe.com/v1/invoices, pour générer une facture. La tâche HTTP spécifie également URL-encoding pour le corps de la requête à l'aide du INDICES option d'encodage.
Assurez-vous d'avoir créé un EventBridge connexion. L'exemple suivant montre une connexion créée à l'aide du type d'authentification BASIC.
{
"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: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 } } }
Pour exécuter cette machine à états, entrez l'ID client comme entrée, comme indiqué dans l'exemple suivant :
{
"customer_id": "1234567890"
}
L'exemple suivant montre la requête HTTP qui Step Functions envoie à l'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
Tester une tâche HTTP
Vous pouvez utiliser TestState API via la console, le SDK ou le AWS CLI pour test une tâche HTTP. La procédure suivante décrit comment utiliser TestState API dans Step Functions console. Vous pouvez tester de manière itérative la demande, la réponse et les détails d'authentification de l'API jusqu'à ce que votre tâche HTTP fonctionne comme prévu.
Testez l'état d'une tâche HTTP dans Fonctions de l'étape console
-
Ouvrez le Console Step Functions
. -
Choisissez Créer une machine à états pour commencer à créer une machine à états ou choisir une machine à états existante qui contient une tâche HTTP.
Reportez-vous à l'étape 4 si vous testez la tâche sur une machine d'état existante.
-
Dans le Mode de conception de Workflow Studio, configurez visuellement une tâche HTTP. Ou choisissez le mode Code pour copier-coller la définition de la machine à états depuis votre environnement de développement local.
-
En mode Design, choisissez État du test dans le Panneau d'inspection panneau de Workflow Studio.
-
Dans le État du test boîte de dialogue, procédez comme suit :
-
Pour Rôle d'exécution, choisissez un rôle d'exécution pour tester l'état. Si vous n'avez pas de rôle auprès de autorisations suffisantes pour une tâche HTTP, voir Rôle pour tester les tâches HTTP dans Workflow Studio pour créer un rôle.
-
(Facultatif) Fournissez toute entrée JSON dont l'état sélectionné a besoin pour le test.
-
Pour Niveau d'inspection, conservez la sélection par défaut de INFO. Ce niveau vous indique l'état de l'appel d'API et la sortie d'état. Ceci est utile pour vérifier rapidement la réponse de l'API.
-
Choisissez Commencer le test.
-
Si le test réussit, la sortie d'état apparaît sur le côté droit du État du test boîte de dialogue. Si le test échoue, un message d'erreur apparaît.
Dans le Détails de l'État onglet de la boîte de dialogue, vous pouvez voir la définition de l'état et un lien vers votre EventBridge connexion.
-
Changez le Niveau d'inspection pour TRACE. Ce niveau affiche la requête et la réponse HTTP brutes et est utile pour vérifier les en-têtes, les paramètres de requête et autres API-specific détails.
-
Choisissez le Révélez des case à cocher. En combinaison avec TRACE, ce paramètre vous permet de voir les données sensibles que EventBridge des inserts de connexion, tels que des clés d'API. Le IAM l'identité utilisateur que vous utilisez pour accéder à la console doit être autorisée à effectuer
states:RevealSecretsaction. Sans cette autorisation, Step Functions renvoie une erreur d'accès refusé lorsque vous démarrez le test. Pour un exemple de IAM politique qui définitstates:RevealSecretsautorisation, voir IAM autorisations d'utilisation de l' TestState API.L'image suivante montre un test de réussite d'une tâche HTTP. Le Niveau d'inspection pour cet état est défini sur TRACE. Le Requête et réponse HTTP L'onglet de l'image suivante montre le résultat de l'appel d'API HTTPS.
-
Choisissez Commencer le test.
-
Si le test est réussi, vous pouvez voir vos informations HTTP dans le Requête et réponse HTTP onglet.
-
Réponses aux tâches HTTP non prises en charge
Une tâche HTTP échoue avec 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 de contenu de
application/octet-stream,image/*,video/*, ouaudio/*. -
La réponse ne peut pas être lue comme une chaîne valide. Par exemple, des données binaires ou des données d'image.
Erreurs de connexion
Si EventBridge rencontre un problème lors de la connexion à l'API spécifiée pendant l'exécution du flux de travail, Step Functions génère l'erreur dans votre flux de travail. Les erreurs de connexion sont précédées par Events.ConnectionResource..
Ces erreurs sont notamment les suivantes :
Events.ConnectionResource.InvalidConnectionStateEvents.ConnectionResource.InvalidPrivateConnectionStateEvents.ConnectionResource.AccessDeniedEvents.ConnectionResource.ResourceNotFoundEvents.ConnectionResource.AuthInProgressEvents.ConnectionResource.ConcurrentModificationEvents.ConnectionResource.InternalError