11
19

More than 3 years have passed since last update.

AWS Lambda + API Gateway<GET> の使い方【初心者】

Last updated at Posted at 2019-09-18

仕事でWEB APIを作成する必要が出てきたので、個人的メモとして記載。
プログラム言語は、自由に選べるので、Goを選択。

Lambda用の関数を作成する

以下のような関数を作成。
jsonで、値を2つ受け取ると加算して返す関数。

sampelAdd.go
package main

import (
    "fmt"

    "github.com/aws/aws-lambda-go/lambda"
)

type GetData struct {
    Value1 int `json:"Value1"`
    Value2 int `json:"Value2"`
}

type ReturnData struct {
    Answer string `json:"Answer"`
}

func HandleLambdaEvent(event GetData) (ReturnData, error) {

    return ReturnData{Answer: fmt.Sprintf("%d + %d = %d", event.Value1, event.Value2, event.Value1+event.Value2)}, nil
}

func main() {
    lambda.Start(HandleLambdaEvent)
}

AWSで実行するため、linux用にコンパイルする。

GOOS=linux GOARCH=amd64 go build -o sampleAdd sampleAdd.go

AWSにアップロードする時に、zipにする必要があるので、zipにする

zip sampleAdd.zip ./sampleAdd

Lambdaの作成

「一から作成」を選択します。

スクリーンショット 2019-09-18 21.42.50.png

任意の関数名を入力し、ランタイムに「Go 1.x」を選択します。
アクセス権限は、デフォルト状態のままです。(権限について、後々学習する予定)
この状態で、「関数の作成」ボタンをクリック。

スクリーンショット 2019-09-18 21.43.26.png

「ハンドラ」の名称を、コンパイルで指定した名称にします。
「関数パッケージ」に上で作成したzipファイルを指定して、画面の右上にある「ボタン」をクリックします。

スクリーンショット 2019-09-18 21.47.01.png

以下のように「インラインコード編集できない」と出ますが問題ありません。
Go以外だと、インラインでコードの編集ができるようです。

スクリーンショット 2019-09-18 21.54.38.png

テストイベントの設定

テストイベントの設定を選択します。

スクリーンショット 2019-09-18 21.50.13.png

以下のようにテスト内容を記述し、「作成」ボタンをクリックします。

スクリーンショット 2019-09-18 21.52.12.png

テストを実施すると、想定通りの出力を確認できます。

スクリーンショット 2019-09-18 21.53.26.png

API Gatewayの作成

以下の状態で、「APIの作成」ボタンをクリックします。

スクリーンショット 2019-09-18 21.57.46.png

「メソッドの作成」をクリックします。

スクリーンショット 2019-09-18 22.01.08.png

Get(クエリ文字列)の作成

「GET」を選択します。

スクリーンショット 2019-09-18 22.01.46.png

「Lambda関数」にsampleAddを指定します。

スクリーンショット 2019-09-18 22.41.15.png

メソッドリクエストの編集

「メソッドリクエスト」を選択します。
「リクエストの検証」を「クエリ文字列パラメータおよびヘッダーの検証」に変更します。
「URLクエリ文字列パラメータ」に「Value1」「Value2」を追加します。

スクリーンショット 2019-09-18 22.38.34.png

統合リクエストの編集

「統合リクエスト」を選択します。
「マッピングテンプレート」で、「テンプレートが定義されていない場合(推奨)」を選択し、
「application/json」を追加します。

"Lambdaで受け取る値": "$input.params('URLパラメータ')"で値が取得できます。
追加内容は、以下の内容です。

{
"Value1": $input.params('Value1'),
"Value2": $input.params('Value2')
}

以下のような画面の状態で保存します。

スクリーンショット 2019-09-18 22.47.18.png

API Gateway のテスト

「テスト」をクリックします。

スクリーンショット 2019-09-18 22.50.48.png

クエリ文字列を記述し、「テスト」ボタンをクリックします。

スクリーンショット 2019-09-18 22.51.51.png

予想通りの「レスポンス本文」が返ってきます。

スクリーンショット 2019-09-18 22.52.18.png

デプロイ

「APIのデプロイ」を選択します。

スクリーンショット 2019-09-18 22.54.13.png

任意の「ステージ名」を入力し「デプロイ」ボタンをクリックします。

スクリーンショット 2019-09-18 22.55.10.png

URLが指定されるので、URLパラメータを追加して、実行します。
期待される値が表示されます。

スクリーンショット 2019-09-18 22.57.07.png

11
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
19