Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What is going on with this article?
@hashimoto048

LambdaにAPI Gatewayから値を渡す

More than 1 year has passed since last update.

簡単にできるかなと思ったら意外とハマったのでメモ

やりたいこと

/test?id=aaaにアクセスしたらaaaを返す

用意するもの

  • Lambda
  • API Gateway

Lambda 関数

関数名:apigateway(Python2.7)

def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "body": event['id']
    }

{"id": "aaa"}を渡したときのテスト結果は以下

{
  "status": 200
  "body": "aaa"
}

ここまではすごく簡単にできた

ロールは割愛しますがちゃんと設定しましょう(まだよくわかっていない)

API Gateway

  • 新しいAPIの作成:API名test
  • メソッドの作成:get
  • 統合タイプ:Lambda関数
  • Lambda関数:apigateway

指定できるんだ!簡単!と思っていましたが。。。

設定されたGETメソッドを選択し、クエリ文字列にid=aaaと入力しテストを実行すると

{
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      7,
      "lambda_handler",
      "\"body\": event['id']"
    ]
  ],
  "errorType": "KeyError",
  "errorMessage": "'id'"
}

おや。キーがない・・・?

解決策

API Gatewayでは値をマッピングする必要がある

GET - メソッドの実行から以下2つに設定をします

  • メソッドリクエスト
  • 統合リクエスト

メソッドリクエスト

URLクエリ文字列パラメータにidというクエリ文字列を追加します

統合リクエスト

マッピングテンプレートにContent-Type:application/jsonとして以下のテンプレートを追加します

{
  "id": "$input.params('id')"
}

結果

テストを実行

{
  "body": "aaa",
  "statusCode": 200
}

やったね!!!

リソースのアクションタブからAPIのデプロイを選択するとリクエストできるURLが表示されるのでidパラメータ付きでブラウザからアクセスするとjsonレスポンスが確認できます

その他

  • APIデプロイ時にステージを設定できる
  • /test/aaaでパラメータを取得したかったらリソース作成時にリソースパスに中括弧で/{id}と指定する
    • その場合メソッドリクエストにはマッピングテンプレートに加え、リソースパスの追加をする
13
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nijibox
ニジボックスの開発は、社内のUI/UXデザインチームと連携をとりながらワンストップで行う開発支援サービスです。Reactを始めPHP(Laravel)・Ruby on Rails、Swift・Kotlinを使った開発実績も多く、バックエンドからアプリまで幅広く対応しています。現在、リクルートの大規模サービスでのモダン開発に興味のあるフロントエンドエンジニアを積極採用中です!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
13
Help us understand the problem. What is going on with this article?