クイックスタート: Cloud Console を使用して API Gateway に API をデプロイする

このページでは、API Gateway に API をデプロイして、バックエンド サービスへのトラフィックを保護する方法について説明します。

Cloud Console を使用して Cloud Functions のバックエンド サービスにアクセスする新しい API をデプロイするには、次の手順に従います。このクイックスタートでは、API キーを使ってバックエンドを不正アクセスから保護する方法についても説明します。

始める前に

  1. Cloud Console で [API Gateway] ページに移動し、Google Cloud プロジェクトを選択または作成します。

    [API Gateway] ページに移動

  2. API Gateway では、次の Google サービスを有効にする必要があります。

    名前 タイトル
    apigateway.googleapis.com API Gateway API
    servicemanagement.googleapis.com Service Management API
    servicecontrol.googleapis.com Service Control API

    選択したプロジェクトでこれらのサービスをまだ有効にしていない場合は、有効にするように求められます。

  3. お支払いが有効になっていることを確認します。

    課金を有効にする方法について

API バックエンドをデプロイする

API Gateway はデプロイされたバックエンド サービスの前にあり、すべての受信リクエストを処理します。このクイックスタートでは、API ゲートウェイが、以下の関数を含む helloGET という名前の Cloud Function バックエンドに受信呼び出しをルーティングします。

/**
 * HTTP Cloud Function.
 * This function is exported by index.js, and is executed when
 * you make an HTTP request to the deployed function's endpoint.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */

exports.helloGET = (req, res) => {
  res.send('Hello World!');
};

クイックスタート: gcloud コマンドライン ツールの使用の手順に従って、サンプルの Cloud Functions コードをダウンロードし、Cloud Functions のバックエンド サービスをデプロイします。

API 定義の作成

API Gateway は、API 定義を使用して呼び出しをバックエンド サービスに転送します。特殊なアノテーションを含む OpenAPI 仕様を使用して、目的の API ゲートウェイの動作を定義できます。このクイックスタートの OpenAPI 仕様には、Cloud Functions のバックエンドへのルーティング手順が含まれています。

# openapi2-functions.yaml
swagger: '2.0'
info:
  title: API_ID optional-string
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /hello:
    get:
      summary: Greet a user
      operationId: hello
      x-google-backend:
        address: https://us-central1-PROJECT_ID.cloudfunctions.net/helloGET
      responses:
        '200':
          description: A successful response
          schema:
            type: string

上記の OpenAPI 仕様を使用して API を定義するには:

  1. コマンドラインから、openapi2-functions.yaml という名前の新しいファイルを作成します。

  2. 新しく作成したファイルに OpenAPI 仕様の内容をコピーして貼り付けます。

  3. ファイルを次のように編集します。

    1. title フィールドで、API_ID を API の名前(次のステップで作成します)に置き換え、optional-string を選択した簡単な説明に置き換えます。 このフィールドの値は、この API へのアクセスを許可する API キーの作成に使用されます。API ID の命名ガイドラインについては、API ID の要件をご覧ください。
    2. address フィールドで、PROJECT_ID を Google Cloud プロジェクトの名前に置き換えます。

ゲートウェイを作成する

これで、API Gateway でゲートウェイを作成してデプロイできるようになりました。

  1. Cloud Console で [API Gateway] ページを開きます。

    [API Gateway] ページに移動

  2. [Create Gateway] をクリックします。

  3. [API] セクションで、次の操作を行います。

    1. 新しい API を作成するか、[API を選択] プルダウンから既存の API を選択できます。このチュートリアルでは、[Create a new API] を選択します。
    2. API の表示名を入力します。
    3. API の API ID を入力します。
    4. (省略可)Key-Value 形式を使用して API にラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
  4. [API Config] セクションで、次の操作を行います。

    1. 新しい API 構成を作成するか、[Select a Config] プルダウンから既存の API 構成を選択できます。このチュートリアルでは、[新しい API 構成の作成] を選択します。
    2. ファイル ブラウザを使用して、API の定義に使用する openapi2-functions.yaml をアップロードします。
    3. API 構成の表示名を入力します。
    4. プルダウン リストからサービス アカウントを選択します。 選択したサービス アカウントが API Gatewayの ID として使用されます。

    5. (省略可)Key-Value 形式を使用して、API 構成にラベルを追加します。 複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。

  5. [Gateway details] セクションで、次の操作を行います。

    1. ゲートウェイの表示名を入力します。 ゲートウェイの URL が自動的に生成されます。
    2. プルダウン メニューからゲートウェイのロケーションを選択します。
    3. (省略可)ゲートウェイに Key-Value 形式でラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
  6. [Create Gateway] をクリックします。

これにより、新しく作成されたゲートウェイに API 構成がデプロイされます。 ゲートウェイに API 構成をデプロイすると、API クライアントが API へのアクセスに使用できる外部 URL が定義されます。

オペレーションが完了するまでに数分かかることがあります。 作成とデプロイのプロセスのステータスを確認するには、メイン ナビゲーション バーの [Notification] アイコンをクリックしてください。次の図に示すように、ステータス通知が表示されます。

通知パネル

正常に完了すると、ゲートウェイのランディング ページでゲートウェイの詳細を確認できます。

[Gateways] ページに移動

ゲートウェイの URL をメモします。これは、次の手順でデプロイをテストするために使用されます。

API デプロイのテスト

これで、ゲートウェイのデプロイ時に生成された URL を使用して API にリクエストを送信できるようになりました。

ブラウザに次の URL を入力します。

  • GATEWAY_URL は、デプロイするゲートウェイ URL を指定します。
  • hello は、API 構成で指定されたパスです。
https://GATEWAY_URL/hello

次に例を示します。

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

ブラウザに「Hello World!」というメッセージが表示されます。

API Gateway が正常に作成されてデプロイされました。

API キーを使用したアクセスの保護

API バックエンドへのアクセスを保護するには、プロジェクトに関連付けられた API キーを生成し、そのキーに API を呼び出すためのアクセス権を付与します。詳しくは、API キーで API アクセスを制限するをご覧ください。

このクイックスタートで使用している Google Cloud プロジェクトに関連付けられた API キーがない場合は、API キーの作成の手順に従って追加できます。

API キーを使用してゲートウェイへのアクセスを保護するには:

  1. サービスの API キーのサポートを有効にします。
    1. Cloud Console で、[API とサービス] の [ライブラリ] に移動します。
    2. 検索バーに、作成した API のマネージド サービス名を入力します。 この値は API のランディング ページの API の [マネージド サービス] 列で確認できます。 例:
      my-api-123abc456def1.apigateway.my-project.cloud.goog
    3. サービスのランディング ページで、[有効にする] をクリックします。
  2. API 構成の作成に使用される OpenAPI 仕様を変更して、すべてのトラフィックに API キー検証セキュリティ ポリシーを適用する手順を含めます。以下に示すように、security タイプと securityDefinitions を追加します。
        # openapi2-functions.yaml
        swagger: '2.0'
        info:
          title: API_ID optional-string
          description: Sample API on API Gateway with a Google Cloud Functions backend
          version: 1.0.0
        schemes:
          - https
        produces:
          - application/json
        paths:
          /hello:
            get:
              summary: Greet a user
              operationId: hello
              x-google-backend:
                address:https://us-central1.PROJECT_ID.cloudfunctions.net/helloGET
              security:
              - api_key: []
              responses:
                '200':
                  description: A successful response
                  schema:
                    type: string
        securityDefinitions:
          # This section configures basic authentication with an API key.
          api_key:
            type: "apiKey"
            name: "key"
            in: "query"
    securityDefinition は、仕様で定義されているすべてのパスへのアクセスをリクエストするときに、key という名前のクエリ パラメータとして渡される API キーをリクエストするように API を構成します。
  3. 新しい API 構成を作成して既存のゲートウェイにデプロイします。
    1. API のランディング ページに移動します。

      [API] ページに移動

    2. リストから API を選択して詳細を表示します。
    3. [Configs] タブを選択します。
    4. [Configs] ページの [Upload] ボタンをクリックします。
    5. 新しい API 構成を作成します。
      1. ファイル ブラウザを使用して、変更した OpenAPI 仕様をアップロードします。
      2. 新しい API 構成の表示名を入力します。
      3. プルダウン リストからサービス アカウントを選択します。選択したサービス アカウントが API Gatewayの ID として使用されます。
      4. (省略可)Key-Value 形式を使用して、API 構成にラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
    6. プルダウン リストからゲートウェイを選択して、新しい API 構成をゲートウェイにデプロイします。
    7. [作成] をクリックします。

API キーのテスト

変更した API を作成してデプロイしたら、API にリクエストを送信してみてください。

ブラウザに次の URL を入力します。

  • GATEWAY_URL は、デプロイするゲートウェイ URL を指定します。
  • hello は、API 構成で指定されたパスです。
https://GATEWAY_URL/hello

次に例を示します。

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

これにより、次のエラーが発生します。

UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.

ブラウザに次の URL を入力します。

  • GATEWAY_URL は、デプロイするゲートウェイ URL を指定します。
  • hello は、API 構成で指定されたパスです。
  • API_KEY は、前の手順で作成した API キーを指定します。
https://GATEWAY_URL/hello?key=API_KEY

ブラウザに「Hello World!」と表示されます。

これで完了です。API Gateway で API バックエンドを正常に保護しました。 追加の API キーを生成して、新しい API クライアントのオンボーディングを開始できます。

API の活動を追跡する

  1. Cloud Console の [API Gateway] ページで API のアクティビティ グラフを確認します。API をクリックして、[概要] ページにアクティビティ グラフを表示します。グラフにリクエストが反映されるまでにしばらく時間がかかる場合があります。

  2. [ログビューア] ページで API のリクエストログを確認します。[ログ エクスプローラ] ページへのリンクは、Cloud Console の [API Gateway] ページにあります。

    [API Gateway] ページに移動

    [API Gateway] ページで次の操作を行います。

    1. 表示する API を選択します。
    2. [詳細] タブをクリックします。
    3. [ログ] の下にあるリンクをクリックします。

クリーンアップ

このクイックスタートで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。

このチュートリアルで使用した Google Cloud プロジェクトの削除もできます。

次のステップ