Creación de integraciones de servicio de AWS para las API de HTTP en API Gateway
Puede integrar su API HTTP en los servicios de AWS usando integraciones de primera clase. La integración de primera clase conecta una ruta de API HTTP a una API de servicio de AWS. Cuando un cliente invoca una ruta respaldada por una integración de primera clase, API Gateway invoca una API de servicio de AWS por usted. Por ejemplo, puede utilizar integraciones de primera clase para enviar un mensaje a una cola de Amazon Simple Queue Service o para iniciar una máquina de estado de AWS Step Functions. Para ver las acciones de servicio compatibles, consulte Referencia del subtipo de integración.
Asignar parámetros de solicitud
Las integraciones de primera clase tienen parámetros obligatorios y opcionales. Debe configurar todos los parámetros que son obligatorios para crear una integración. Puede utilizar valores estáticos o parámetros de asignación que se evalúan dinámicamente en el tiempo de ejecución. Para obtener una lista completa de las integraciones y parámetros admitidos, consulte Referencia del subtipo de integración.
En la siguiente tabla, se describen los parámetros de solicitud de asignación admitidos.
Tipo | Ejemplo | Notas |
---|---|---|
Valor del encabezado | $request.header.name |
Los nombres del encabezado no distinguen entre mayúsculas y minúsculas. API Gateway combina varios valores de encabezado con comas, por ejemplo, "header1":
"value1,value2" . |
Valor de la cadena de consulta | $request.querystring.name |
Los nombres de las cadenas de consulta distinguen mayúsculas y minúsculas. API Gateway combina varios valores con comas, por ejemplo, "querystring1":
"Value1,Value2" . |
Parámetro de ruta | $request.path.name |
El valor de un parámetro de ruta en la solicitud. Por ejemplo, si la ruta es /pets/{petId} , puede asignar el parámetro petId de la solicitud con $request.path.petId . |
Solicitar acceso directo del cuerpo | $request.body | API Gateway transfiere todo el cuerpo de la solicitud directamente. |
Cuerpo de la solicitud | $request.body.name |
Una expresión de ruta de acceso JSON$request.body.. ) y las expresiones de filtro (?( ) no son compatibles. notaCuando se especifica una ruta JSON, API Gateway trunca el cuerpo de la solicitud en 100 KB y, a continuación, aplica la expresión de selección. Para enviar cargas de más de 100 KB, especifique |
Variable de contexto | $contexto.variableName |
El valor de una variable de contexto compatible. |
Variable de etapa | $stageVariables.variableName |
El valor de una variable de etapa. |
Valor estático | string |
Un valor constante. |
Crear una integración de primera clase
Antes de crear una integración de primera clase, debe crear un rol de IAM que conceda a API Gateway permisos para invocar la acción de servicio de AWS en la que se está integrando. Para obtener más información, consulte Creación de un rol para un servicio de AWS.
Para crear una integración de primera clase, elija una acción de servicio de AWS admitido, como SQS-SendMessage
, configure los parámetros de la solicitud y proporcione un rol que conceda a API Gateway permisos para invocar la API de servicio de AWS integrada. Dependiendo del subtipo de integración, se requieren diferentes parámetros de solicitud. Para obtener más información, consulte Referencia del subtipo de integración.
El siguiente comando de la AWS CLI crea una integración que envía un mensaje de Amazon SQS.
aws apigatewayv2 create-integration \ --api-id abcdef123 \ --integration-subtype SQS-SendMessage \ --integration-type AWS_PROXY \ --payload-format-version 1.0 \ --credentials-arn arn:aws:iam::123456789012:role/apigateway-sqs \ --request-parameters '{"QueueUrl": "$request.header.queueUrl", "MessageBody": "$request.body.message"}'
Creación de una integración de primera clase con AWS CloudFormation
El siguiente ejemplo muestra un fragmento de AWS CloudFormation que crea una ruta de /{source}/{detailType}
con una integración de primera clase con Amazon EventBridge.
El parámetro Source
se asigna al parámetro de ruta {source}
, el DetailType
se asigna al parámetro de ruta {DetailType}
y el parámetro Detail
se asigna al cuerpo de la solicitud.
El fragmento no muestra el bus de eventos ni el rol de IAM que otorga permisos a API Gateway para invocar la acción PutEvents
.
Route: Type: AWS::ApiGatewayV2::Route Properties: ApiId: !Ref HttpApi AuthorizationType: None RouteKey: 'POST /{source}/{detailType}' Target: !Join - / - - integrations - !Ref Integration Integration: Type: AWS::ApiGatewayV2::Integration Properties: ApiId: !Ref HttpApi IntegrationType: AWS_PROXY IntegrationSubtype: EventBridge-PutEvents CredentialsArn: !GetAtt EventBridgeRole.Arn RequestParameters: Source: $request.path.source DetailType: $request.path.detailType Detail: $request.body EventBusName: !GetAtt EventBus.Arn PayloadFormatVersion: "1.0"