API 网关 - Lambda 代理集成和异步调用



如果我设置一个标头 X-Amz-Invocation-Type:"Event",调用是异步完成的,但正如 Amazon 文档所述 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-output-format(,当使用代理 Lambda 集成时,lambda 函数必须返回以下格式良好的响应:

callback(null, {"statusCode": 200, "body": "results"})

由于 lambda 函数是异步调用的,因此 API 网关永远不会得到答案,然后返回 502 错误网关错误,而不是 200 OK 状态。

以下是招摇配置的摘录:

"/myFunc": {
"post": {
"parameters": [
{
"name": "myparam",
"in": "query",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response"
}
},
"x-amazon-apigateway-request-validator": "Validate query string parameters and headers",
"x-amazon-apigateway-integration": {
"responses": {
"default": {
"statusCode": "200"
}
},
"uri": "arn:aws:apigateway:ap-northeast-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ap-northeast-1:idAccount:function:myFunc/invocations",
"passthroughBehavior": "when_no_match",
"httpMethod": "POST",
"type": "aws_proxy",
"requestParameters": {
"integration.request.header.X-Amz-Invocation-Type": "'Event'"
}
}
}
}

有没有办法让它工作?

您可以设置自定义 lambda 集成(不带代理标志(。您需要配置映射模板以将请求/响应转换为所需的格式。

http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-lambda-non-proxy-integration.html#getting-started-new-lambda

最新更新