尝试使用AWS API网关代理集成在POST上启用CORS时出现500错误

时间:2017-07-05 14:43:15

标签: python amazon-web-services aws-lambda aws-api-gateway

对于我的Lambda函数,我有一个响应方法:

def respond(err, res=None):
    return {
        'statusCode': 400 if err else 200,
        'body': json.dumps(err) if err else json.dumps(res),
        'headers': {
            'Access-Control-Allow-Headers': 'content-type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
            'Access-Control-Allow-Methods': 'POST, GET, DELETE',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Credentials': True,
            'Content-Type': 'application/json',
        },
    }

当我使用Postman的OPTIONS请求测试我的端点时,我收到500内部服务器错误。如果我从API网关控制台测试它,我另外得到这个:

Execution log for request test-request
Wed Jul 05 14:25:26 UTC 2017 : Starting execution for request: test-invoke-request
Wed Jul 05 14:25:26 UTC 2017 : HTTP Method: OPTIONS, Resource Path: /login
Wed Jul 05 14:25:26 UTC 2017 : Method request path: {}
Wed Jul 05 14:25:26 UTC 2017 : Method request query string: {}
Wed Jul 05 14:25:26 UTC 2017 : Method request headers: {}
Wed Jul 05 14:25:26 UTC 2017 : Method request body before transformations: 
Wed Jul 05 14:25:26 UTC 2017 : Received response. Integration latency: 0 ms
Wed Jul 05 14:25:26 UTC 2017 : Endpoint response body before transformations: 
Wed Jul 05 14:25:26 UTC 2017 : Endpoint response headers: {}
Wed Jul 05 14:25:26 UTC 2017 : Execution failed due to configuration error: Output mapping refers to an invalid method response: 200
Wed Jul 05 14:25:26 UTC 2017 : Method completed with status: 500

我不确定我做错了什么。我想我正在返回所有正确的标题。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

我认为你正在使用lambda集成,但你似乎想要lambda代理集成。

如果在集成响应中没有配置默认输出,则会抛出此错误。设置方法响应并使用状态代码添加默认映射(或使用lambda代理集成)。

答案 1 :(得分:0)

我最终使用Serverless Framework完全重建了项目,CORS现在正在运行。我还不确定是什么问题。 API网关似乎很有气质。