(AWS) API GateWay + Lambda でAPIを実行してみた。

# Amazon API GateWay を使って、Lambdaで作成した関数を実行してみました。

＜大まかな手順＞
- AWS Lambdaで関数作成
- Amazon API GateWayで API作成
- APIを実行して、レスポンスを取得

`LambdaとAPI GateWay作成のリージョンは「東京 (ap-northeast-1）」に設定して進めますので、事前にリージョンをご確認ください。`

## AWS Lambdaでの設定
ではさっそく始めます。
まず、Lambdaで関数を先に用意します。

Lambdaのコンソール画面にて、左側のメニューから「`関数`」→「`関数の作成`」ボタンをクリック。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/05145779-fe1c-061c-2221-bb54f4d18242.png)

---


関数作成ページが表示されるので「`一から作成`」にチェック→`関数名`入力→`ランタイム`選択→「`関数を作成`」ボタンをクリック。
例として、関数名を「testLambda」とし、ランタイムは「Node.js 12.x」を選びました。（Node.jsは全く書けないので、勝手にテンプレに期待ｗ）
![screencapture-ap-northeast-1-console-aws-amazon-lambda-home-2020-01-31-15_37_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/868622dd-9818-19a8-6e82-a44948357ac8.png)

---

すると、下のような画面が表示されます。（テンプレコードもありますね！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/1b87bcf3-4743-8e70-7401-fafb68636ccb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/de28bd38-59ff-327c-f8c0-16079c2148a4.png)

---
この段階で、単体テストしてみましょう。画面右上の「`テスト`」ボタンクリック→`イベント名`入力→「`作成`」ボタンクリック。(パラメータは設定していないので、コードは書いてあるままにしても構いません)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/4177c505-72f9-0542-b214-80ec7d45e7eb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/03abecef-5f3a-8bb0-ca00-5abaa6dac9a3.png)

---
そしたら、こんな感じになります。「関数を実行したら下記のJSONコードが返ってきたよ」ていう内容が書かれてます。
これでオッケーです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/ce53b9cd-fcd4-7607-56c3-6572da3c4c4c.png)



```
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}
```

## Amazon API GateWayでの設定
では、次にAmazon API GateWayの方へ移りましょう。
コンソール画面を開いたら右側の「`APIの作成`」ボタンクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/4e0318d4-59a9-5475-684f-153271d20c17.png)
---
左上の「`HTTP API`」を選択します。
「HTTP API」は最近できた機能らしく、設定が簡単です。
設定が簡単な分、機能の制限があったりしますが今回はLambdaにつながれば十分なので、HTTPを利用します。

HTTP APIの「`構築`」ボタンクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/556c1d92-2ba9-6d9b-245d-05607b975f9b.png)

---
Step 1で
「`統合の追加`」から
`統合タイプ`＝「Lambda」
`統合ターゲット`（リージョン、Lambda関数名）＝「ap-northeast-1」「testLambda」
にセットします。
`API名`は、自由に入力してください。（例では「testAPI」としています）
入力後は、「`Review and Create`」→「`作成`」の順でボタンをクリック→
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/203118f5-0b06-28a0-103a-eafd9d95f2bb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/cd3e91bf-c973-7ede-f5a1-cf22ea913d5d.png)

こんな画面が表示されれば、APIが作成成功です。

## APIキック
「URLを呼び出す」項目の`URL/{Lambda関数名}`でAPIを叩いて作成したLambda関数を実行することができます。

Statusコードが２００で返ってきているので成功ですね！

```qiita:Terminal（APIキック結果)
$ curl https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/testLambda


StatusCode        : 200
StatusDescription : OK
Content           : "Hello from Lambda!"
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    X-Amzn-Requestid: xxxxxxxxx=
                    Content-Length: 20
                    Content-Type: application/json
                    Date: Fri, 31 Jan 2020 07:38:00 GMT

                    "Hello from Lambda!"
Forms             : {}
Headers           : {[Connection, keep-alive], [X-Amzn-Requestid, HJ7l5iHDIAMEAAQ=], [Content-Length, 20], [Content-Typ
                    e, application/json]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 20
```


ブラウザで実行するとこんな感じです。(ブラウザでは `URL/{Lambda関数名}`をURLに指定すれば、応答が返ってきます。
![screencapture-ap-northeast-1-console-aws-amazon-apigateway-main-api-detail-2020-01-31-16_32_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/214c1242-81fd-e388-72f0-8f0bd5f26f05.png)


以上です！