API Gatewayとlambdaを使ってみる

## やりたいこと

API Gatewayとlambdaを連携させて、REST APIの作成してみたいと思います。

## まずそれぞれのサービスについての概要

- AWS Lambda とは

サーバレスでコードを実行することが出来るサービス

詳細は [こちら](https://qiita.com/miyuki_samitani/items/14497a78e5c0cbbb0e37) を御覧ください

- API Gatewy とは

APIの管理や実行を簡単にできるサービスで
クライアントからのリクエストを受け取り、AWSのサービスに渡します

詳細は [こちら](https://qiita.com/miyuki_samitani/items/5c22e47ccd24a500844e) を御覧ください

## 手順

1. lambda関数の作成
2. API Gatewayで REST APIを作成する
3. hello lamda API をデプロイ
4. APIにリクエストを送る

## 作成

### lambda関数の作成

- lambdaに移動し、関数を作成する

右上の方から関数を作成することが出来ます

![1関数 - Lambda - Google Chrome 2021-04-05 17.20.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/c28fd86c-5c4f-954e-72c1-5ae8e64d8d06.png)


- lambdaの詳細設定を記載

オプションは「一から作成」で、
関数名とランタイムを記載して関数を作成します。

![2Lambda - Google Chrome 2021-04-05 17.22.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/721ee002-4dc6-fb6e-3128-3ccdd2a5ee48.png)


- lambda関数の完成

今回はサンプルコードがあるので、そのまま使います。
「Hello from Lambda!」がかえるような結果になります。

![3hello_world_lambda - Lambda - Google Chrome 2021-04-05 17.26.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ad23daa3-c69e-c5c4-2975-47e4908c9b81.png)


### API Gatewayで REST APIを作成する

- API Gatewayに移動し、APIを作成します

右上からAPIを作成します

![4API Gateway - Google Chrome 2021-04-05 17.28.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ae75216d-a713-6d7e-83c6-a0aee8ee35de.png)


- APIタイプを選択

色々タイプがありますが、今回は REST API を使用します
「構築」で次へ進みます

![5API Gateway - Google Chrome 2021-04-05 17.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/db41307f-209a-aef7-c136-1a951260c4ad.png)


- APIの作成

APIの作成を行います。
今回は「新しいAPI」で、
API名と説明、エンドポイントタイプを設定します。
設定が完了したら作成を行います。

![6API Gateway - Google Chrome 2021-04-05 17.32.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/0489ba39-6bb4-0e91-34fa-b96003e0cd84.png)


- APIが作成できました

![7API Gateway - Google Chrome 2021-04-05 17.34.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a7e8f8ca-1917-254b-f6a8-93aed2b4600f.png)


### APIにエンドポイントの設定を行う

- メソッドの作成

アクション > メソッドの作成 を行います
GETメソッドを作成し、チェックを行います

![8API Gateway - Google Chrome 2021-04-05 17.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/9a3b9981-b935-2e2a-6b08-255a15a5d8b0.png)


![9API Gateway - Google Chrome 2021-04-05 17.39.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/bbac3173-add8-5ab8-f1e5-41da6572f0af.png)


- GETメソッドの詳細

統合タイプは lambda関数
lambdaリージョンは、 東京リージョンを指定
lambda関数は 先程作ったlambda関数を指定し、保存します

![10API Gateway - Google Chrome 2021-04-05 17.40.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/bc9a8a64-0e43-04a3-59a7-7e8d543ba23c.png)


- GETメソッドが作成完了

GETメソッドが作成されました
これで hello lamda API からlambda関数を呼び出せるようになりました

![11API Gateway - Google Chrome 2021-04-05 17.42.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/0f7af6a6-6c38-ceb9-b4ee-0b7eec85b546.png)


lambdaを見ると、
lambdaを呼び出すトリガーにAPI Gatewayが設定されています。

![12hello_world_lambda - Lambda - Google Chrome 2021-04-05 17.46.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/364d498b-619a-bcf9-b020-b1021489b425.png)


### hello lamda API をデプロイ

- APIのデプロイ

API Gatewayから
アクション > APIのデプロイ を行います

![13API Gateway - Google Chrome 2021-04-05 17.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/90ea110f-5828-889a-793c-dcba88f8a83b.png)


- デプロイの設定

ステージは今ないので、新しいステージを作成して、
ステージ名は今回なんでもいいのでtestにしました。
説明等書いてデプロイします

![14API Gateway - Google Chrome 2021-04-05 17.50.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/6df05776-f6ba-3f93-2760-10d7c8576f33.png)


- デプロイされました

デプロイされて、URLが出力されました。

![15API Gateway - Google Chrome 2021-04-05 17.51.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/3824a9eb-45d6-2b34-c6ac-758745673df9.png)


### APIにリクエストを送る

↑で出力されたURLをクリックして、APIにリクエストを送ります。
すると、最初にlambdaで設定されていたサンプルコードの
「Hello from Lambda!」 が返ってきました。

![16Mozilla Firefox 2021-04-05 17.53.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/86a247d9-5ebb-a47c-94df-c7492d085df0.png)