このページでは、API Gateway に API をデプロイして、バックエンド サービスへのトラフィックを保護する方法について説明します。
Cloud Console を使用して Cloud Functions のバックエンド サービスにアクセスする新しい API をデプロイするには、次の手順に従います。このクイックスタートでは、API キーを使ってバックエンドを不正アクセスから保護する方法についても説明します。
始める前に
Cloud Console で [API Gateway] ページに移動し、Google Cloud プロジェクトを選択または作成します。
API Gateway では、次の Google サービスを有効にする必要があります。
名前 タイトル apigateway.googleapis.com
API Gateway API servicemanagement.googleapis.com
Service Management API servicecontrol.googleapis.com
Service Control API 選択したプロジェクトでこれらのサービスをまだ有効にしていない場合は、有効にするように求められます。
お支払いが有効になっていることを確認します。
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 を定義するには:
コマンドラインから、
openapi2-functions.yaml
という名前の新しいファイルを作成します。新しく作成したファイルに OpenAPI 仕様の内容をコピーして貼り付けます。
ファイルを次のように編集します。
title
フィールドで、API_ID を API の名前(次のステップで作成します)に置き換え、optional-string を選択した簡単な説明に置き換えます。 このフィールドの値は、この API へのアクセスを許可する API キーの作成に使用されます。API ID の命名ガイドラインについては、API ID の要件をご覧ください。address
フィールドで、PROJECT_ID を Google Cloud プロジェクトの名前に置き換えます。
ゲートウェイを作成する
これで、API Gateway でゲートウェイを作成してデプロイできるようになりました。
Cloud Console で [API Gateway] ページを開きます。
[Create Gateway] をクリックします。
[API] セクションで、次の操作を行います。
- 新しい API を作成するか、[API を選択] プルダウンから既存の API を選択できます。このチュートリアルでは、[Create a new API] を選択します。
- API の表示名を入力します。
- API の API ID を入力します。
- (省略可)Key-Value 形式を使用して API にラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
[API Config] セクションで、次の操作を行います。
- 新しい API 構成を作成するか、[Select a Config] プルダウンから既存の API 構成を選択できます。このチュートリアルでは、[新しい API 構成の作成] を選択します。
- ファイル ブラウザを使用して、API の定義に使用する
openapi2-functions.yaml
をアップロードします。 - API 構成の表示名を入力します。
プルダウン リストからサービス アカウントを選択します。 選択したサービス アカウントが API Gatewayの ID として使用されます。
(省略可)Key-Value 形式を使用して、API 構成にラベルを追加します。 複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
[Gateway details] セクションで、次の操作を行います。
- ゲートウェイの表示名を入力します。 ゲートウェイの URL が自動的に生成されます。
- プルダウン メニューからゲートウェイのロケーションを選択します。
- (省略可)ゲートウェイに Key-Value 形式でラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
[Create Gateway] をクリックします。
これにより、新しく作成されたゲートウェイに API 構成がデプロイされます。 ゲートウェイに API 構成をデプロイすると、API クライアントが API へのアクセスに使用できる外部 URL が定義されます。
オペレーションが完了するまでに数分かかることがあります。 作成とデプロイのプロセスのステータスを確認するには、メイン ナビゲーション バーの [Notification] アイコンをクリックしてください。次の図に示すように、ステータス通知が表示されます。
正常に完了すると、ゲートウェイのランディング ページでゲートウェイの詳細を確認できます。
ゲートウェイの 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 キーを使用してゲートウェイへのアクセスを保護するには:
- サービスの API キーのサポートを有効にします。
- Cloud Console で、[API とサービス] の [ライブラリ] に移動します。
- 検索バーに、作成した API のマネージド サービス名を入力します。 この値は API のランディング ページの API の [マネージド サービス] 列で確認できます。
例:
my-api-123abc456def1.apigateway.my-project.cloud.goog
- サービスのランディング ページで、[有効にする] をクリックします。
- 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 を構成します。 - 新しい API 構成を作成して既存のゲートウェイにデプロイします。
- API のランディング ページに移動します。
- リストから API を選択して詳細を表示します。
- [Configs] タブを選択します。
- [Configs] ページの [Upload] ボタンをクリックします。
- 新しい API 構成を作成します。
- ファイル ブラウザを使用して、変更した OpenAPI 仕様をアップロードします。
- 新しい API 構成の表示名を入力します。
- プルダウン リストからサービス アカウントを選択します。選択したサービス アカウントが API Gatewayの ID として使用されます。
- (省略可)Key-Value 形式を使用して、API 構成にラベルを追加します。複数のラベルを追加するには、[Add Label] をクリックし、値を入力します。
- プルダウン リストからゲートウェイを選択して、新しい API 構成をゲートウェイにデプロイします。
- [作成] をクリックします。
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 の活動を追跡する
Cloud Console の [API Gateway] ページで API のアクティビティ グラフを確認します。API をクリックして、[概要] ページにアクティビティ グラフを表示します。グラフにリクエストが反映されるまでにしばらく時間がかかる場合があります。
[ログビューア] ページで API のリクエストログを確認します。[ログ エクスプローラ] ページへのリンクは、Cloud Console の [API Gateway] ページにあります。
[API Gateway] ページで次の操作を行います。- 表示する API を選択します。
- [詳細] タブをクリックします。
- [ログ] の下にあるリンクをクリックします。
クリーンアップ
このクイックスタートで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。
このチュートリアルで使用した Google Cloud プロジェクトの削除もできます。
次のステップ
- API Gateway についての詳細を確認する
- 開発環境の構成を確認する