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.
Dans l’intégration autre que de proxy (personnalisée) Lambda, la fonction Lambda du backend est, par défaut, invoquée de façon synchrone. Il s’agit du comportement souhaité pour la plupart des opérations d’API REST. Dans certaines applications, toutefois, les appels doivent avoir lieu de façon asynchrone (sous la forme d’une opération par lots ou d’une opération à latence longue), généralement par un autre composant du backend. Dans ce cas, la fonction Lambda du backend est invoquée de façon asynchrone et la méthode d’API REST frontale ne renvoie aucun résultat.
Vous pouvez également configurer la fonction Lambda pour une intégration Lambda autre que de proxy de sorte qu’elle soit invoquée de façon asynchrone en spécifiant 'Event'
en tant que type d’appel. La procédure à suivre est expliquée ci-après :
Configuration de l’appel asynchrone Lambda dans la console API Gateway
Pour que tous les appels soient asynchrones :
-
Dans Requête d’intégration, ajoutez un en-tête
X-Amz-Invocation-Type
avec une valeur statique de'Event'
.
Pour que les clients décident si les appels sont asynchrones ou synchrones :
-
Dans Requête de méthode, ajoutez un en-tête
InvocationType
. -
Dans Requête d’intégration, ajoutez un en-tête
X-Amz-Invocation-Type
avec une expression de mappage demethod.request.header.InvocationType
. -
Les clients peuvent inclure l’en-tête
InvocationType: Event
dans les requêtes API pour les appels asynchrones, ouInvocationType: RequestResponse
pour les appels synchrones.
Configuration de l’appel asynchrone de Lambda à l’aide d’OpenAPI
Pour que tous les appels soient asynchrones :
-
Ajoutez l'
X-Amz-Invocation-Type
en-tête à la x-amazon-apigateway-integrationsection."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" }
Pour que les clients décident si les appels sont asynchrones ou synchrones :
-
Ajoutez l’en-tête suivant sur tout objet d’élément de chemin OpenAPI
. "parameters" : [ { "name" : "InvocationType", "in" : "header", "schema" : { "type" : "string" } } ]
-
Ajoutez l'
X-Amz-Invocation-Type
en-tête à la x-amazon-apigateway-integrationsection."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" } -
Les clients peuvent inclure l’en-tête
InvocationType: Event
dans les requêtes API pour les appels asynchrones, ouInvocationType: RequestResponse
pour les appels synchrones.
Configurer l'appel asynchrone Lambda à l'aide de AWS CloudFormation
Les AWS CloudFormation modèles suivants montrent comment configurer les AWS::ApiGateway::Method
appels asynchrones.
Pour que tous les appels soient asynchrones :
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'
Pour que les clients décident si les appels sont asynchrones ou synchrones :
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'
Les clients peuvent inclure l’en-tête InvocationType: Event
dans les requêtes API pour les appels asynchrones, ou InvocationType:
RequestResponse
pour les appels synchrones.