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

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

#Lambda用の関数を作成する

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

```go: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用にコンパイルする。

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

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

```terminal
zip sampleAdd.zip ./sampleAdd
```


#Lambdaの作成

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

![スクリーンショット 2019-09-18 21.42.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/6b80e9cf-07b8-f771-b55a-9450f05b1a55.png)

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

![スクリーンショット 2019-09-18 21.43.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/a423b4bf-9ba7-5c9f-ab62-ddf287e82855.png)

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

![スクリーンショット 2019-09-18 21.47.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/4b9d5bcb-70c9-bcf1-241d-878bc23a19b7.png)

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

![スクリーンショット 2019-09-18 21.54.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/65a5d2e4-9f3f-a2a5-67a0-44cdc45594b5.png)



#テストイベントの設定

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

![スクリーンショット 2019-09-18 21.50.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/4bbf9ee6-995e-bc9a-66d3-4e25795e077a.png)

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

![スクリーンショット 2019-09-18 21.52.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/06a9c6a4-1877-56ae-ac07-52aef97ae6a4.png)

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

![スクリーンショット 2019-09-18 21.53.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/324cf3b2-9432-d571-24e7-67073ac8437a.png)


#API Gatewayの作成


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

![スクリーンショット 2019-09-18 21.57.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/4e7d8bae-f768-3acf-5811-6ead409c4083.png)

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

![スクリーンショット 2019-09-18 22.01.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/9336a356-495f-36aa-6c4b-e5d679ca082e.png)


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

「GET」を選択します。

![スクリーンショット 2019-09-18 22.01.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/5cbb7fda-64f9-517c-2ca5-fa19316e94bd.png)

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

![スクリーンショット 2019-09-18 22.41.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/dac927f4-bdd7-9ba5-32ba-23414e5f227a.png)

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

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

![スクリーンショット 2019-09-18 22.38.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/5baa2f6f-1d48-8f06-ccc7-3c13d28494e3.png)

###統合リクエストの編集

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

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

```
{
"Value1": $input.params('Value1'),
"Value2": $input.params('Value2')
}
```
以下のような画面の状態で保存します。

![スクリーンショット 2019-09-18 22.47.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/54a2f578-f3a4-ebba-a6c4-7c1e4018123a.png)

##API Gateway のテスト

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

![スクリーンショット 2019-09-18 22.50.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/5a97f887-d76f-e574-1fb7-24d884b3eea8.png)

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

![スクリーンショット 2019-09-18 22.51.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/3190f15d-a3e8-60b5-2f13-885fb8e9679d.png)

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

![スクリーンショット 2019-09-18 22.52.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/84184939-86e9-ac98-2a36-d9bc10f48615.png)

##デプロイ

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

![スクリーンショット 2019-09-18 22.54.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/e720af80-59bc-4342-9260-74d04c704851.png)

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

![スクリーンショット 2019-09-18 22.55.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/9b111c78-2650-f3db-0aef-f2382dfe3e71.png)

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

![スクリーンショット 2019-09-18 22.57.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125499/4879e440-d601-bd9d-c8ec-1dfc49552eaf.png)