60556
他の人の作った ApiGateway + Lambda があるのですがパラメータの渡し方がわかりません

統合リクエストが Lambda で  
マッピングテンプレートが以下のようになっている場合  
curl でどう叩けばこの Lambda が起動できますか

```

    {
        "yearA": "$input.params('year')",
        "monthA": "$input.params('month')",
        "dayA": "$input.params('day')",
        "bodyA": $input.body
    }
    
```

受け取り側の Lambda はこんな感じでコメントを見ると JSON で渡すように見えます

```

    def lambda_handler(event, context):
    
        # {'yearA': 2020, 'monthA': 8, 'dayA': 10, 'bodyA': {'user_id': 'jjkjkjkjuiuhjkhkjhkjh'}}
        print(event)
    
```

`curl -XPOST -v https://xxxxxxxx.execute-api.ap-
northeast-1.amazonaws.com/staging/2019/11/12`  
だと Lambda には到達して yearA monthA dayA は取得できるんですが 'bodyA': {} となります

それ以外は以下のようなPOSTパラメータを試してみたんですが全て Unsupported Media Type となって Lambda に到達できません

```

    -d '{"user_id":"test"}'
    -d 'user_id=test'
    -F '{"user_id":"test"}'
    -F 'user_id=test'
    
```
CC BY-SA 4.0
2019-11-13T10:29:59.293
60480
2019-11-15T09:53:44.350
2019-11-14T04:03:58.437
question
aws aws-lambda
API Gateway と Lambda の入力マッピングについて
JSON をペイロードとして curl でリクエストを送る場合、Content-Typeヘッダーでそれを明示してやる必要があります。

```

    curl https://example.com -d -d '{"user_id":"test"}' -H 'Content-Type: application/json'
    
```

* * *

なお、API Gatewayでは構成の設定次第でJSON(デフォルト)以外にもXMLなども選べるようですが、とりあえずデフォルトはJSONの模様。ところで
`$input.body` だと文字列のままで `$input.json('$')` であるべきだったのでは等と思ったり……
([ref](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-
gateway-mapping-template-reference.html#input-variable-reference))

_コメントで一応解決しているようですが回答として投稿。_
CC BY-SA 4.0
2019-11-15T09:53:44.350
60556
2019-11-15T09:53:44.350
2376
60480
answer