View a markdown version of this page

Siapkan pemanggilan asinkron dari fungsi Lambda backend - Amazon API Gateway

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Siapkan pemanggilan asinkron dari fungsi Lambda backend

Dalam integrasi Lambda non-proxy (kustom), fungsi Lambda backend dipanggil secara sinkron secara default. Ini adalah perilaku yang diinginkan untuk sebagian besar operasi REST API. Beberapa aplikasi, bagaimanapun, memerlukan pekerjaan untuk dilakukan secara asinkron (sebagai operasi batch atau operasi latensi panjang), biasanya oleh komponen backend terpisah. Dalam hal ini, fungsi Lambda backend dipanggil secara asinkron, dan metode REST API front-end tidak mengembalikan hasilnya.

Anda dapat mengonfigurasi fungsi Lambda untuk integrasi non-proxy Lambda untuk dipanggil secara asinkron dengan menentukan 'Event' sebagai jenis pemanggilan Lambda. https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html Hal ini dilakukan sebagai berikut:

Konfigurasikan pemanggilan asinkron Lambda di konsol API Gateway

Agar semua pemanggilan menjadi asinkron:

  • Dalam permintaan Integr asi, tambahkan X-Amz-Invocation-Type header dengan nilai statis'Event'.

Bagi klien untuk memutuskan apakah pemanggilan asinkron atau sinkron:

  1. Dalam Permintaan Metode, tambahkan InvocationType header.

  2. Dalam permintaan Integr asi tambahkan X-Amz-Invocation-Type header dengan ekspresi pemetaanmethod.request.header.InvocationType.

  3. Klien dapat menyertakan InvocationType: Event header dalam permintaan API untuk pemanggilan asinkron atau InvocationType: RequestResponse untuk pemanggilan sinkron.

Konfigurasikan pemanggilan asinkron Lambda menggunakan OpenAPI

Agar semua pemanggilan menjadi asinkron:

  • Tambahkan X-Amz-Invocation-Type header ke bagian 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" }

Bagi klien untuk memutuskan apakah pemanggilan asinkron atau sinkron:

  1. Tambahkan header berikut pada Objek I tem Path OpenAPI.

    "parameters" : [ { "name" : "InvocationType", "in" : "header", "schema" : { "type" : "string" } } ]
  2. Tambahkan X-Amz-Invocation-Type header ke bagian 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" }
  3. Klien dapat menyertakan InvocationType: Event header dalam permintaan API untuk pemanggilan asinkron atau InvocationType: RequestResponse untuk pemanggilan sinkron.

Konfigurasikan pemanggilan asinkron Lambda menggunakan CloudFormation

CloudFormation Template berikut menunjukkan cara mengkonfigurasi untuk pemang AWS::ApiGateway::Method gilan asinkron.

Agar semua pemanggilan menjadi asinkron:

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'

Bagi klien untuk memutuskan apakah pemanggilan asinkron atau sinkron:

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'

Klien dapat menyertakan InvocationType: Event header dalam permintaan API untuk pemanggilan asinkron atau InvocationType: RequestResponse untuk pemanggilan sinkron.