Configurar la invocación asíncrona de la función de Lambda de backend
En la integración de Lambda no de proxy (personalizada), se invoca la función de Lambda de backend, de forma síncrona y de forma predeterminada. Este es el comportamiento deseado para la mayoría de operaciones de API de REST. Algunas aplicaciones, sin embargo, requieren que el trabajo se realice de forma asíncrona (como una operación por lotes o una operación de latencia), normalmente por un componente backend independiente. En este caso, la función de Lambda del backend se invoca de forma asíncrona y el método de la API REST de front-end no devuelve el resultado.
Puede configurar la función de Lambda para una integración de Lambda que no sea proxy para invocarla de forma asíncrona especificando 'Event'
como el tipo de invocación de Lambda. Esto se realiza de la siguiente manera:
Configurar la invocación asíncrona de Lambda en la consola de API Gateway
Para que todas las invocaciones sean asincrónicas:
-
En Solicitud de integración, añada un encabezado
X-Amz-Invocation-Type
con un valor estático de'Event'
.
Para que los clientes decidan si las invocaciones son asincrónicas o sincrónicas:
-
En Solicitud de método, añada un encabezado
InvocationType
. -
En Solicitud de integración, añada un encabezado
X-Amz-Invocation-Type
con una expresión de mapeo demethod.request.header.InvocationType
. -
Los clientes pueden incluir el encabezado
InvocationType: Event
en solicitudes de API para invocaciones asincrónicas oInvocationType: RequestResponse
para invocaciones sincrónicas.
Configurar la invocación asíncrona de Lambda mediante OpenAPI
Para que todas las invocaciones sean asincrónicas:
-
Agregue el encabezado
X-Amz-Invocation-Type
a la sección x-amazon-apigateway-integration."x-amazon-apigateway-integration" : { "type" : "aws", "httpMethod" : "POST", "uri" : "arn:aws:apigateway:
us-east-2
:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2
:123456789012
:function:my-function
/invocations", "responses" : { "default" : { "statusCode" : "200" } }, "requestParameters" : { "integration.request.header.X-Amz-Invocation-Type" : "'Event'" }, "passthroughBehavior" : "when_no_match", "contentHandling" : "CONVERT_TO_TEXT" }
Para que los clientes decidan si las invocaciones son asincrónicas o sincrónicas:
-
Agregue el siguiente encabezado en cualquier objeto Path Item de OpenAPI
. "parameters" : [ { "name" : "InvocationType", "in" : "header", "schema" : { "type" : "string" } } ]
-
Agregue el encabezado
X-Amz-Invocation-Type
a la sección x-amazon-apigateway-integration."x-amazon-apigateway-integration" : { "type" : "aws", "httpMethod" : "POST", "uri" : "arn:aws:apigateway:
us-east-2
:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2
:123456789012
:function:my-function
/invocations", "responses" : { "default" : { "statusCode" : "200" } }, "requestParameters" : { "integration.request.header.X-Amz-Invocation-Type" : "method.request.header.InvocationType" }, "passthroughBehavior" : "when_no_match", "contentHandling" : "CONVERT_TO_TEXT" } -
Los clientes pueden incluir el encabezado
InvocationType: Event
en solicitudes de API para invocaciones asincrónicas oInvocationType: RequestResponse
para invocaciones sincrónicas.
Configuración de la invocación asíncrona de Lambda mediante AWS CloudFormation
Las siguientes plantillas de AWS CloudFormation muestran cómo configurar AWS::ApiGateway::Method
para las invocaciones asíncronas.
Para que todas las invocaciones sean asincrónicas:
AsyncMethodGet: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref AsyncResource HttpMethod: GET ApiKeyRequired: false AuthorizationType: NONE Integration: Type: AWS RequestParameters: integration.request.header.X-Amz-Invocation-Type: "'Event'" IntegrationResponses: - StatusCode: '200' IntegrationHttpMethod: POST Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${
myfunction
.Arn}$/invocations MethodResponses: - StatusCode: '200'
Para que los clientes decidan si las invocaciones son asincrónicas o sincrónicas:
AsyncMethodGet: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref AsyncResource HttpMethod: GET ApiKeyRequired: false AuthorizationType: NONE RequestParameters: method.request.header.InvocationType: false Integration: Type: AWS RequestParameters: integration.request.header.X-Amz-Invocation-Type: method.request.header.InvocationType IntegrationResponses: - StatusCode: '200' IntegrationHttpMethod: POST Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${
myfunction
.Arn}$/invocations MethodResponses: - StatusCode: '200'
Los clientes pueden incluir el encabezado InvocationType: Event
en solicitudes de API para invocaciones asincrónicas o InvocationType:
RequestResponse
para invocaciones sincrónicas.