GSP002

概要
API Gateway では、サービスの実装を問わず、すべてのサービスで一貫して明確に定義された REST API を使用して、サービスに安全にアクセスできます。一貫性のある API とは次のような API を指します。
- アプリ デベロッパーがサービスを簡単に使用できる。
- パブリック API に影響を与えることなく、バックエンド サービスの実装を変更できる
- Google Cloud に組み込まれているスケーリング、モニタリング、セキュリティ機能を活用できる。
このラボでは、API Gateway に API をデプロイして、バックエンド サービスへのトラフィックを保護します。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
左側の [ラボの詳細] ペインには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] ペインでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] ペインでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
ウィンドウで次の操作を行います。
- Cloud Shell 情報ウィンドウで操作を進めます。
- Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、 が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
- [承認] をクリックします。
出力:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注: Google Cloud における gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
リージョンを設定する
このラボのプロジェクト リージョンを設定します。
gcloud config set compute/region {{{project_0.default_region | "REGION"}}}
必要な API を有効にする
-
Cloud コンソールのナビゲーション メニュー()で、
[API とサービス] > [ライブラリ] をクリックします。
-
検索バーに「api gateway」と入力し、API Gateway API タイルを選択します。
-
次の画面で [有効にする] ボタンをクリックします。
タスク 1. API バックエンドをデプロイする
API ゲートウェイは、デプロイされたバックエンド サービスの前に配置され、すべての受信リクエストを処理します。このクイックスタートでは、API Gateway は、以下に示す関数を含む helloGET という名前の Cloud Functions バックエンドに受信呼び出しをルーティングします。
/**
* HTTP Cloud Function.
* この関数は index.js によってエクスポートされ、デプロイされた関数のエンドポイントに
* HTTP リクエストを行うと実行されます。
*
* @param {Object} req Cloud Function request context.
* 詳細: https://expressjs.com/en/api.html#req
* @param {Object} res Cloud Functions のレスポンス コンテキスト。
* 詳細: https://expressjs.com/en/api.html#res
*/
exports.helloGET = (req, res) => {
res.send('Hello World!');
};
- Cloud コンソールで、Cloud Functions のサンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
- Cloud Functions のサンプルコードが含まれているディレクトリに移動します。
cd nodejs-docs-samples/functions/helloworld/helloworldGet
- HTTP トリガーを使用して関数をデプロイするには、関数を含むディレクトリで次のコマンドを実行します。
gcloud functions deploy helloGET --runtime nodejs20 --trigger-http --allow-unauthenticated --region {{{project_0.default_region | "REGION"}}}
- プロンプトが表示されたら、「Y」と入力して API を有効にします。
注: 認証情報を使用して gcloud コマンドを許可するよう求められたら、[承認] をクリックします。この Cloud Functions 関数のプロビジョニングには数分かかります。オペレーションが完了するまで待ってから、次の手順に進みます。
警告: 「IamPermissionDeniedException」というエラーが表示された場合は、上記のコマンドを再実行してください。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
API バックエンドをデプロイする
タスク 2. API バックエンドをテストする
- 関数のデプロイが完了したら、
httpsTrigger
の url プロパティをメモするか、次のコマンドを使用して関数を探します。
gcloud functions describe helloGET --region {{{project_0.default_region | "REGION"}}}
出力は、以下の URL のようになります。PROJECT_ID は、プロジェクトに固有の値です。
- PROJECT_ID を変数として設定します。
export PROJECT_ID={{{project_0.project_id}}}
- URL にアクセスして Cloud Functions の関数を呼び出します。レスポンスとして「
Hello World!
」というメッセージが表示されます。
curl -v https://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
API バックエンドをテストする
API 定義を作成する
API Gateway は API 定義を使用してバックエンド サービスに呼び出しを転送します。特殊なアノテーションを含む OpenAPI 仕様を使用して、必要な API Gateway の動作を定義できます。このクイックスタートの OpenAPI 仕様には、Cloud Functions の関数のバックエンドへの転送手順が含まれています。
- Cloud Shell から、ホーム ディレクトリに戻ります。
cd ~
-
openapi2-functions.yaml
という名前の新しいファイルを作成します。
touch openapi2-functions.yaml
- 新しく作成したファイルに OpenAPI 仕様の内容をコピーして貼り付けます。
# openapi2-functions.yaml
swagger: '2.0'
info:
title: API_ID description
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://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET
responses:
'200':
description: A successful response
schema:
type: string
- 次の環境変数を設定します。
export API_ID="hello-world-$(cat /dev/urandom | tr -dc 'a-z' | fold -w ${1:-8} | head -n 1)"
- 次のコマンドを実行して、OpenAPI 仕様ファイルで前の手順で設定した変数を置き換えます。
sed -i "s/API_ID/${API_ID}/g" openapi2-functions.yaml
sed -i "s/PROJECT_ID/$PROJECT_ID/g" openapi2-functions.yaml
タスク 3. ゲートウェイを作成する
これで、API Gateway でゲートウェイを作成してデプロイする準備が整いました。
-
上部の検索バーに「API Gateway」と入力し、表示されたオプションから選択します。
-
[Create Gateway] をクリックします。次に、[API] セクションで、次の操作を行います。
- [Select an API] 入力が [Create new API] に設定されていることを確認します。
- [表示名] に「
Hello World API
」と入力します。
- [API ID] には、次のコマンドを実行して API ID を再度取得し、[API ID] フィールドに入力します。
export API_ID="hello-world-$(cat /dev/urandom | tr -dc 'a-z' | fold -w ${1:-8} | head -n 1)"
echo $API_ID
- [API Config] セクションで、次の操作を行います。
- [構成を選択] 入力が [新しい API 構成を作成] に設定されていることを確認します。
- 以前に作成した
openapi2-functions.yaml
ファイルをアップロードするには、次の手順を行います。
- Cloud Shell で、次のコマンドを実行します。
cloudshell download $HOME/openapi2-functions.yaml
- [ダウンロード] をクリックします。
注: ファイル openapi2-functions.yaml
がローカルマシンにダウンロードされます。
- [参照] を選択し、ブラウザのダウンロード場所からファイルを選択します。
- [表示名] フィールドに「
Hello World Config
」と入力します。
- [サービス アカウントを選択] 入力が [Compute Engine のデフォルトのサービス アカウント] に設定されていることを確認します。
- [Gateway details] セクションで、次の操作を行います。
- [表示名] フィールドに「
Hello Gateway
」と入力します。
- [ロケーション] プルダウンを [] に設定します。
- [Create Gateway] をクリックします。
注: ゲートウェイの作成オペレーションが完了するまでに数分(約 10 分)かかります。次の図に示すように、作成およびデプロイのプロセスのステータスを確認するには、メイン ナビゲーション バーの [通知] アイコンをクリックしてステータス通知を表示します。続行する前に、アイコンのステータスの横に緑色のチェックマークが表示されていることを確認してください。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ゲートウェイを作成する
API デプロイのテスト
これでゲートウェイのデプロイ時に生成された URL を使用して API にリクエストを送信できるようになりました。
- Cloud Shell で次のコマンドを入力して、API Gateway でホストされる新しく作成された API の
GATEWAY_URL
を取得します。
export GATEWAY_URL=$(gcloud api-gateway gateways describe hello-gateway --location {{{project_0.default_region | "REGION"}}} --format json | jq -r .defaultHostname)
- 次のコマンドを実行して、GATEWAY_URL 環境変数が設定されていることを確認します。
echo $GATEWAY_URL
設定されていない場合は、API Gateway のデプロイに時間がかかることを意味します。
- 次の curl コマンドを実行し、返されたレスポンスが
Hello World!
であることを検証します。
curl -s -w "\n" https://$GATEWAY_URL/hello
タスク 4. API キーを使用してアクセスを保護する
API バックエンドへのアクセスを保護するには、プロジェクトに関連付けられた API キーを生成し、そのキーに API を呼び出す権限を付与します。API キーを作成するには、次の手順を行います。
- Google Cloud コンソールで、[API とサービス] > [認証情報] に移動します。
- [認証情報を作成] を選択し、プルダウン メニューから [API キー] を選択します。[API キーを作成しました] ダイアログ ボックスに、新たに作成されたキーが表示されます。
![[認証情報を作成] プルダウン メニュー。](https://cdn.qwiklabs.com/TUNLf6b4oPs2LZb%2F7ZFd%2B1GxsU853TN3c2AbATntAnA%3D)
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
API キーを使用してアクセスを保護する
-
ダイアログから API キーをコピーし、[閉じる] をクリックします。
-
次のコマンドを実行して、API キーの値を Cloud Shell に保存します。
export API_KEY=REPLACE_WITH_COPIED_API_KEY
次に、サービスの API キーサポートを有効にします。
- Cloud Shell で、次のコマンドを使用して、作成した
マネージド サービス
の名前を取得します。
MANAGED_SERVICE=$(gcloud api-gateway apis list --format json | jq -r .[0].managedService | cut -d'/' -f6)
echo $MANAGED_SERVICE
- 次に、作成した API の
マネージド サービス
名を使用して、次のコマンドを実行し、サービスの API キーサポートを有効にします。
gcloud services enable $MANAGED_SERVICE
API キー セキュリティを利用するように OpenAPI 仕様を変更する
このセクションでは、デプロイされた API の API 構成を変更して、すべてのトラフィックに API キー検証セキュリティ ポリシーを適用します。
-
openapi2-functions2.yaml
という新しいファイルに、security
タイプと securityDefinitions
セクションを以下のように追加します。
touch openapi2-functions2.yaml
- 新しく作成したファイルに OpenAPI 仕様の内容をコピーして貼り付けます。
# openapi2-functions.yaml
swagger: '2.0'
info:
title: API_ID description
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://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET
security:
- api_key: []
responses:
'200':
description: A successful response
schema:
type: string
securityDefinitions:
api_key:
type: "apiKey"
name: "key"
in: "query"
- 次のコマンドを実行して、OpenAPI 仕様ファイルで前の手順で設定した変数を置き換えます。
sed -i "s/API_ID/${API_ID}/g" openapi2-functions2.yaml
sed -i "s/PROJECT_ID/$PROJECT_ID/g" openapi2-functions2.yaml
- 更新された API 仕様ファイルをダウンロードします。次のステップで、このファイルを使用してゲートウェイ構成を更新します。
cloudshell download $HOME/openapi2-functions2.yaml
- [ダウンロード] をクリックします。
タスク 5. 新しい API 構成を作成して既存のゲートウェイにデプロイする
- Cloud Console で [API Gateway] ページを開きます。(ナビゲーション メニュー > API ゲートウェイ をクリックします)。
- リストから API を選択して詳細を表示します。
- [ゲートウェイ] タブを選択します。
- 利用可能なゲートウェイのリストから [
Hello Gateway
] を選択します。
- ゲートウェイ ページの上部にある [
編集
] をクリックします。
- [API 構成] で、プルダウンを [
新しい API 構成を作成
] に変更します。
- [API 仕様をアップロード] 入力ボックスの [Browse] をクリックし、
openapi2-functions2.yaml
ファイルを選択します。
- [表示名] に「
Hello Config
」と入力します。
- [サービス アカウントを選択] で [
Qwiklabs User Service Account
] を選択します。
- [更新] をクリックします。
注: Gateway の更新オペレーションが完了するまでに数分かかることがあります。 次の図に示すように、作成およびデプロイのプロセスのステータスを確認するには、メイン ナビゲーション バーの [通知] アイコンをクリックしてステータス通知を表示します。続行する前に、アイコンのステータスの横に緑色のチェックマークが表示されていることを確認してください。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
新しい API 構成を作成して既存のゲートウェイにデプロイします。
タスク 6. API キーを使用して呼び出しをテストする
- API キーを使用してテストするには、次のコマンドを実行します。
export GATEWAY_URL=$(gcloud api-gateway gateways describe hello-gateway --location {{{project_0.default_region | "REGION"}}} --format json | jq -r .defaultHostname)
curl -sL $GATEWAY_URL/hello
curl
呼び出しで API キーが指定されていないため、次のようなエラー レスポンスが表示されます。
UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). この API を呼び出すには、API キーまたはその他の形式の API コンシューマー ID を使用してください。
-
key
クエリ パラメータを指定して次の curl コマンドを実行し、以前に作成した API キーを使用して API を呼び出します。
curl -sL -w "\n" $GATEWAY_URL/hello?key=$API_KEY
API_KEY
環境変数が設定されていない場合は、左側のメニューから [API とサービス] > [認証情報] に移動して API キーを取得できます。キーは [API キー] セクションに表示されます。
API から返されるレスポンスは Hello World!
になります。
注: 目的の結果を得るには、このコマンドを複数回実行する必要がある場合があります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
API キーを使用した呼び出しのテスト
お疲れさまでした
これで API バックエンドは API Gateway で正常に保護されました。追加の API キーを生成して、新しい API クライアントのオンボーディングを開始できます。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 10 月 23 日
ラボの最終テスト日: 2024 年 10 月 23 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。