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.
Llamar a API Gateway con Step Functions
Step Functions puede controlar ciertos AWS servicios directamente desde Lenguaje de estados de Amazon (ASL). Para obtener más información, consulte Trabajo con otros servicios y Cómo pasar parámetros a una API de servicio.
En qué se diferencia la integración optimizada de API Gateway de la integración del AWS SDK de API Gateway
-
apigateway:invoke:
no tiene equivalente en la integración del servicio del AWS SDK. En su lugar, el servicio optimizado de API Gateway llama directamente a su punto de conexión de API Gateway.
Puede usar Amazon API Gateway para crear, publicar, mantener y supervisar API de REST y HTTP. Para la integración con API Gateway, se debe definir un estado Task
en Step Functions que llame directamente a un punto de conexión HTTP o REST de API Gateway, sin necesidad de escribir código ni depender de otra infraestructura. Una definición de estado Task
incluye toda la información necesaria para la llamada a la API. También puede seleccionar distintos métodos de autorización.
Compatibilidad con características de API Gateway
La integración de API Gateway de Step Functions admite algunas características de API Gateway, pero no todas. Para obtener una lista más detallada de las características compatibles, consulte lo siguiente.
-
Compatible con las integraciones de la API de REST y HTTP de API Gateway de Step Functions:
-
Autorizadores: IAM (con Signature Version 4), sin autenticación, autorizadores Lambda (basados en parámetros de solicitud y basados en tokens con encabezado personalizado)
-
Tipos de API: regionales
-
Administración de API: nombres de dominio de API Gateway, etapa de API, ruta, parámetros de consulta, cuerpo de la solicitud
-
-
Compatible con la integración de la API de HTTP de API Gateway de Step Functions. No se admite la integración de la API de REST de API Gateway de Step Functions que ofrece la opción de API optimizadas para Edge.
-
No compatible con la integración de la API Gateway de Step Functions:
-
Autorizadores: Amazon Cognito, Open ID Connect/OAuth 2.0 nativo, encabezado de autorización para autorizadores Lambda basados en tokens
-
Tipos de API: privadas
-
Administración de API: nombres de dominio personalizados
-
Para obtener más información acerca de API Gateway y sus API de REST y HTTP, consulte lo siguiente.
-
La página Conceptos de Amazon API Gateway.
-
Elección entre las API de HTTP y las API de REST en la Guía para desarrolladores de API Gateway.
Formato de solicitudes
Al crear la definición de estado Task
, Step Functions valida los parámetros, genera la URL necesaria para realizar la llamada y, posteriormente, llama a la API. La respuesta incluye el código de estado HTTP, los encabezados y el cuerpo de respuesta. El formato de solicitud tiene parámetros obligatorios y opcionales.
Parámetros de solicitud obligatorios
-
ApiEndpoint
-
Tipo:
String
-
El nombre de host de una URL de API Gateway. El formato es
.<API ID>
.execute-api.<region>
.amazonaws.comEl ID de API solo puede contener una combinación de los siguientes caracteres alfanuméricos:
0123456789abcdefghijklmnopqrstuvwxyz
-
-
Method
-
Tipo:
Enum
-
El método HTTP, que debe ser uno de los siguientes:
-
GET
-
POST
-
PUT
-
DELETE
-
PATCH
-
HEAD
-
OPTIONS
-
-
Parámetros de solicitudes opcionales
-
Headers
-
Tipo:
JSON
-
Los encabezados HTTP permiten una lista de valores asociados a la misma clave.
-
-
Stage
-
Tipo:
String
-
El nombre de la fase en la que se implementa la API en API Gateway. Es opcional para cualquier API de HTTP que utilice la fase
$default
.
-
-
Path
-
Tipo:
String
-
Parámetros de ruta que se anexan después del punto de conexión de la API.
-
-
QueryParameters
-
Tipo:
JSON
-
Las cadenas de consulta solo permiten una lista de valores asociados a la misma clave.
-
-
RequestBody
-
Tipo:
JSON
oString
-
El cuerpo de la solicitud HTTP Su tipo puede ser un objeto
JSON
oString
.RequestBody
solo es compatible con los métodos HTTPPATCH
,POST
yPUT
.
-
-
AllowNullValues
-
Tipo:
BOOLEAN
— valor predeterminado:false
-
Con la configuración predeterminada, los valores nulos que se encuentren en el estado de entrada de la solicitud no se enviarán a tu API. En el siguiente ejemplo, el
category
campo no se incluirá en la solicitud, a menos queAllowNullValues
esté configuradotrue
en la definición de la máquina de estados.{ "NewPet": { "type": "turtle", "price": 123, "category": null } }
nota
De forma predeterminada, los campos con valores nulos en el estado de entrada de la solicitud no se enviarán a tu API. Puedes forzar el envío de valores nulos a tu API
AllowNullValues
configurándolostrue
en tu definición de máquina de estados.
-
-
AuthType
-
Tipo:
JSON
-
El método de autenticación. El método predeterminado es
NO_AUTH
. Los valores permitidos son:-
NO_AUTH
-
IAM_ROLE
-
RESOURCE_POLICY
Para obtener más información, consulte Autenticación y autorización.
-
-
nota
Por motivos de seguridad, actualmente no se permiten las siguientes claves de encabezado HTTP:
-
Cualquiera que tenga el prefijo
X-Forwarded
,X-Amz
oX-Amzn
. -
Authorization
-
Connection
-
Content-md5
-
Expect
-
Host
-
Max-Forwards
-
Proxy-Authenticate
-
Server
-
TE
-
Transfer-Encoding
-
Trailer
-
Upgrade
-
Via
-
Www-Authenticate
En el siguiente ejemplo de código se muestra cómo invocar API Gateway mediante Step Functions.
{ "Type": "Task", "Resource":"arn:aws:states:::apigateway:invoke", "Parameters": { "ApiEndpoint": "example.execute-api.us-east-1.amazonaws.com", "Method": "GET", "Headers": { "key": ["value1", "value2"] }, "Stage": "prod", "Path": "bills", "QueryParameters": { "billId": ["123456"] }, "RequestBody": {}, "AuthType": "NO_AUTH" } }
Autenticación y autorización
Puede usar los siguientes métodos de autenticación:
-
Sin autorización: llama a la API directamente sin ningún método de autorización.
-
Rol de IAM: con este método, Step Functions asume el rol de la máquina de estado, firma la solicitud con Signature Version 4 (SiGv4) y, posteriormente, llama a la API.
-
Política de recursos: Step Functions autentica la solicitud y luego llama a la API. Debe adjuntar una política de recursos a la API que especifique lo siguiente:
-
La máquina de estado que invocará API Gateway.
importante
Debe especificar su máquina de estado para limitar el acceso a ella. Si no lo hace, se concederá acceso a cualquier máquina de estado que autentique su solicitud de API Gateway con la autenticación de la política de recursos en su API.
-
Esa Step Functions es el servicio que llama a API Gateway:
"Service": "states.amazonaws.com"
. -
El recurso al que desea obtener acceso, que incluye:
-
La
region
. -
El
account-id
en la región especificada. -
El
api-id
. -
El
stage-name
. -
El
HTTP-VERB
(método). -
El
resource-path-specifier
.
-
Para ver una política de recursos de ejemplo, consulte las Políticas de IAM para Step Functions y API Gateway.
Para obtener más información acerca del formato de recursos, consulte Formato de Resource de permisos para ejecutar la API en API Gateway en la Guía para desarrolladores de API Gateway.
nota
Las políticas de recursos solo se admiten en la API de REST.
-
Patrones de integración de servicios
La integración de API Gateway admite dos patrones de integración de servicios:
-
Respuesta de la solicitud, que es el patrón de integración predeterminado. Permite que Step Functions avance al siguiente paso justo después de recibir una respuesta HTTP.
-
Cómo esperar una devolución de llamada con el token de tarea (
.waitForTaskToken
), que espera a que se devuelva un token de tarea con una carga. Para usar el.waitForTaskToken
patrón, añade .wait ForTaskToken al final del campo Recurso de la definición de tu tarea, tal y como se muestra en el siguiente ejemplo:{ "Type": "Task", "Resource":"arn:aws:states:::apigateway:invoke.waitForTaskToken", "Parameters": { "ApiEndpoint": "example.execute-api.us-east-1.amazonaws.com", "Method": "POST", "Headers": { "TaskToken.$": "States.Array($$.Task.Token)" }, "Stage": "prod", "Path": "bills/add", "QueryParameters": {}, "RequestBody": { "billId": "my-new-bill" }, "AuthType": "IAM_ROLE" } }
Formato de salida
Debe proporcionar los siguientes parámetros de salida:
Nombre | Tipo | Descripción |
---|---|---|
ResponseBody |
JSON o String |
Cuerpo de la respuesta de la llamada a la API. |
Headers |
JSON |
Encabezados de respuesta. |
StatusCode |
Integer |
Código de estado HTTP de la respuesta. |
StatusText |
String |
Texto de estado de la respuesta. |
Respuesta de ejemplo:
{ "ResponseBody": { "myBills": [] }, "Headers": { "key": ["value1", "value2"] }, "StatusCode": 200, "StatusText": "OK" }
Control de errores
Cuando se produce un error, se devuelve error
y cause
de la siguiente manera:
-
Si el código de estado HTTP está disponible, el error se devolverá en el formato
ApiGateway.
.<HTTP Status Code>
-
Si el código de estado HTTP no está disponible, el error se devolverá en el formato
ApiGateway.
.<Exception>
En ambos casos, cause
se devuelve como una cadena.
En el siguiente ejemplo se muestra una respuesta en la que se ha producido un error:
{ "error": "ApiGateway.403", "cause": "{\"message\":\"Missing Authentication Token\"}" }
nota
Un código de estado de 2XX
indica que se ha realizado correctamente y no se devolverá ningún error. El resto de códigos de estado o excepciones emitidas generarán un error.
Para obtener más información, consulte:
-
Conceptos de Amazon API Gateway en la guía para desarrolladores de API Gateway.
-
Un proyecto de muestra que ilustra cómo Hacer una llamada a API Gateway
Conceptos de Amazon API Gateway en la guía para desarrolladores de API Gateway.