AWS Lambda向API Gateway发送响应

时间:2015-07-30 13:32:51

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

我有一个生成一些文本的lambda函数。这是一个简单的Twilio应用程序

<Say>Welcome to your conference room!</Say>
<Dial>
   <Conference beep="true">waitingRoom</Conference>
</Dial>

当我使用邮递员发出POST请求时,它会完全输出。但我有两个问题:

  1. 标题返回application / json,我需要它作为text / xml。
  2. 当我从Twilio发出POST请求时,我得到502 Bad Gateway
  3. 我知道它必须对传入的params映射执行某些操作,并将响应从Lambda映射回API网关作为text / xml。但我可以理解如何做到这一点。

    enter image description here enter image description here

3 个答案:

答案 0 :(得分:5)

我使用以下模板映射来基本上剥离引号并且它起作用:

$ input.path( '$')

答案 1 :(得分:4)

我很高兴不是唯一一个与AWS Api Gateway斗争的人:)

据我所知,AWS Api Gateway主要面向JSON。如果您可以更改返回的响应内容(使用JSON),也许您可​​以解决您的问题:

{"say": "Welcome to your conference room!",
 "dial": [{
        "conference": [{
                "beep": "true",
                "name": "waitingRoom"
        }]
    }
]}

然后,您可以使用映射模板功能(在Integration响应屏幕中)映射此内容,方法是将内容类型设置为“application / json”的模板添加,并将映射模板设置为:

<Say>$input.json('say')</Say>
<Dial>
    <Conference beep="$input.json('dial.conference.beep')">$input.json('dial.conference.name')</Conference>
</Dial>

这有助于您或我遗失某些内容吗?

答案 2 :(得分:0)

要修改响应中的Content-Type,需要在API网关中配置2个区域:方法响应和集成响应。

在方法响应中,您为200状态代码添加Content-Type响应标头。

在Integration Response中,打开200响应并将Content-Type的值设置为text / xml。

以下是我在回复html内容时写的一篇文章的截图。您的情况听起来非常相似,因为您希望返回恰好包含xml并且发送了正确的Content-Type标头的字符串类型。

方法响应: Method Response

集成响应: Integration Response

以下是原始文章的链接:http://kennbrodhagen.net/2016/01/31/how-to-return-html-from-aws-api-gateway-lambda/