API Gatewayを使ってLambda関数を使ったREST APIを作成する


はじめに

こんにちは。東京五輪のサッカー準決勝のチケット持ってましたが、無観客になっちゃいましたね いやー、もし再抽選で当たってたら行く行かないで迷っていたと思うので、自分はこれでよかったと思います。

さて、今回は先日作成したLambda関数API Gatewayを通してAPIとして使えるようにしようと思います。

先日作成したLambda巻子はこちら

API Gatewayを使ってLambda関数を実行する

1. APIの作成

APIの作成からAPIを作成します。
API名はお好みで大丈夫です。URLに含まれたりはしません。

2. リソースの作成

アクションプルダウンメニューからリソースの作成を押下。


3. メソッド作成

2と同様にプルダウンメニューからメソッドの作成を選択しGETメソッドの設定を行います。
使用したいLambda関数名のページから関数のARNをコピペします。

ここで、Lambdaプロキシ統合の使用にチェックを入れるとクエリパラメータやパスパラメータなどをLambda側に渡すことができます。

4. APIのデプロイ

2と同様にプルダウンメニューからAPIのデプロイを選択し以下を参考にデプロイを行います。

デプロイ完了後APIアクセスのURLが表示されますが、まだアクセスしません

5. Lambda関数編集

Lambda関数がAPI Gatewayで返却できるレスポンス形式になっていないため(私の場合)その確認と編集を行います。

前述のLambdaでスクレイピングする記事のコードを以下のように編集します。
デプロイもお忘れなく

  from selenium import webdriver
+ import json

  def lambda_handler(event, context):

...
...
...

-     return title
+     response = {
+         'title': title
+     }
+     return {
+         'statusCode': 200,
+         'body': json.dumps(response)
+     }

6. Lambda上でテストする

Lambdaのテストのタブで、新しいイベントからAmazon API Gateway Proxy を選択します。
お好みで名前を付けて保存し、テストを実行します。

7. APIを叩いてみる

4で出力されたAPIのURLを叩いてみて、6と同じ結果が表示されれば完了です

おわりに

5をしないとエラーを吐き、つまづきポイントだと思います。
エラー出た際は、Lambda側でテストで通るかどうか試してみてください、ログも出ますので読めなり、ググるなりすればわかると思いますので

それでは!