🔷 はじめに
今回は、AWSのAPI GatewyとLambdaで、REST APIの作成を行います。
手順に沿って行うだけで、10分もかからずAPIが作成できます。
🔶 API Gatewy
https://aws.amazon.com/jp/api-gateway/
REST APIをノンコーディングで製造、管理ができるサービス。
ただし、作れるのはAPIの入り口部分までで、APIがリクエストを受けた後の具体的な処理は、別に用意する必要があります。
今回は、処理はLambda関数を使用します。
🔶 Lambda
https://aws.amazon.com/jp/lambda/
様々な言語のコードをデプロイできる実行環境。
コードは、様々なAWSプロダクトで発生したアクションをトリガーに実行する事ができます。
今回は、「API Gatewayへのリクエスト」をトリガーに、コードを実行します。
🔷 作業手順
今回は、GETメソッドのAPIを作成します。
- Lambdaで、APIの内部処理を担当する関数を作成する。
- API Gatewayで、REST APIを作成して、Lambda関数を繋げて、APIを完成させる。
🔶 Lambda関数の作成
まずは、以下にアクセスして、Lambda関数を作成します。
https://aws.amazon.com/jp/lambda/
1. Lambdaを開いたら、[関数の作成] ボタンをクリックします。
2. 「一から作成」を選択します。
⬛名前
・任意の関数名を入力します。
・今回は、「helloFunction」とします。
⬛ランタイム
・関数は様々な言語で作成できますが、今回はNode.js 8.10
を選択します。
3. 続いて、今回のLambda関数の他のAWSサービスへのアクセス許可を設定します。
と言っても、今回のLambda関数はAPI Gatewayから呼ばれる事はあっても、他のAWSサービスを呼ぶ用事は無いので、とりあえず動作logの書き込み先となる、CloudWatchというサービスにアクセスできるようにします。
⬛ロール
・1つ以上のテンプレートから新しいロールを作成します。
を選択します。
⬛ロール名
・任意のロール名を入力します。
・今回は、testRole
とします。
⬛ポリシーテンプレート
・基本的な Lambda@Edge のアクセス権限(CloudFront トリガーの場合)
を選択します。
・このテンプレートには、CloudWatchへのアクセス権限が含まれているので、今回作成したロールが付与されたサービスは、CloudWatchにログを出力できるようになります。
一通り入力したら、 [関数の作成] ボタンをクリックします。
すると、以下のようなサンプル関数が生成されます。
今回は、このサンプルをそのまま使います。
簡単にサンプルの処理を説明すると、API Gatewayで作成したAPIがリクエストを受けると、Lambda関数が呼ばれて、そのリクエスト情報一式が1行目のevent
に渡されます。
event
は今回は使わずに、APIには「"Hello from Lambda!"という文字列をレスポンスとして返すように」という指示を、処理結果として返します。
🔶 API Gatewayで、REST APIを作成
まずは、以下にアクセスして、APIを作成します。
https://aws.amazon.com/jp/api-gateway/
1. API Gatewayの設定画面を開きます。
APIのタイプはREST
で、作成方法は新しいAPI
がデフォルトで選択されているので、そのままにします。
⬛API名
・任意のAPI名を入力します。
・今回は、「hello API」とします。
入力したら、[APIの作成] ボタンをクリックします。
2. hello APIが作成されます。まずはエンドポイントを作成します。
[アクション]→[リソースの作成]をクリックします。
⬛リソース名
・任意のリソース名を入力します。
・今回は、「test」とします。
⬛API Gateway CORS を有効にする
・チェックを入れると、testリソースの作成と共に、optionメソッドのエンドポイントが作成されます。
・ブラウザからAPIを利用できるように、チェックを入れます。
入力したら、[リソースの作成] ボタンをクリックします。
3. testリソースに、GETメソッドのエンドポイントを作成します。
[アクション]→[メソッドの作成]をクリックします。
4. GETメソッドのエンドポイントがリクエスト受けた時、どのように処理するか設定します。
他のAPIにリクエストを渡したり、モックとして固定値を返したり、色々できますが、今回はLambda関数に処理を渡しますので、統合タイプはLambda関数
のままにします。
⬛Lambda プロキシ統合の使用
・チェックを入れると、このエンドポイントに対するリクエスト情報一式を、Lambdaのevent
変数(後述)に渡します。
・必ずチェックを入れます。
⬛Lambda関数
・このエンドポイントに対するリクエストがあった時、呼び出すLambda関数を設定します。
・先ほど作成した、helloFunction
を設定します。
入力したら、[保存] ボタンをクリックします。
すると、以下のように「API GatewayからLambda関数を呼び出す権限を与える」旨のメッセージが表示されるので、[OK] ボタンをクリックします。
これで、hello APIから、helloFunctionを呼び出せるようになりました。
Lambda関数の画面を開いて、以下のようにLambda関数を呼び出すトリガーとして、API Gatewayが設定されている事を確認します。
🔶 hello APIのテスト
1. hello APIを使えるようにデプロイします。
[アクション]→[APIのデプロイ]をクリックします。
2. どこにデプロイするか設定します。
⬛デプロイされるステージ
・「[新しいステージ]」を設定します。
⬛ステージ名
・任意のステージ名を入力します。
・今回は、「production」とします。
入力したら、[デプロイ] ボタンをクリックします。
3. productionステージにデプロイされます。
ツリーのGETメソッドのエンドポイントを選択すると、エンドポイントのURLが表示されます。
4. URLをクリックして、APIにリクエストを送ってみます。
Lambdaで設定した、Hello from Lambda!
という文字列がレスポンスとして返ってきました。
このように、API Gateway + Lambdaを使えば、簡単にREST APIを作成する事ができます。
🔷 まとめ
今回はLambda関数は単純な文字列を返すだけのサンプルを使いましたが、具体的な処理を実装する事で、実際に使えるAPIを簡単に作る事ができます。
色々試してみてください。