AWS API Gateway集成请求Http标头未传递给lambda

时间:2019-09-22 05:49:01

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

这类似于此帖子API-Gateway Integration Request HTTP Header not mapping query string to header,但我看不到任何答案,所有答案都与问题的意图无关。

我试图在API网关中添加集成请求参数,但是每当我将'Http Headers'as shown here和'Mapping template'设置为passthrough时,登录lambda时都看不到该标题。

在集成响应中,我也无法在集成头响应参数中引用它。当我调用API时,“ integration.response.header.cokers”将返回空白。 This is how I configured the integration response

1 个答案:

答案 0 :(得分:0)

最终,这里的解决方案是实现lambda proxy integration

API Gateway中的代理集成告诉API Gateway只需将所有标头转发到集成以进行处理,这意味着您将在lambda函数中看到所有这些值。

注意:如果Lambda是代理集成,则必须将特定的响应格式返回给API Gateway。最终,响应应该类似于:


    {
        'statusCode': 200,
        'headers': {
            'echo-proxy': True
        },
        'body': 'some payload'
    }

您现在想要做的是手动映射所有内容,这是一种过时的方法,通常除非您绝对必须这样做,否则您就不想这样做,因为这很痛苦。

如果必须手动映射标头,则首先在方法请求中映射标头,以便可以继续进行下一步,依此类推。基本上是这样的:

  

方法请求->将变量映射到集成请求->将变量映射到主体映射模板->将变量映射到实际请求标头

您的集成请求-> HTTP标头的屏幕快照中的内容是:

  

名称:焦化者      映射自:“等等”

但是,“映射自”应类似于“ method.request.header.coker”,它是标准路径(表示从名称为“ coker”的“方法请求标头”字段中获取值)。

将焦化器标头添加到方法请求中之后,并且正确映射了集成请求HTTP标头,则必须实现映射模板。设置内容类型为application / json,并将passthrough设置为“当未定义模板时(推荐)”和一个简单的映射模板:


    {
      "headers": {
        "coker" : "$input.params('coker')"
      }
    }

这就是设置我的API的方式,它向我返回以下内容,因为我让我的lambda函数将事件作为json对象返回给API GW:


{"body": "{\"headers\": {\"coker\": \"mapped\"}}", "statusCode": 200}

注意:客户端请求中标头“ coker”的值已“映射”

更新后的答案
要将原始的“ coker”标头映射到“ coker2”(或您想要给它的任何其他名称),只需在映射模板中设置标头的名称,如下所示:


    {
      "headers": {
        "coker2" : "$input.params('coker')"
      }
    }

然后编辑您的lambda函数以返回“ coker2”标头,您应该得到如下响应:


{"body": "{\"headers\": {\"coker2\": \"mapped\"}}", "statusCode": 200}