このチュートリアルでは、Cloud Run for Anthos サービスを作成して、デプロイし、Pub/Sub push サブスクリプションから呼び出す方法について説明します。
目標
- サービスを作成、ビルドして、Cloud Run for Anthos にデプロイする
- Pub/Sub トピックにメッセージを公開してサービスを呼び出す
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Cloud Run for Anthos API を有効にする
- gcloud CLI をインストールして初期化する
kubectl
コンポーネントをインストールします。gcloud components install kubectl
- コンポーネントを更新します。
gcloud components update
- Cloud Run for Anthos を使用する場合は、Cloud Run for Anthos の設定の手順に沿って新しいクラスタを作成します。
gcloud のデフォルトを設定する
gcloud に Cloud Run for Anthos サービス用のデフォルトを構成するには、次のようにします。
デフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID は、このチュートリアルで使用するプロジェクトの名前に置き換えます。
クラスタに gcloud を構成します。
gcloud config set run/platform gke gcloud config set run/cluster CLUSTER-NAME gcloud config set run/cluster_location REGION
以下のように置き換えます。
- CLUSTER-NAME は、クラスタに対して使用した名前に置き換えます。
- REGION は、選択したサポート対象のクラスタの場所に置き換えます。
Pub/Sub トピックを作成する
このサンプル サービスは Pub/Sub トピックに公開されたメッセージによってトリガーされるため、Pub/Sub でトピックを作成する必要があります。
新しい Pub/Sub トピックを作成するには、次のコマンドを使用します。
gcloud pubsub topics create myRunTopic
myRunTopic を使用するか、Cloud プロジェクト内で一意のトピック名に置き換えます。
コードサンプルを取得する
使用するサンプルコードを取得するには:
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
また、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Cloud Run for Anthos のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/run/pubsub/
Python
cd python-docs-samples/run/pubsub/
Go
cd golang-samples/run/pubsub/
Java
cd java-docs-samples/run/pubsub/
コードを確認する
このチュートリアルのコードは、次のものから構成されています。
受信リクエストを処理するサーバー。
Node.js
Node.js サービスをテストしやすくするため、サーバー構成はサーバーの起動とは別になっています。Node.js ウェブサーバーは、
ウェブサーバーはapp.js
内で設定されています。index.js
で開始します。Python
Go
Java
Pub/Sub メッセージを処理し、応答メッセージをログに記録するハンドラ。
Node.js
Python
Go
Java
正確な HTTP レスポンス コードを返すようにサービスをコーディングする必要があります。HTTP
200
や204
などの成功コードは、Pub/Sub メッセージの処理の完了を意味します。HTTP400
や500
などのエラーコードは、push を使用したメッセージの受信で説明されているように、メッセージが再試行されることを示します。サービスの動作環境を定義する
Dockerfile
。Dockerfile
の内容は言語によって異なります。Node.js
Python
Go
Java
このサンプルでは、Jib を使用して一般的な Java ツールにより Docker イメージをビルドします。Jib は、Dockerfile や Docker をインストールせずにコンテナのビルドを最適化します。Jib を使用して Java コンテナを構築する方法の詳細を確認します。
Pub/Sub リクエストの送信元を認証する方法の詳細は、以下の Pub/Sub との統合をご覧ください。
コードの配布
コードの配布は、Cloud Build でコンテナ イメージをビルドする、Container Registry にコンテナ イメージをアップロードする、Cloud Run にコンテナ イメージをデプロイするという 3 ステップで構成されます。
コードを配布するには:
コンテナをビルドして、Container Registry に公開します。
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
PROJECT_ID は Cloud プロジェクト ID、
pubsub
はサービスに付ける名前です。ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
PROJECT_ID は Cloud プロジェクト ID、
pubsub
はサービスに付ける名前です。ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
PROJECT_ID は Cloud プロジェクト ID、
pubsub
はサービスに付ける名前です。ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
Java
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/pubsub
PROJECT_ID は Cloud プロジェクト ID、
pubsub
はサービスに付ける名前です。ビルドが成功すると、BUILD SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
次のコマンドを実行して、アプリをデプロイします。
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub
PROJECT_ID を Cloud プロジェクト ID に置き換えます。
pubsub
はコンテナ名、pubsub-tutorial
はサービスの名前です。コンテナ イメージは、gcloud の設定で構成したサービスとクラスタにデプロイされることに注意してください。デプロイが完了するまで待ちます。30 秒ほどかかる場合があります。成功すると、コマンドラインにサービス URL が表示されます。この URL は、Pub/Sub サブスクリプションの構成で使用します。
サービスにコードの更新をデプロイする場合は、上記のステップを繰り返します。サービスをデプロイするたびに、リビジョンが作成されます。準備ができると、トラフィックの送信が自動的に開始します。
Pub/Sub との統合
Cloud Run for Anthos サービスをデプロイしたので、メッセージを push するように Pub/Sub を構成します。
Pub/Sub とサービスを統合するには:
プロジェクトで Pub/Sub 認証トークンを作成できるようにします。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT-NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
次のように置き換えます。
- PROJECT_ID を Cloud プロジェクト ID に置き換えます。
- PROJECT-NUMBER を Cloud プロジェクト番号に置き換えます。
Pub/Sub サブスクリプションの ID を表すサービス アカウントを作成または選択します。
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run for Anthos Pub/Sub Invoker"
cloud-run-pubsub-invoker
を使用するか、Cloud プロジェクト内で一意の名前に置き換えます。このサービス アカウントを使用して Pub/Sub サブスクリプションを作成します。
クラスタで自動 TLS と HTTPS を有効にし、サービスにドメイン マッピングを追加します。
Pub/Sub のドメイン所有者を登録します。
Pub/Sub メッセージに添付された認証トークンを検証するコードを追加します。サンプルコードは、push エンドポイントによる認証と認可で提供されています。
認証では、トークンが有効であり、予想されるサービス アカウントに関連付けられている必要があります。Cloud Run とは異なり、Cloud Run for Anthos には、トークンが有効であることや、サービス アカウントに Cloud Run for Anthos サービスを起動する権限があることを示す組み込みの認可チェックがありません。
このサービス アカウントを使用して Pub/Sub サブスクリプションを作成します。
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
次のように置き換えます。
- myRunTopic は、以前に作成したトピックに置き換えます。
- SERVICE-URL は、カスタム サービス URL に置き換えます。プロトコルとして
https
を指定します。 - PROJECT_ID を Cloud プロジェクト ID に置き換えます。
--push-auth-service-account
フラグは、認証と認可のために Pub/Sub の push 機能を有効にします。
これで、サービスが Pub/Sub と完全に統合されました。
試してみる
エンドツーエンドのソリューションをテストするには、次の手順を行います。
トピックに Pub/Sub メッセージを送信します。
gcloud pubsub topics publish myRunTopic --message "Runner"
このチュートリアルで説明したコマンドラインを使用する代わりに、プログラムでメッセージを発行することもできます。詳しくは、メッセージの公開をご覧ください。
サービスログに移動します。
Google Cloud コンソールで Cloud Run for Anthos ページに移動します。
pubsub-tutorial
サービスをクリックします。[ログ] タブを選択します。
ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、しばらくしてからもう一度確認してください。
「Hello Runner!」というメッセージを見つけます。
クリーンアップ
Pub/Sub で Cloud Run for Anthos を使用する場合のさらに詳しいユースケースのチュートリアルを行うには、クリーンアップをスキップして、画像の処理のチュートリアルに進んでください。
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトを削除する
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
チュートリアル リソースを削除する
このチュートリアルでデプロイした Cloud Run for Anthos サービスを削除します。
gcloud run services delete SERVICE-NAME
SERVICE-NAME は、選択したサービス名です。
Google Cloud コンソールから Cloud Run for Anthos のサービスを削除することもできます。
チュートリアルを設定したときに追加した gcloud のデフォルト構成を削除します。
gcloud config unset run/platform gcloud config unset run/cluster gcloud config unset run/cluster_location
プロジェクト構成を削除します。
gcloud config unset project
このチュートリアルで作成した他の Google Cloud リソースを削除します。
- Pub/Sub トピック
myRunTopic
を削除します - Pub/Sub サブスクリプション
myRunSubscription
を削除します。 gcr.io/PROJECT_ID/pubsub
という名前のコンテナ イメージを Container Registry から削除します。- 呼び出し元のサービス アカウント
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
を削除します。 - このチュートリアル用にクラスタを作成した場合は、クラスタを削除します。
- Pub/Sub トピック
次のステップ
- このチュートリアルでデプロイされたサンプル サービスを展開して、Cloud Storage にアップロードされた画像を変更する画像処理機能を追加する。
- トピックを Pub/Sub アーキテクチャに合わせる方法とトピックの管理方法を学習する。
- サブスクリプションの管理における Pub/Sub サブスクリプションの詳細を確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認する。Cloud Architecture Center を確認します。