从 Lambda 返回对 API 网关的响应
Handing back a response to API Gateway from Lambda
我正在为一些微服务使用 API Gateway-to-Lambda,但至少在一种情况下,该服务需要 20-30 秒才能完成,所以在这种情况下,我希望将立即响应传回客户端,例如:
status: 200
message: {
progressId: 1234
}
然后允许 Lambda 函数继续运行(并定期更新 "processId" 某个客户端可以访问的地方。问题是如果您调用 context.succeed()
,context.fail()
,或 context.done()
显然会阻止 lambda 函数进一步执行,但这是我知道将标准输出缓冲区刷新回 API 网关的唯一方法。
这让我想到了第二种方法,我还没有尝试解决(为了简单起见,我很想避免),它涉及 API 网关调用 "Responder" Lambda 函数然后异步触发微服务,然后立即响应 API 网关。
我试图在下面以草图格式说明这两个选项。我很想听听大家是如何解决这个问题的。
目前 API 网关要求 AWS Lambda 集成是同步的。如果您希望异步调用您的 Lambda 函数,您有 2 个选项:
异步调用 Lambda,通过 AWS 集成 在 Lambda 上调用 InvokeAsync,或使用中间服务例如 SNS 或 Kinesis 来触发 Lambda 函数。
你是 #2 图,使用同步 Lambda 调用来启动异步调用。
从 Apr/2016 开始,是否可以使用 AWS 服务代理通过 API 网关创建异步 Lambda 执行。参见 http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html
你可以发送 X-Amz-Invocation-Type
header,它支持通过 Event
值
的异步调用
You can optionally request asynchronous execution by specifying Event as the InvocationType
http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax
此外,如果您无法通过 micro-service 发送它,您可以将此 header 配置为默认通过 Method Execution 传递-> 集成请求 -> HTTP Headers 在您的API 网关资源
这在 micro-service -> API Gateway -> Lambda
场景中对我有用,就像问题中提到的那样。
我正在为一些微服务使用 API Gateway-to-Lambda,但至少在一种情况下,该服务需要 20-30 秒才能完成,所以在这种情况下,我希望将立即响应传回客户端,例如:
status: 200
message: {
progressId: 1234
}
然后允许 Lambda 函数继续运行(并定期更新 "processId" 某个客户端可以访问的地方。问题是如果您调用 context.succeed()
,context.fail()
,或 context.done()
显然会阻止 lambda 函数进一步执行,但这是我知道将标准输出缓冲区刷新回 API 网关的唯一方法。
这让我想到了第二种方法,我还没有尝试解决(为了简单起见,我很想避免),它涉及 API 网关调用 "Responder" Lambda 函数然后异步触发微服务,然后立即响应 API 网关。
我试图在下面以草图格式说明这两个选项。我很想听听大家是如何解决这个问题的。
目前 API 网关要求 AWS Lambda 集成是同步的。如果您希望异步调用您的 Lambda 函数,您有 2 个选项:
异步调用 Lambda,通过 AWS 集成 在 Lambda 上调用 InvokeAsync,或使用中间服务例如 SNS 或 Kinesis 来触发 Lambda 函数。
你是 #2 图,使用同步 Lambda 调用来启动异步调用。
从 Apr/2016 开始,是否可以使用 AWS 服务代理通过 API 网关创建异步 Lambda 执行。参见 http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html
你可以发送 X-Amz-Invocation-Type
header,它支持通过 Event
值
You can optionally request asynchronous execution by specifying Event as the InvocationType
http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax
此外,如果您无法通过 micro-service 发送它,您可以将此 header 配置为默认通过 Method Execution 传递-> 集成请求 -> HTTP Headers 在您的API 网关资源
这在 micro-service -> API Gateway -> Lambda
场景中对我有用,就像问题中提到的那样。