• Top
  • Search
  • About
  • Privacy Policy
#

概要

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 のみとなります。

API Gateway の仕組み

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 の「構築」をクリックします。

API Gateway のコンソール

2. API の基本情報を設定する

API の基本情報を以下のように設定して「API の作成」をクリックします。

プロトコルREST
新しい API の作成新しい API
API 名Api Test
エンドポイントタイプリージョン

API の作成

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キーの作成

作成が完了したら、API キーが表示されます。

APIキーの情報

8. メソッドの API キー認証を有効にする

API キーの作成が完了したら、メソッドの API キー認証を有効にします。
「メソッドの実行画面」に戻り、「メソッドリクエスト」をクリックします。

メソッドリクエスト

詳細画面に移動したら「API キーの必要性」を true に変更し、チェックマークをクリックします。

メソッドリクエストの詳細画面

9. API をデプロイする

「API キーの必要性」が true に変更されたことを確認したら、デプロイを行います。
API のデプロイは「アクション > API のデプロイ」をクリックします。

「API のデプロイ」のアラートが表示されるので、以下のようにして「デプロイ」をクリックします。 ※「ステージの説明」と「デプロイメントの説明」は任意です。

デプロイされるステージ[新しいステージ]
ステージ名dev
ステージの説明development
デプロイメントの説明first release!

API のデプロイ

デプロイが完了すると、エンドポイントの URL が作成されます。

ステージエディターの画面

10. 使用量プランを設定する

APIキーを利用した認証は、ステージで利用する API キーを紐付ける必要があります。
API キーを紐付けるのは「使用量プラン」から行います。

ツリーメニューから「使用量プラン」をクリックします。

使用量プランの作成画面に移動したら、以下のように設定して「次へ」をクリックします。

名前Test Plan
スロットリングの有効化(チェックなし)
クォータを有効にする(チェックなし)

使用量プランの作成

「API」「ステージ」「使用プラン」を結びつけます。

まず「API ステージの追加」をクリックします。
対象の 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!\"}"}

ちゃんとレスポンスが返ってきたら完了です!

参考情報