跳至内容

如何从我的 API Gateway API 异步调用 Lambda 函数?

1 分钟阅读
0

我想为我的 Amazon API Gateway API 异步调用 AWS Lambda 函数。我不想同步调用此函数。

解决方法

REST API

在 Lambda 非代理集成中,默认情况下,Lambda 会同步调用后端函数。要异步调用后端函数,请将 Lambda invocation type(Lambda 调用类型)设置为 Event(事件)。

完成以下步骤:

  1. 打开 API Gateway 控制台。
  2. 选择 APIs,然后选择您的 REST API。
  3. 在 Resources(资源)中,选择 GET,然后选择 Integration request(集成请求)。
  4. 对于 Integration type(集成类型),选择 Lambda function(Lambda 函数)。
  5. 展开 URL request headers parameters(URL 请求标头参数),然后选择 Add request headers parameter(添加请求标头参数)。
  6. 对于 Name(名称),输入 X-Amz-Invocation-Type。
  7. 对于 Mapped from(映射来源),输入 Event(事件)。
  8. 重新部署 REST API。

要使用异步或同步选项调用 Lambda 函数,请添加 InvocationType 标头。

完成以下步骤:

  1. 打开 API Gateway 控制台。
  2. 选择 APIs,然后选择您的 REST API。
  3. 在 Resources(资源)中,选择 GET,然后选择 Method request(方法请求)。
  4. 在 Request validator(请求验证程序)中,选择 Edit(编辑)图标。
  5. 选择下拉列表,然后选择 Validate query string parameters and headers(验证查询字符串参数和标头)。
  6. 选择 Save(保存)图标。
  7. 展开 HTTP request headers(HTTP 请求标头),然后选择 Add header(添加标头)。
  8. 对于 Name(名称),输入 InvocationType,然后选择 Required(必需)。
  9. 在 Integration Request(集成请求)中,展开 URL request headers parameters(URL 请求标头参数),然后选择 Add request header parameter(添加请求标头参数)。
  10. 对于 Name(名称),输入 X-Amz-Invocation-Type。
  11. 对于 Mapped from(映射来源),输入 method.request.header.InvocationType。
  12. 重新部署 REST API。

客户端可以在 API 请求中包含 InvocationType: Event 标头以进行异步调用,或 InvocationType: RequestResponse 标头以进行同步调用。

HTTP API

HTTP API 仅支持 Lambda 的代理集成。对于 HTTP API,您无法在 API Gateway 集成中设置 X-Amz-Invocation-Type 标头。相反,请使用两个 Lambda 函数,其中一个充当代理。要从一个 Lambda 函数调用另一个 Lambda 函数,请使用 Invoke API,并在第一个 Lambda 函数中将 InvocationType 设置为 Event(事件)。

配置示例:

HTTP API 同步调用 Lambda1,然后 Lambda1 异步调用 Lambda2。