Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Llama a terceros APIs en los flujos de trabajo de Step Functions
Una HTTP tarea es un tipo de Estado del flujo de trabajo de tareas estado que te permite llamar a cualquier tercero públicoAPI, como Salesforce y Stripe, en tus flujos de trabajo. Para llamar a un terceroAPI, usa el estado Tarea junto con el arn:aws:states:::http:invoke
recurso. A continuación, proporcione los detalles de configuración del API punto final APIURL, como el método que desee utilizar y los detalles de autenticación.
Si usa Workflow Studio para crear una máquina de estados que contenga una HTTP tarea, Workflow Studio generará automáticamente un rol de ejecución con IAM políticas para la HTTP tarea. Para obtener más información, consulte Función para probar las HTTP tareas en Workflow Studio.
Temas
- HTTPDefinición de tarea
- HTTPCampos de tareas
- Autenticación para una tarea HTTP
- Combinación de datos de EventBridge conexión y definición de HTTP tareas
- Aplicar URL -coding en el cuerpo de la solicitud
- IAMpermisos para ejecutar una tarea HTTP
- HTTPEjemplo de tarea
- Probar una HTTP tarea
- Respuestas de tareas no compatibles HTTP
HTTPDefinición de tarea
La ASLdefinición representa una HTTP tarea con http:invoke
recursos. La siguiente definición de HTTP tarea invoca un Stripe API que devuelve una lista de todos los clientes.
"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
}
HTTPCampos de tareas
Una HTTP tarea incluye los siguientes campos en su definición.
Resource
(Obligatorio)-
Para especificar un tipo de tarea, ARN indíquelo en el
Resource
campo. Para una HTTP tarea, especifique elResource
campo de la siguiente manera."Resource": "arn:aws:states:::http:invoke"
Parameters
(Obligatorio)-
Contiene los
ConnectionArn
camposApiEndpoint
Method
, y que proporcionan información sobre el tercero al API que desea llamar.Parameters
también contiene campos opcionales, comoHeaders
yQueryParameters
.Puede especificar una combinación de estática JSON y JsonPath
sintaxis como Parameters
en elParameters
campo. Para obtener más información, consulte Pasar parámetros a un servicio API en Step Functions.ApiEndpoint
(Obligatorio)-
Especifica URL el tercero al API que desea llamar. Para añadir parámetros de consulta alURL, utilice el campo.
QueryParameters
El siguiente ejemplo muestra cómo puedes llamar a un Stripe API para obtener la lista de todos los clientes."ApiEndpoint":"https://api.stripe.com/v1/customers"
También puedes especificar una ruta de referencia mediante la JsonPath
sintaxis para seleccionar el JSON nodo que contiene al tercero APIURL. Por ejemplo, supongamos que quieres llamar a uno de los centros de Stripe APIs con un identificador de cliente específico. Supongamos que ha proporcionado la siguiente entrada de estado. { "customer_id": "1234567890", "name": "John Doe" }
Para recuperar los detalles de este identificador de cliente mediante un StripeAPI, especifique los datos tal y
ApiEndpoint
como se muestra en el siguiente ejemplo. En este ejemplo se utiliza una función intrínseca y una ruta de referencia."ApiEndpoint.$":"States.Format('https://api.stripe.com/v1/customers/{}', $.customer_id)"
En tiempo de ejecución, Step Functions resuelve el valor de
ApiEndpoint
de la siguiente manera.https://api.stripe.com/v1/customers/
1234567890
Method
(Obligatorio)-
Especifica el HTTP método que quieres usar para llamar a un terceroAPI. Puede especificar uno de estos métodos en la HTTP tarea:GET,POST, PUTDELETE,PATCH,OPTIONS, oHEAD.
Por ejemplo, para usar el GET método, especifique el
Method
campo de la siguiente manera."Method": "GET"
También puede usar una ruta de referencia para especificar el método en tiempo de ejecución. Por ejemplo,
"Method.$": "$.myHTTPMethod"
. Authentication
(Obligatorio)-
Contiene el
ConnectionArn
campo que especifica cómo autenticar una API llamada de terceros. Step Functionsadmite la autenticación de una persona especificadaApiEndpoint
mediante el recurso de conexión deAmazon EventBridge.ConnectionArn
(Obligatorio)-
Especifica la EventBridge conexiónARN.
Una HTTP tarea requiere una EventBridge conexión, que gestione de forma segura las credenciales de autenticación de un API proveedor. Una conexión especifica el tipo de autorización y las credenciales que se van a utilizar para autorizar a un terceroAPI. El uso de una conexión le ayuda a evitar codificar secretos, como API las claves, en la definición de la máquina de estados. En una conexión, también puede especificar los parámetros
Headers
,QueryParameters
yRequestBody
.Al crear una EventBridge conexión, debe proporcionar sus detalles de autenticación. Para obtener más información sobre cómo funciona la autenticación de una HTTP tarea, consulteAutenticación para una tarea HTTP.
El siguiente ejemplo muestra cómo se puede especificar el
Authentication
campo en la definición de la HTTP tarea."Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:
123456789012
:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" } Headers
(opcional)-
Proporciona contexto y metadatos adicionales al API punto final. Puede especificar los encabezados en forma de cadena o JSON matriz.
Puede especificar los encabezados en la EventBridge conexión y en el
Headers
campo de una HTTP tarea. Le recomendamos que no incluya los detalles de autenticación de sus API proveedores en elHeaders
campo. Le recomendamos que incluya estos detalles en su conexión de EventBridge.Step Functionsagrega los encabezados que especifique en la EventBridge conexión a los encabezados que especifique en la definición de la HTTP tarea. Si la definición y la conexión contienen las mismas claves de encabezado, Step Functions utiliza los valores correspondientes especificados en la conexión de EventBridge para esos encabezados. Para obtener más información sobre cómo Step Functions realiza combinación de datos, consulte Combinación de datos de EventBridge conexión y definición de HTTP tareas.
El siguiente ejemplo especifica un encabezado que se incluirá en una API llamada de terceros:.
content-type
"Headers": { "content-type": "application/json" }
También puede utilizar una ruta de referencia para especificar los encabezados en tiempo de ejecución. Por ejemplo,
"Headers.$": "$.myHTTPHeaders"
.Step Functionsestablece los
Host
encabezadosUser-Agent
Range
, y. Step Functionsestablece el valor delHost
encabezado en función de la API que esté llamando. A continuación se muestra un ejemplo de estos encabezados.User-Agent: Amazon|StepFunctions|HttpInvoke|
us-east-1
, Range: bytes=0-262144, Host: api.stripe.comNo puedes usar los siguientes encabezados en la definición de la HTTP tarea. Si usa estos encabezados, la HTTP tarea falla y muestra el
States.Runtime
error.-
A-IM
-
Accept-Charset
-
Accept-Datetime
-
Accept-Encoding
-
Cache-Control
-
Connection
-
Content-Encoding
-
Contenido: MD5
-
Date
-
Expect
-
Forwarded
-
De
-
Host
-
HTTP2-Ajustes
-
If-Match
-
If-Modified-Since
-
If-None-Match
-
If-Range
-
If-Unmodified-Since
-
Max-Forwards
-
Origen
-
Pragma
-
Proxy-Authorization
-
Referer
-
Server
-
TE
-
Trailer
-
Transfer-Encoding
-
Upgrade
-
Via
-
Advertencia
-
x-forwarded-*
-
x-amz-*
-
x-amzn-*
-
QueryParameters
(opcional)-
Inserta pares clave-valor al final de un. API URL Puede especificar los parámetros de la consulta como una cadena, una JSON matriz o un JSON objeto. Step FunctionsURLcodifica automáticamente los parámetros de consulta cuando llama a un tercero. API
Por ejemplo, supongamos que quiere llamar a Stripe API para buscar clientes que realicen sus transacciones en dólares estadounidenses ()USD. Supongamos que ha proporcionado los siguientes
QueryParameters
como entrada de estado."QueryParameters": { "currency": "usd" }
En tiempo de ejecución, Step Functions añade la siguiente
QueryParameters
a la API URL siguiente.https://api.stripe.com/v1/customers/search?currency=usd
También puede usar una ruta de referencia para especificar los parámetros de consulta en tiempo de ejecución. Por ejemplo,
"QueryParameters.$": "$.myQueryParameters"
.Si ha especificado los parámetros de consulta en su EventBridge conexión, los Step Functions agrega a los parámetros de consulta que especifique en la definición de la HTTP tarea. Si la definición y la conexión contienen los mismos parámetros de consulta, Step Functions utiliza los valores correspondientes especificados en la conexión de EventBridge para esos encabezados. Para obtener más información sobre cómo Step Functions realiza combinación de datos, consulte Combinación de datos de EventBridge conexión y definición de HTTP tareas.
Transform
(opcional)-
Contiene los campos
RequestBodyEncoding
yRequestEncodingOptions
. De forma predeterminada, Step Functions envía el cuerpo de la solicitud como JSON datos a un API punto final.Si su API proveedor acepta los cuerpos de las
form-urlencoded
solicitudes, utilice elTransform
campo para especificar la codificación «URL-coding» para los cuerpos de las solicitudes. También debe especificar elcontent-type
encabezado comoapplication/x-www-form-urlencoded
. Step Functionsluego URL codifica automáticamente el cuerpo de la solicitud.RequestBodyEncoding
-
Especifica la URL codificación -del cuerpo de la solicitud. Puede especificar los valores siguientes:
NONE
oURL_ENCODED
.-
NONE
— El cuerpo de la HTTP solicitud será el serializado JSON delRequestBody
campo. Este es el valor predeterminado. -
URL_ENCODED
— El cuerpo de la HTTP solicitud serán los datos del formulario URL codificados delRequestBody
campo.
-
RequestEncodingOptions
-
Determina la opción de codificación que se utilizará para las matrices en el cuerpo de la solicitud si establece
RequestBodyEncoding
comoURL_ENCODED
.Step Functions admite las siguientes opciones de codificación de matrices. Para obtener más información sobre estas opciones y ejemplos, consulte Aplicar URL -coding en el cuerpo de la solicitud.
-
INDICES
: codifica matrices utilizando el valor de índice de los elementos de la matriz. De forma predeterminada, Step Functions utiliza esta opción de codificación. -
REPEAT
: repite una clave para cada elemento de una matriz. -
COMMAS
: codifica todos los valores de una clave como una lista de valores delimitada por comas. -
BRACKETS
: repite una clave para cada elemento de una matriz y añade un corchete, [], a la clave para indicar que se trata de una matriz.
-
El siguiente ejemplo establece la URL codificación -para los datos del cuerpo de la solicitud. También especifica el uso de la opción de codificación
COMMAS
para matrices en el cuerpo de la solicitud."Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "COMMAS" } }
RequestBody
(opcional)-
Acepta JSON los datos que se proporcionan en la entrada de estado. En
RequestBody
, puede especificar una combinación de estática JSON y JsonPathsintaxis. Por ejemplo, supongamos que proporciona la siguiente entrada de estado: { "CardNumber": "1234567890", "ExpiryDate": "09/25" }
Para utilizar estos valores de
CardNumber
yExpiryDate
en el cuerpo de la solicitud en tiempo de ejecución, puede especificar los siguientes JSON datos en el cuerpo de la solicitud."RequestBody": { "Card": { "Number.$": "$.CardNumber", "Expiry.$": "$.ExpiryDate", "Name": "John Doe", "Address": "123 Any Street, Any Town, USA" } }
Si el tercero al API que quieres llamar requiere cuerpos de
form-urlencoded
solicitud, debes especificar URL -encoding para los datos del cuerpo de la solicitud. Para obtener más información, consulte Aplicar URL -coding en el cuerpo de la solicitud.
Autenticación para una tarea HTTP
Una HTTP tarea requiere una EventBridge conexión que gestione de forma segura las credenciales de autenticación de un API proveedor. Una conexión especifica el tipo de autorización y las credenciales que se van a utilizar para autorizar a un terceroAPI. El uso de una conexión le ayuda a evitar codificar secretos, como API las claves, en la definición de la máquina de estados. Una EventBridge conexión admite los esquemas de autorización Basic y API Key. OAuth
Al crear una EventBridge conexión, proporciona sus detalles de autenticación. También puede incluir el encabezado, el cuerpo y los parámetros de consulta necesarios para la autorización con unAPI. Debe incluir la conexión ARN en cualquier HTTP tarea que llame a un terceroAPI.
Al crear una conexión y añadir parámetros de autorización, EventBridge crea una entrada secreta AWS Secrets Manager. En este secreto, EventBridge almacena los parámetros de conexión y autorización de forma cifrada. Para crear o actualizar correctamente una conexión, debe usar una persona Cuenta de AWS que tenga permiso para usar Secrets Manager. Para obtener más información sobre los IAM permisos que su máquina estatal necesita para acceder a una EventBridge conexión, consulteIAMpermisos para ejecutar una tarea HTTP.
La siguiente imagen muestra cómo Step Functions gestiona la autenticación de las API llamadas de terceros mediante una EventBridge conexión. La EventBridge conexión que administra las credenciales de un API proveedor externo. EventBridgecrea un código secreto Secrets Manager para almacenar los parámetros de conexión y autorización de forma cifrada.
![Diagrama que muestra cómo Step Functions utiliza EventBridge las conexiones para las llamadas a los HTTP puntos finales.](images/http-task-how-auth-works.png)
Combinación de datos de EventBridge conexión y definición de HTTP tareas
Al invocar una HTTP tarea, puede especificar los datos de la EventBridge conexión y de la definición de la HTTP tarea. Estos datos incluyen parámetros Headers
, QueryParameters
y RequestBody
. Antes de llamar a un terceroAPI, Step Functions fusiona el cuerpo de la solicitud con los parámetros del cuerpo de la conexión en todos los casos, excepto si el cuerpo de la solicitud es una cadena y los parámetros del cuerpo de la conexión no están vacíos. En este caso, la HTTP tarea falla y se produce el States.Runtime
error.
Si hay claves duplicadas especificadas en la definición de la HTTP tarea y en la EventBridge conexión, Step Functions sobrescribe los valores de la HTTP tarea con los valores de la conexión.
La siguiente lista describe cómo Step Functions combina los datos antes de llamar a un tercero: API
-
Encabezados: Step Functions agrega los encabezados que haya especificado en la conexión a los encabezados del
Headers
campo de la tarea. HTTP Si hay un conflicto entre las claves de los encabezados, Step Functions utiliza los valores especificados en la conexión para esos encabezados. Por ejemplo, si especificó elcontent-type
encabezado tanto en la definición de la HTTP tarea como en la EventBridge conexión, Step Functions utiliza el valor delcontent-type
encabezado especificado en la conexión. -
Parámetros de consulta: Step Functions agrega cualquier parámetro de consulta que haya especificado en la conexión a los parámetros de consulta en el
QueryParameters
campo de la HTTP tarea. Si hay un conflicto entre las claves de los parámetros de consulta, Step Functions utiliza los valores especificados en la conexión para esos encabezados de consulta. Por ejemplo, si especificó el parámetro demaxItems
consulta tanto en la definición de la HTTP tarea como en la EventBridge conexión, Step Functions utiliza el valor del parámetro demaxItems
consulta especificado en la conexión. -
Body parameters (Parámetros del cuerpo)
-
Step Functionsagrega cualquier valor del cuerpo de la solicitud especificado en la conexión al cuerpo de la solicitud en el
RequestBody
campo de la HTTP tarea. Si hay un conflicto entre las claves de los encabezados de la solicitud, Step Functions utiliza los valores especificados en la conexión para esos encabezados. Por ejemplo, supongamos que especificó unMode
campo tanto en la definiciónRequestBody
de la HTTP tarea como en la EventBridge conexión. Step Functionsusa el valor deMode
campo que especificó en la conexión. -
Si especificas el cuerpo de la solicitud como una cadena en lugar de un JSON objeto y la EventBridge conexión también contiene el cuerpo de la solicitud, no Step Functions podrás combinar el cuerpo de la solicitud especificado en estos dos lugares. Falla la HTTP tarea con el
States.Runtime
error.
Step Functions aplica todas las transformaciones y serializa el cuerpo de la solicitud después de completar la combinación del cuerpo de la solicitud.
-
El siguiente ejemplo establece los RequestBody
campos y Headers
QueryParameters
, tanto en la HTTP tarea como en la EventBridge conexión.
HTTPDefinición de tarea
{ "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"
} } } } }
Conexión de 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"
} ] } } }
En este ejemplo, las claves duplicadas se especifican en la HTTP tarea y la EventBridge conexión. Por lo tanto, Step Functions sobrescribe los valores de la HTTP tarea con los valores de la conexión. En el siguiente fragmento de código se muestra la HTTP solicitud que se Step Functions envía al tercero. 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"}
Aplicar URL -coding en el cuerpo de la solicitud
De forma predeterminada, Step Functions envía el cuerpo de la solicitud como JSON datos a un API punto final. Si su API proveedor externo requiere cuerpos de form-urlencoded
solicitud, debe especificar URL -coding para los cuerpos de solicitud. Step Functionsa continuación, URL codifica automáticamente el cuerpo de la solicitud en función de la opción de URL codificación que seleccione.
La URL codificación se especifica mediante el campo. Transform
Este campo contiene el RequestBodyEncoding
campo que especifica si desea aplicar o no la URL codificación -coding a los cuerpos de las solicitudes. Al especificar el RequestBodyEncoding
campo, Step Functions convierte el cuerpo de la JSON solicitud en el cuerpo de la form-urlencoded
solicitud antes de llamar al terceroAPI. También debes especificar el content-type
encabezado como tal application/x-www-form-urlencoded
porque los APIs que aceptan datos URL codificados excepto el content-type
encabezado.
Para codificar matrices en el cuerpo de la solicitud, Step Functions proporciona las siguientes opciones de codificación de matrices.
-
INDICES
: repite una clave para cada elemento de una matriz y añade un corchete, [], a la clave para indicar que se trata de una matriz. Este paréntesis contiene el índice del elemento de la matriz. Añadir el índice ayuda a especificar el orden de los elementos de la matriz. De forma predeterminada, Step Functions utiliza esta opción de codificación.Por ejemplo, si el cuerpo de la solicitud contiene la siguiente matriz.
{"array": ["a","b","c","d"]}
Step Functions codifica esta matriz en la siguiente cadena.
array[0]=a&array[1]=b&array[2]=c&array[3]=d
-
REPEAT
: repite una clave para cada elemento de una matriz.Por ejemplo, si el cuerpo de la solicitud contiene la siguiente matriz.
{"array": ["a","b","c","d"]}
Step Functions codifica esta matriz en la siguiente cadena.
array=a&array=b&array=c&array=d
-
COMMAS
: codifica todos los valores de una clave como una lista de valores delimitada por comas.Por ejemplo, si el cuerpo de la solicitud contiene la siguiente matriz.
{"array": ["a","b","c","d"]}
Step Functions codifica esta matriz en la siguiente cadena.
array=a,b,c,d
-
BRACKETS
: repite una clave para cada elemento de una matriz y añade un corchete, [], a la clave para indicar que se trata de una matriz.Por ejemplo, si el cuerpo de la solicitud contiene la siguiente matriz.
{"array": ["a","b","c","d"]}
Step Functions codifica esta matriz en la siguiente cadena.
array[]=a&array[]=b&array[]=c&array[]=d
IAMpermisos para ejecutar una tarea HTTP
Su función de ejecución de la máquina estatal debe tener los secretsmanager:DescribeSecret
permisos states:InvokeHTTPEndpoint
events:RetrieveConnectionCredentials
secretsmanager:GetSecretValue
,, y para que una HTTP tarea pueda llamar a un terceroAPI. El siguiente ejemplo IAM de política otorga los privilegios mínimos necesarios a tu rol de máquina estatal para llamar a StripeAPIs. Esta IAM política también otorga permiso al rol de máquina de estado para acceder a una EventBridge conexión específica, incluido el secreto de esta conexión que está almacenado en 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/*" } ] }
HTTPEjemplo de tarea
La siguiente definición de máquina de estados muestra una HTTP tarea que incluye los RequestBody
parámetros Headers
QueryParameters
Transform
,, y. La HTTP tarea llama a StripeAPI, https://api.stripe.com/v1/ las facturas, para generar una factura. La HTTP tarea también especifica la URL codificación -para el cuerpo de la solicitud mediante la opción de INDICES
codificación.
Asegúrese de que ha creado una conexión de EventBridge. El siguiente ejemplo muestra una conexión creada con un tipo de BASIC autenticación.
{
"Type": "BASIC",
"AuthParameters": {
"BasicAuthParameters": {
"Password": "myPassword",
"Username": "myUsername"
},
}
}
Recuerde reemplazar el italicized
texto con la información específica del recurso.
{ "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 } } }
Para ejecutar esta máquina de estado, proporcione el ID del cliente como entrada, tal como se muestra en el ejemplo siguiente:
{
"customer_id": "1234567890"
}
El siguiente ejemplo muestra la HTTP solicitud que se Step Functions envía a Stripe. API
POST /v1/invoices HTTP/1.1
Authorization: Basic <base64 of username and password>
Content-Type: application/x-www-form-urlencoded
Host: api.stripe.com
Range: bytes=0-262144
Transfer-Encoding: chunked
User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1
description=Monthly%20subscription&metadata%5Border_details%5D=monthly%20report%20data&customer=1234567890
Probar una HTTP tarea
Puede usarlo TestStateAPIa través de la consola o AWS CLI para probar una HTTP tarea. SDK El siguiente procedimiento describe cómo utilizar el TestState API en la Step Functions consola. Puede probar de forma iterativa la API solicitud, la respuesta y los detalles de autenticación hasta que la HTTP tarea funcione según lo esperado.
Pruebe el estado de una HTTP tarea en la consola Step Functions
-
Abra la consola de Step Functions
. -
Seleccione Crear máquina de estados para empezar a crear una máquina de estados o elija una máquina de estados existente que contenga una HTTP tarea.
Consulte el paso 4 si está probando la tarea en una máquina de estado existente.
-
En Workflow Studio, configure una HTTP tarea de forma visual. Modo Diseño O elija el modo Código para copiar y pegar la definición de la máquina de estado desde su entorno de desarrollo local.
-
En modo Diseño, elija Probar estado en el panel de Panel de inspectores de Workflow Studio.
-
En el cuadro de diálogo Probar estado, haga lo siguiente:
-
En Rol de ejecución, elija un rol de ejecución para probar el estado. Si no tiene un rol con permisos suficientes para una HTTP tarea, consulte Función para probar las HTTP tareas en Workflow Studio para crear un rol.
-
(Opcional) Proporcione JSON cualquier dato que el estado seleccionado necesite para la prueba.
-
Para el nivel de inspección, mantenga la selección predeterminada de INFO. Este nivel muestra el estado de la API llamada y el estado de salida. Esto es útil para comprobar rápidamente la API respuesta.
-
Seleccione Iniciar prueba.
-
Si la prueba se realiza correctamente, el resultado del estado aparece en el lado derecho del cuadro de diálogo Probar estado. Si la prueba no se realiza correctamente, aparece un error.
En la pestaña Detalles del estado del cuadro de diálogo puede ver la definición del estado y un enlace a la conexión de EventBridge.
-
Cambie el nivel de inspección a TRACE. Este nivel muestra la HTTP solicitud y la respuesta sin procesar, y es útil para verificar los encabezados, los parámetros de consulta y otros detalles API específicos.
-
Seleccione la casilla Revelar secretos. En combinación con TRACE, esta configuración le permite ver los datos confidenciales que inserta la EventBridge conexión, como las claves. API La identidad del usuario de IAM que utilice para acceder a la consola debe tener permiso para realizar la acción
states:RevealSecrets
. Sin este permiso, Step Functions produce un error de acceso denegado al iniciar la prueba. Para ver una política de IAM de ejemplo que establece el permisostates:RevealSecrets
, consulte IAMpermisos de uso TestState API.La siguiente imagen muestra una prueba de una HTTP tarea que se ha realizado correctamente. El nivel de inspección de este estado está establecido en. TRACE La pestaña de HTTPsolicitud y respuesta de la siguiente imagen muestra el resultado de la API llamada de un tercero.
-
Seleccione Iniciar prueba.
-
Si la prueba se realiza correctamente, puedes ver tus HTTP detalles en la pestaña de HTTPsolicitud y respuesta.
-
Respuestas de tareas no compatibles HTTP
Se produce un States.Runtime
error en una HTTP tarea si se cumple una de las siguientes condiciones para la respuesta devuelta:
-
La respuesta contiene un encabezado de tipo de contenido de
application/octet-stream
,image/*
,video/*
oaudio/*
. -
La respuesta no se puede leer como una cadena válida. Por ejemplo, datos binarios o de imagen.