如何从我的 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

AWS 官方
AWS 官方已更新 2 个月前