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.
Configuration d’un appel asynchrone de la fonction Lambda du backend
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-Typeavec 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-Typeavec une expression de mappage demethod.request.header.InvocationType. -
Les clients peuvent inclure l’en-tête
InvocationType: Eventdans les requêtes API pour les appels asynchrones, ouInvocationType: RequestResponsepour 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-Typeen-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-Typeen-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: Eventdans les requêtes API pour les appels asynchrones, ouInvocationType: RequestResponsepour les appels synchrones.
Configurer l'appel asynchrone Lambda à l'aide de CloudFormation
Les 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.