概要
AWS の API Gateway と Lambda で Hello World! を出力するまでのサンプルです。
Amazon API Gateway とは
API Gatewayは、クライアントから受け取ったリクエストを、それぞれのマイクロサービスにルーティングする AWS のサービスです。
通常1つのサービスで複数の API が使われていた場合、それぞれの機能の API と個別にリクエストすることになります。
API Gateway を使用した場合は、クライアントは API へのリクエストを API Gateway への通信として行い、そこから API Gateway を経由して、個々の API と通信が行われる流れになります。このため、クライアントが通信を行うのは API Gateway の API のみとなります。
Amazon API Gateway(規模に応じた API の作成、維持、保護)| AWS
Lambda で関数を作成する
API Gateway 自体には API のルーティング機能しかなく、バックエンドの処理ロジックを書くことはできません。
バックエンドの処理は、AWS の各マイクロサービスか自前のサーバなどに書くことになります。
今回は、リクエストされた json をそのまま返すだけの処理を Lambda に Node.js で書きます。
1. Lambda に関数を作成する
apiGatewayTest
という名前で Lambda 関数を作成します。
2. サンプルのソースコードを修正する
サンプルで作成された index.js
の 'Hello from Lambda!'
の部分を event
に置き換えます。
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(event),
};
return response;
};
3. 関数をテストする
ソースコードの修正が終わったら、テストを行います。
テストに書いた json がそのまま出力されていたら成功です!
これでバックエンドの処理は終了です。
API Gateway で API を作成する
実際に API Gateway で API を作成してみます。
1. API を構築する
Amazon API Gateway のコンソールを開き、REST API の「構築」をクリックします。
2. API の基本情報を設定する
API の基本情報を以下のように設定して「API の作成」をクリックします。
プロトコル | REST |
---|---|
新しい API の作成 | 新しい API |
API 名 | Api Test |
エンドポイントタイプ | リージョン |
3. リソースを作成する。
API が作成されたら、リソースを作成します。
リソースは、API のパスになります。
デフォルトは「/」だけなので、API のエンドポイントが https://api.amazonaws.com
だったとすると、この URL の直下にアクセスすることになります。
ここに「/test」というリソースを追加すると、API の URL を https://api.amazonaws.com/test
というようにすることができます。
今回は「test」というリソースを追加します。
「アクション > リソースの作成」をクリックし、リソース名に「test」を入力して「リソースの作成」をクリックします。
4. メソッドを追加する
リソースにメソッドを定義します。
メソッドは、リソースに対するアクションで、HTTPのメソッドなどを定義します。
「test」リソースに対して、POST メソッドを定義すると、https://api.amazonaws.com/test
に POST リクエストがあった場合の処理を記載することができます。
また、メソッドは一つのリソースに対して複数定義することができ、RESTful にすることができます。
メソッドを定義するには、対象のリソースを選択した状態で「アクション > メソッドの作成」をクリックします。
リソースの下にリストボックスが現れるので、その中からアクションを選択し、チェックマークをクリックすることで定義できます。
5. リソースとバックエンドの処理を結びつける
チェックマークをクリックすると、メソッドのセットアップ画面が表示されます。
今回は、バックエンドの処理を Lambda 関数にしているので、統合タイプを「Lambda 関数」にします。 「Lambda 関数」のテキストボックスは、先ほど作成した関数の名前を入力します。
統合タイプと関数名を入力したら、「保存」をクリックします。 ※ 「Lambda 関数に権限を追加する」のアラートは「OK」を選択します。
6. メソッドのテストをする
リソースとメソッドが作成できたら、メソッドのテストを行います。
メソッドの実行画面の「テスト」をクリックします。
メソッドテストの画面に遷移したら「リクエスト本文」の欄に以下の json を記載し、「テスト」をクリックします。
{
"test": "Hello World!"
}
レスポンス本文に送信した json が表示されていたら成功です!
これで API の作成は完了です。
しかし、このままではこの API に外部からアクセスすることができません。
7. API キーを作成する
API の作成が完了したら、外部からアクセスできるようにデプロイを行います。
API をデプロイすることで、エンドポイントの URL が作成されます。
しかし、このまま公開すると誰でも API にアクセスできる状態になってしまいます。
パブリックな API であれば問題ないですが、今回は API キーを作成してから API をデプロイします。
左のツリーメニューにある「API キー」をクリックします。
API キーの情報を以下のようにし、「保存」をクリックします。
名前 | Test Api Key |
---|---|
API キー | 自動生成 |
作成が完了したら、API キーが表示されます。
8. メソッドの API キー認証を有効にする
API キーの作成が完了したら、メソッドの API キー認証を有効にします。
「メソッドの実行画面」に戻り、「メソッドリクエスト」をクリックします。
詳細画面に移動したら「API キーの必要性」を true
に変更し、チェックマークをクリックします。
9. API をデプロイする
「API キーの必要性」が true
に変更されたことを確認したら、デプロイを行います。
API のデプロイは「アクション > API のデプロイ」をクリックします。
「API のデプロイ」のアラートが表示されるので、以下のようにして「デプロイ」をクリックします。 ※「ステージの説明」と「デプロイメントの説明」は任意です。
デプロイされるステージ | [新しいステージ] |
---|---|
ステージ名 | dev |
ステージの説明 | development |
デプロイメントの説明 | first release! |
デプロイが完了すると、エンドポイントの URL が作成されます。
10. 使用量プランを設定する
APIキーを利用した認証は、ステージで利用する API キーを紐付ける必要があります。
API キーを紐付けるのは「使用量プラン」から行います。
ツリーメニューから「使用量プラン」をクリックします。
使用量プランの作成画面に移動したら、以下のように設定して「次へ」をクリックします。
名前 | Test Plan |
---|---|
スロットリングの有効化 | (チェックなし) |
クォータを有効にする | (チェックなし) |
「API」「ステージ」「使用プラン」を結びつけます。
まず「API ステージの追加」をクリックします。
対象の API とステージを選択し、チェックマークをクリックして「次へ」をクリックします。
先ほど作成した API キーを選択して、チェックマークをクリックして「完了」をクリックします。
以上ですべての設定が完了し、API が利用できる状態になりました。
11. API の動作確認をする
最後に作成した API が使用できるかを curl で確認します。
$ curl -d '{ "test" : "Hello World!" }' -H 'x-api-key:<YOUR API KEY>' <YOUR API URL>
{"statusCode":200,"body":"{\"test\":\"Hello World!\"}"}
ちゃんとレスポンスが返ってきたら完了です!