对API Gateway的集成响应映射模板的任何修改都会导致500错误

时间:2015-12-06 18:03:03

标签: aws-api-gateway

我在Amazon的API网关中,对Integration Response的Mapping Templates部分的任何更改都会破坏资源/方法(导致Test返回错误)并且无法修复(您必须删除资源/方法和创建一个新的。)

  • 我创建了一个新资源,然后在其下创建一个新方法(POST)。
  • 我将它映射到一个简单的Lambda函数(它不需要任何参数,只返回/记录'hi')。
  • 我测试了这个,并且成功了。
  • 我进入集成响应,我更改了映射模板...我将application/json更改为application/xml并将'输出直通'更改为'映射模板'。

我输入此作为模板:

#set($inputRoot = $input.path('$'))
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Message>
        <Body>
            $inputRoot
        </Body>
    </Message>
</Response> 
  • 我通过单击复选框并单击“保存”按钮来保存它。
  • 我回去测试它

结果如下:

{
  "message": "Internal server error"
}

这是Logs输出的内容(我用[这里的解释]替换了潜在的敏感信息,因为我不确定什么是敏感的):

Execution log for request test-request
Sun Dec 06 17:33:50 UTC 2015 : Starting execution for request: test-invoke-request
Sun Dec 06 17:33:50 UTC 2015 : API Key: test-invoke-api-key
Sun Dec 06 17:33:50 UTC 2015 : Method request path: {}
Sun Dec 06 17:33:50 UTC 2015 : Method request query string: {}
Sun Dec 06 17:33:50 UTC 2015 : Method request headers: {}
Sun Dec 06 17:33:50 UTC 2015 : Method request body before transformations: null
Sun Dec 06 17:33:50 UTC 2015 : Endpoint request URI: [lambda uri here]
Sun Dec 06 17:33:50 UTC 2015 : Endpoint request headers: {Authorization=[lots of * here], X-Amz-Date=20151206T173350Z, X-Amz-Source-Arn=[arn here], Accept=application/json, User-Agent=AmazonAPIGateway_[string here], Host=lambda.us-east-1.amazonaws.com}
Sun Dec 06 17:33:50 UTC 2015 : Endpoint request body after transformations: 
Sun Dec 06 17:33:50 UTC 2015 : Endpoint response body before transformations: "hi"
Sun Dec 06 17:33:50 UTC 2015 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=[data here], Connection=keep-alive, Content-Length=12, Date=Sun, 06 Dec 2015 17:33:50 GMT, Content-Type=application/json}
Sun Dec 06 17:33:50 UTC 2015 : Execution failed due to configuration error: No match for output mapping and no default output mapping configured
Sun Dec 06 17:33:50 UTC 2015 : Method completed with status: 500
  • 我还尝试进入方法响应,并将响应模型的内容类型从application/json更改为application/xml ...这产生了同样的错误。
  • 此时我还尝试恢复我的更改...方法回复application/json&amp;集成响应回到application/json和'输出passthrough'...这产生了同样的错误 - 就像这个API资源/方法现在永久地被破坏了。

我还测试了另一个新资源,仅将方法响应中的响应模型的内容类型从'application / json'更改为'application / xml'...这导致测试成功。

我还尝试对集成响应中的映射模板进行了较小的更改...而不是从“输出直通”到“映射模板”的完整切换,我只是将内容类型从application/json更改为{ {1}} ...这导致了同样的错误。

因此,似乎根本原因是从输出直通更改为映射模板...一旦进行了更改,测试将失败&amp;您将无法将其返回到通过状态 - 您必须完全删除资源/方法&amp;开始一个新的。

另外,要明确的是,在整个过程中都没有部署 - 我严格使用AWS控制台本身,使用Web界面中的“测试”链接。

任何人都知道这里发生了什么? 我也试图在他们的Discussion Forum中得到一个答案,但这些线程通常不像这里那样活跃......

添加了注释 我确实有一个功能部署运行,它使用这个映射模板。该部署来自application/xml,因此这可能是Amazon API网关中的新错误/更改...

4 个答案:

答案 0 :(得分:2)

这一直是API Gateway的临时问题,因为现在问题已经消失。

一个警告

从不点击“集成响应”页面上的“保存”按钮。这似乎会导致问题,至少截至今天(2015-12-05)。

答案 1 :(得分:1)

保存默认集成响应映射时,API存在问题。该错误导致对您的API方法的请求被错误地保存以返回500错误,CloudWatch日志应该说“由于配置错误导致执行失败:输出映射不匹配且未配置默认输出映射”。

问题现已解决。如果您遇到这种情况,请重新部署您的API配置。

有关详细信息,请参阅此AWS论坛条目:https://forums.aws.amazon.com/thread.jspa?threadID=221197&tstart=0

此致 尔根

答案 2 :(得分:0)

我采访了亚马逊的支持人员及其已知问题。只要你没有按下保存按钮就可以了,但是一旦你这样做就没有回头了。

在更改模板时刷新复选框,然后刷新页面。这似乎对我有用。

答案 3 :(得分:0)

问题现已解决。现在可以安全地保存默认的集成响应。如果部署的API存在问题,则重新部署应解决问题。谢谢你的耐心等待。

赖安