API GatewayのHTTP APIでLambda(python)を使う!

問題解決 API Gateway

※この記事にはプロモーションが含まれています。

LambdaPythonで作成していざAPI GatewayHTTP APIを使ってリクエストしたら、
bodyのjsonがなかなかLambdaで読めなかったので、解決方法を書いておこうと思います。

API Gatewayの作成

まずAPI GatewayをHTTP APIで作ります。

HTTP API

HTTP APIを選択します。

適当なAPI名を付けたら統合で「Lambda」を選択し、APIで実行したいLambda関数を選択します。

APIを設定

あとは「次へ」「次へ」でAPIが作成されます。
これでとりあえずAPI Gatewayができました。

API実行でエラー

いざPostmanを使ってAPIを実行してみました。
その時のbodyにセットするjsonはこんな感じ

{
  "aaa": "11111",
  "bbb": "22222",
  "ccc": "33333"
}

するとエラーが返ってきました。

"Error: 'aaa'"

どうやら’aaa’がLambda側でちゃんと取れていないようです。
Lambda側のPythonはこんな感じ

def lambda_handler(event, context):
    try:
        aaa= event['aaa']
        bbb= event['bbb']
        ccc= event['ccc']
・・・

HTTP APIとREST APIでは取り方が違うらしい!

調べてみるとAPI GatewayでHTTP APIとREST APIではLambda側での取得の方法が異なるようです。
ということでLambdaを修正。

def lambda_handler(event, context):
    try:
        aaa= json.loads(event.get('body', '{}')).get('aaa')
        bbb = json.loads(event.get('body', '{}')).get('bbb')
        ccc = json.loads(event.get('body', '{}')).get('ccc')

こうすることでリクエストでセットしたjsonが想定通り取得することができました。

めでたしめでたし

コメント

タイトルとURLをコピーしました