我想为我的 Amazon API Gateway API 异步调用 AWS Lambda 函数。我不想同步调用此函数。
解决方法
REST API
在 Lambda 非代理集成中,默认情况下,Lambda 会同步调用后端函数。要异步调用后端函数,请将 Lambda invocation type(Lambda 调用类型)设置为 Event(事件)。
完成以下步骤:
- 打开 API Gateway 控制台。
- 选择 APIs,然后选择您的 REST API。
- 在 Resources(资源)中,选择 GET,然后选择 Integration request(集成请求)。
- 对于 Integration type(集成类型),选择 Lambda function(Lambda 函数)。
- 展开 URL request headers parameters(URL 请求标头参数),然后选择 Add request headers parameter(添加请求标头参数)。
- 对于 Name(名称),输入 X-Amz-Invocation-Type。
- 对于 Mapped from(映射来源),输入 Event(事件)。
- 重新部署 REST API。
要使用异步或同步选项调用 Lambda 函数,请添加 InvocationType 标头。
完成以下步骤:
- 打开 API Gateway 控制台。
- 选择 APIs,然后选择您的 REST API。
- 在 Resources(资源)中,选择 GET,然后选择 Method request(方法请求)。
- 在 Request validator(请求验证程序)中,选择 Edit(编辑)图标。
- 选择下拉列表,然后选择 Validate query string parameters and headers(验证查询字符串参数和标头)。
- 选择 Save(保存)图标。
- 展开 HTTP request headers(HTTP 请求标头),然后选择 Add header(添加标头)。
- 对于 Name(名称),输入 InvocationType,然后选择 Required(必需)。
- 在 Integration Request(集成请求)中,展开 URL request headers parameters(URL 请求标头参数),然后选择 Add request header parameter(添加请求标头参数)。
- 对于 Name(名称),输入 X-Amz-Invocation-Type。
- 对于 Mapped from(映射来源),输入 method.request.header.InvocationType。
- 重新部署 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。