概要
このラボでは、クイズ アプリケーション API を Google Compute Engine にデプロイし、Cloud Endpoints のモニタリング機能を利用します。
目標
このラボでは、次のタスクの実行方法について学びます。
- 既存のクイズ アプリケーション REST API から Open API 仕様を生成する。
- 生成した仕様を Cloud Endpoints としてデプロイする。
- Extensible Service Proxy を使用して Compute Engine インスタンスをプロビジョニングし、Cloud Endpoints API をホストする。
設定と要件
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
Qwiklabs にシークレット ウィンドウでログインします。
-
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
-
[Google Console を開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。
-
利用規約に同意し、再設定用のリソースページをスキップします。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

-
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
Credentialed accounts:
- @.com (active)
出力例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project =
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注:
gcloud ドキュメントの全文については、
gcloud CLI の概要ガイド
をご覧ください。
タスク 1. ケーススタディ用アプリケーションを準備する
このセクションでは、Cloud Shell にアクセスしてクイズ アプリケーションを含む Git リポジトリのクローンを作成してから、環境変数を構成してアプリケーションを実行します。
Cloud Shell でソースコードのクローンを作成する
- 次のコマンドを実行して、クラスのリポジトリのクローンを作成します。
git clone --depth=1 https://github.com/GoogleCloudPlatform/training-data-analyst
- 作業ディレクトリへのショートカットとしてソフトリンクを作成します。
ln -s ~/training-data-analyst/courses/developingapps/v1.3/nodejs/cloudendpoints ~/cloudendpoints
ケーススタディ用アプリケーションを構成、実行する
- このラボのサンプル ファイルが含まれているディレクトリに移動します。
cd ~/cloudendpoints/start
- ファイルのデフォルトのリージョンをラボで割り当てられたリージョンに置き換えるには、次のコマンドを実行します。
export APP_REGION={{{project_0.startup_script.app_gcp_region | APP_REGION}}}
export REGION={{{project_0.default_region | REGION}}}
sed -i 's/us-central1/'"$REGION"'/g' prepare_environment.sh
sed -i 's/us-central/'"$APP_REGION"'/g' prepare_environment.sh
- 次のコマンドを実行して、クイズ アプリケーションを構成します。
. prepare_environment.sh
プロンプトが表示されたら、[Bind the role to service account? (Y/n)?] で「n
」と入力します。
注: このスクリプト ファイルを実行すると、以下の処理が行われます。
- App Engine アプリケーションを作成する。
- Datastore データベースを作成する。
- 環境変数
GCLOUD_PROJECT
と GCLOUD_BUCKET
をエクスポートする。
-
npm install
を実行する。
- Cloud Datastore にエンティティを作成する。
- Open API 生成ツール
api2swagger
をインストールする。
- Google Cloud Platform のプロジェクト ID を出力する。
「ERROR: (gcloud.functions.deploy)
」と表示された場合は、cat ./prepare_environment.sh
を実行した後に表示される gcloud functions deploy
コマンド全体を再試行します。
gcloud functions list
を実行すると、関数が作成済みで使用可能になっていることを確認できます。
注: Open API 生成ツールをインストールした際に生成される警告は、このラボでは無視してかまいません。
- 次のコマンドを使用して、ウェブ アプリケーションを実行します。
npm start
アプリケーションが Cloud Shell から実行されます。
-
Cloud Shell で、[ウェブでプレビュー] > [ポート 8080 でプレビュー] をクリックして、クイズ アプリケーションをプレビューします。
- ホスト名の末尾に「
/api/quizzes/places
」を追加して URL を変更します。?authuser=0
を /api/quizzes/places
で置き換えます。
注: クイズ アプリケーション API からプレイスクイズの質問に対応する JSON データが返されます。
- 次のセクションでコマンドに貼りつけられるように、API の URL 全体をメモして保存しておきます。
注:
URL は次のようになります: https://8080-cs-***.cloudshell.dev/api/quizzes/places
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ケーススタディ用アプリケーションを構成、実行する
タスク 2. Open API 仕様を生成する
このセクションでは、Cloud Endpoints をデプロイする基盤となる Open API 仕様を生成します。
Open API 仕様を生成する
-
2 つ目の Cloud Shell ウィンドウを開きます。
-
ターミナルでプラス記号
をクリックし、新しいタブを開きます。
-
次のコマンドを実行して、ディレクトリを Cloud Endpoints 作業フォルダに変更します。
cd ~/cloudendpoints/start/endpoint
- PATH 環境変数を更新して
api2swagger
コマンドのパスを設定します。
export PATH=$PATH:`npm root -g`/api2swagger/bin
- 次のコマンドを実行して api2swagger Python パッケージをインストールします。
npm install -g api2swagger
- Open API 仕様を生成するには、次のコマンドを実行し、
[API_URL_FROM_CLIPBOARD]
を、前の手順で https://8080-cs-.../api/quizzes/places
という形式で保存した API URL に置き換えます。
api2swagger -e [API_URL_FROM_CLIPBOARD] -o ./quiz-api.json
注: api2swagger
ツールから API に対してリクエストが行われ、プロンプトがいくつか表示されます。置き換えが適切に完了していない場合は、「ホスト名が無効です」エラーが表示されます。
- 次の表を使用して、
api2swagger
のプロンプトに応答します。
プロンプト
|
レスポンス
|
Title of Swagger Spec ?
|
Quite Interesting Quiz API
|
Description of Swagger Spec ?
|
An API for the Quite Interesting Quiz
|
Terms of Service URL
|
(Enter キーを押す)
|
Version of your API Program ?
|
(Enter キーを押す)
|
Contact Name?
|
(Enter キーを押す)
|
Contact URL ?
|
(Enter キーを押す)
|
Contact Email ?
|
(Enter キーを押す)
|
License Name ?
|
(Enter キーを押す)
|
License URL ?
|
(Enter キーを押す)
|
Does your API support http ?
|
Y
|
Pick Base Path from your API ?
|
上下の矢印キーを使用して次を選択します。
❯ /api/quizzes
(Enter キーを押す)
|
A verbose explanation of the operation behavior ?
|
Gets questions for a quiz
|
A short summary of what the operation does ?
|
Get quiz questions
|
Additional external documentation for this operation ?
|
(Enter キーを押す)
|
Unique string used to identify the operation ?
|
getQuizQuestions
|
A list of tags for API documentation control ?
|
(Enter キーを押す)
|
API Path has any dynamic parameters ?
|
Y(Enter キーを押す)
|
Choose Dynamic Params in URL ?
|
上下の矢印キーを使用して ❯◉ places に移動します。
Space キーを押してプレイスを選択し、Enter キーを押します。
|
Name of URL Param ?
|
quizName
|
Description of URL Param ?
|
The name of the quiz
|
Type of query param ?
|
上下の矢印キーを使用して ❯ string を選択します。
(Enter キーを押す)
|
注: api2swagger
ツールが実行され、Open API 仕様の出力が表示されます。
Open API 仕様を編集する
-
Cloud Shell で [エディタを開く] をクリックします。
サードパーティ Cookie のブロックが有効になっている場合は、必要に応じて [新しいウィンドウで開く] をクリックします。
-
cloudendpoints/start/endpoint に移動します。
-
Cloud Shell コードエディタで
quiz-api.json
を開きます。
-
"host"
キーの値は、quiz-api.endpoints.[プロジェクト ID].cloud.goog
という形式の文字列を使用してホスト名に置き換えます。
注: 次のコード例は、host 行での変更を示したものです。
[GCP-Project-ID] の部分は、必ず自分の Google Cloud プロジェクト ID に置き換えてください。
Google Cloud プロジェクト ID は、ラボの手順の左パネルに表示されている認証情報で確認できます。
endpoint/quiz-api.json
{
"swagger": "2.0",
"host": "quiz-api.endpoints.qwiklabs-gcp-XX-XXXX.cloud.goog",
"schemes": [
"https",
"http"
],
注: 次のセクションで Open API 仕様をデプロイすると、Service Management API はデプロイ構成ファイルの host 値を使用して、quiz-api.endpoints.[PROJECT-ID].cloud.goog
という名前の新しい Cloud Endpoints サービスを作成します(存在しない場合)。その後、OpenAPI 構成ファイルに基づいてサービスが構成されます。
Cloud Endpoints は DNS と互換性のある名前を使用してサービスを一意に識別します。Google Cloud のプロジェクトには必ずグローバルに一意の名前が付いているため、プロジェクト名を使用して一意の API サービス名を作成できます。独自の DNS 名を API にマッピングすることも可能です。
- ファイルを保存します。
API 仕様を Cloud Endpoints にデプロイする
-
[ターミナルを開く] をクリックして Cloud Shell に戻ります。
-
Cloud Shell ウィンドウで次のコマンドを実行して、Open API 仕様を Cloud Endpoints としてデプロイします。
gcloud endpoints services deploy quiz-api.json
「PERMISSION_DENIED: Ownership for domain name
」などのエラーが表示される場合は、quiz-api.json
ファイル内の host が推奨形式に一致しているか(プロジェクト ID が正しいかどうかなど)を確認してください。
注: サービス定義のデプロイには数分かかります。
API に関して、キーを指定しなくてもすべてのクライアントで利用できる旨の警告が表示されます。
- 次のコマンドを実行して、Open API の構成名を確認します。
gcloud endpoints configs list --service="quiz-api.endpoints.$GOOGLE_CLOUD_PROJECT.cloud.goog"
プロジェクト ID が挿入されていることに注目してください。service は deploy
コマンドの出力からコピーできます。
注: CONFIG_ID と SERVICE_NAME を含むサービス構成が返されます。次のセクションでは、両方の値が必要になります。
タスク 3. API バックエンドをデプロイする
このセクションでは、API 実装と Cloud Endpoints Extensible Service Proxy を実行する Compute Engine インスタンスをプロビジョニングします。
Compute Engine インスタンスを作成する
-
Google Cloud コンソールのナビゲーション メニュー(☰)で、[Compute Engine] > [VM インスタンス] の順にクリックします。
- 新しいインスタンスを作成するには、[インスタンスを作成] をクリックします。
- [マシンの構成] ページで、次のフィールドに値を入力します。
フィールド
|
値
|
名前
|
endpoint-host
|
リージョン
|
|
ゾーン
|
|
シリーズ
|
E2
|
[マシンタイプ] > [共有コア]
|
e2-small
|
-
[OS とストレージ] をクリックします。
[変更] をクリックしてブートディスクの構成を開始し、次の値を選択します。
-
オペレーティング システム:
Debian
-
バージョン:
Debian GNU/Linux 11(bullseye)
-
[ネットワーキング] をクリックします。
-
[ファイアウォール] で、[HTTP トラフィックを許可する] をオンにします。
-
[セキュリティ] をクリックします。
-
[アクセス スコープ] では、[すべての Cloud API に完全アクセス権を許可] をクリックします。
-
[詳細設定] をクリックします。
-
[メタデータ] で [+ 項目を追加] を 2 回クリックします。
-
次のメタデータ値を入力します。
endpoints-service-config-id
|
エンドポイントの CONFIG_ID は
yyyy-mm-ddr0 の形式になります。
|
endpoints-service-name
|
エンドポイントの SERVICE_NAME は次の形式になります。
quiz-api.endpoints.<Project-ID>.cloud.goog
|
- [作成] をクリックします。
VM のプロビジョニングが完了するまで待ちます。
注: Compute Engine インスタンスを Debian でプロビジョニングするには、約 20 秒かかります。
API バックエンドをインストールして実行する
-
Cloud Shell ウィンドウに戻ります。
- 次のコマンドを実行して、作業ディレクトリを
endpoint
フォルダに設定します。
cd ~/cloudendpoints/start/endpoint/
- 次のコマンドを実行して、アプリケーションのソースファイルを Cloud Shell から endpoint-host にコピーします。
gcloud compute scp ./quiz-api endpoint-host:~/ --recurse --zone={{{project_0.default_zone | ZONE}}}
注: SSH 認証鍵の作成を求められた場合は、Y が表示されている状態の各プロンプトで Enter キーを押して、.ssh ディレクトリを作成してください。
ファイルのコピーには数秒かかることがあります。
-
Cloud コンソールに戻ります。
- [Compute Engine] ページで [SSH] をクリックし、endpoint-host 仮想マシンに接続します。
注: ポップアップ ブロッカーを使用している場合は、2 回のクリックが必要な場合があります。SSH 接続が確立されるまでに数秒かかります。
-
endpoint-host SSH ウィンドウで、ソフトウェアの前提条件をインストールします。
sudo apt-get install ca-certificates curl gnupg -y
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install nodejs -y
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Compute Engine インスタンスを作成し、ソフトウェアの前提条件をインストールする
- クイズ API アプリケーションを実行するには、SSH セッションで次のコマンドを実行します。
export GCLOUD_PROJECT="$(curl -H Metadata-Flavor:Google http://metadata/computeMetadata/v1/project/project-id)"
export GCLOUD_BUCKET=$GCLOUD_PROJECT-media
export PORT=8081
cd ~/quiz-api
npm install
npm start
-
Cloud コンソールに戻ります(Compute Engine の VM インスタンス リストが表示されています)。
-
endpoint-host への 2 つ目の SSH 接続を確立します。
- 2 つ目の endpoint-host SSH ウィンドウで次のコマンドを実行して、Cloud Endpoints Extensible Service Proxy をインストールします。
export CLOUD_ENDPOINTS_REPO="google-cloud-endpoints-jessie"
echo "deb http://packages.cloud.google.com/apt $CLOUD_ENDPOINTS_REPO main" | sudo tee /etc/apt/sources.list.d/google-cloud-endpoints.list
curl --silent https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install endpoints-runtime
- 引き続き 2 つ目の endpoint-host SSH ウィンドウで、次のコマンドを実行して nginx 構成ファイルを編集します。
sudo nano /etc/default/nginx
- 既存の構成の後に次の宣言を追加して、ファイルを変更します。
PORT=80
- ファイルを保存します(Ctrl+O、Enterキーの順に押す)。
- nano を終了します(Ctrl+Xを押す)。
- 次のコマンドを実行して nginx を再起動します。
sudo service nginx restart
タスク 4. Cloud Endpoints のテストと変更
このセクションでは、エンドポイントのデプロイを検証し、IP アドレスではなくホスト名を使用して処理できるように構成を変更します。
IP アドレスを使用して Cloud Endpoints を起動する
-
Cloud コンソール > [Compute Engine] に戻ります。
-
endpoint-host 仮想マシンの外部 IP アドレスをクリックして、ブラウザ ウィンドウを起動します。
注: 新しいブラウザ ウィンドウに「メソッドが存在しない」という JSON メッセージが表示されます。メソッドを「/」に関連付けていないため、これは想定された挙動です。修正する必要はありません。
- URL の末尾に「
/api/quizzes/places
」を追加します。
注: クイズ API から JSON データが返されます。
-
Cloud コンソールのナビゲーション メニューで、[エンドポイント] をクリックし、デプロイ済みのエンドポイントをクリックします。
注: quiz-api エンドポイントのモニタリング ページが表示されます。数分後、エンドポイントに対して行ったリクエストが表示されます。
Cloud Endpoints 構成を変更して再デプロイする
-
Cloud Shell コードエディタに戻り、
quiz-api.json
ファイルを選択します。
- 次のファイルの抜粋に示す
"x-google-endpoints"
のキーと値を追加します。IP アドレスの代わりに Cloud Endpoints のホスト名を使用して、API にアクセスできるようにします。
endpoint/quiz-api.json
{
"swagger": "2.0",
"host": "quiz-api.endpoints.<Project-ID>.cloud.goog",
"x-google-endpoints": [ {
"name": "quiz-api.endpoints.<Project-ID>.cloud.goog",
"target": "<endpoint-host-EXTERNAL-IP-ADDRESS>" } ],
"schemes": [
"https",
"http"
],
-
<Project-ID>
と <endpoint-host-EXTERNAL-IP-ADDRESS>
の値を変更し、ファイルを保存します。
更新された構成は次のようになります。
{
"swagger": "2.0",
"host": "quiz-api.endpoints.qwiklabs-gcp-04-a7b3469e256f.cloud.goog",
"x-google-endpoints": [ {
"name": "quiz-api.endpoints.qwiklabs-gcp-04-a7b3469e256f.cloud.goog",
"target": "34.172.61.246" } ],
"schemes": [
"https",
"http"
],
-
Cloud Shell ウィンドウに戻って次のコマンドを実行し、API を再デプロイします。
gcloud endpoints services deploy quiz-api.json
- 新しいブラウザタブを開き、
http://quiz-api.endpoints.<Project-ID>.cloud.goog/api/quizzes/gcp
に移動します。
注: GCP クイズの JSON データが表示されます。
タスク 5. API のモニタリング
このセクションでは、API からのモニタリング出力を確認します。
コンソールで API を調べる
-
Cloud コンソールに戻って、ナビゲーション メニューの [エンドポイント] をクリックし、デプロイ済みのエンドポイントをクリックします。
注: クイズ API の概要ページが表示されます。
- リクエスト、レイテンシ、エラーのグラフを確認してください。
注: モニタリング グラフを見ると、クライアントから API でリクエストが実行されたときのパフォーマンスを確認できます。
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。