このチュートリアルでは、Cloud Run for Anthos on Google Cloud サービスを作成してデプロイし、Pub/Sub push サブスクリプションから呼び出す方法について説明します。
目標
- Cloud Run for Anthos on Google Cloud でサービスを作成、ビルド、デプロイする
- Pub/Sub トピックにメッセージを公開してサービスを呼び出す
料金
このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。
新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。始める前に
- Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する。
- Cloud Run for Anthos on Google Cloud API を有効にする
- Cloud SDK をインストールして初期化します。
kubectl
コンポーネントをインストールします。gcloud components install kubectl
beta
コンポーネントをインストールします。gcloud components install beta
- コンポーネントを更新します。
gcloud components update
- Cloud Run for Anthos on Google Cloud を使用している場合は、Cloud Run for Anthos on Google Cloud の設定に沿って手順を行って、新しいクラスタを作成します。
gcloud のデフォルトを設定する
Cloud Run for Anthos on Google Cloud サービスのデフォルトとして gcloud を構成するには:
デフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID は、このチュートリアルで使用するプロジェクトの名前に置き換えます。
クラスタに gcloud を構成します。
gcloud config set kuberun/cluster CLUSTER-NAME gcloud config set kuberun/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 on Google Cloud のサンプルコードがあるディレクトリに移動します。
Node.js
cd nodejs-docs-samples/kuberun/pubsub/
Python
cd python-docs-samples/kuberun/pubsub/
Go
cd golang-samples/kuberun/pubsub/
Java
cd java-docs-samples/kuberun/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 for Anthos on Google Cloud にコンテナ イメージをデプロイする、という 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 kuberun core services create 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 on Google Cloud サービスをデプロイしたので、メッセージを 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 kuberun-pubsub-invoker \ --display-name "KubeRun Pub/Sub Invoker"
kuberun-pubsub-invoker
を使用するか、Cloud プロジェクト内で一意の名前に置き換えます。このサービス アカウントを使用して Pub/Sub サブスクリプションを作成します。
クラスタで自動 TLS と HTTPS を有効にし、サービスにドメイン マッピングを追加します。
Pub/Sub のドメイン所有者を登録します。
Pub/Sub メッセージに添付された認証トークンを検証するコードを追加します。サンプルコードは、push エンドポイントによる認証と認可で提供されています。
認証では、トークンが有効であり、予想されるサービス アカウントに関連付けられている必要があります。Cloud Run(フルマネージド)とは異なり、Cloud Run for Anthos on Google Cloud には、トークンが有効であることを示す組み込みの認証チェックがないか、サービス アカウントに Cloud Run for Anthos on Google Cloud サービスを起動する権限がありません。
このサービス アカウントを使用して Pub/Sub サブスクリプションを作成します。
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=kuberun-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 Console に移動します。
pubsub-tutorial
サービスをクリックします。[ログ] タブを選択します。
ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、しばらくしてからもう一度確認してください。
「Hello Runner!」というメッセージを見つけます。
クリーンアップ
Pub/Sub で Cloud Run for Anthos on Google Cloud を使用する場合の詳しいユースケースについては、クリーンアップをスキップして、イメージの処理のチュートリアルに進んでください。
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトを削除する
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Cloud Console で [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
チュートリアル リソースを削除する
このチュートリアルでデプロイした Cloud Run for Anthos on Google Cloud サービスを削除します。
gcloud kuberun core services delete SERVICE-NAME
SERVICE-NAME は、選択したサービス名です。
Google Cloud Console から Cloud Run for Anthos on Google Cloud サービスを削除することもできます。
チュートリアルを設定したときに追加した gcloud のデフォルト構成を削除します。
gcloud config unset kuberun/cluster gcloud config unset kuberun/cluster_location
プロジェクト構成を削除します。
gcloud config unset project
このチュートリアルで作成した他の Google Cloud リソースを削除します。
- Pub/Sub トピック
myRunTopic
を削除します - Pub/Sub サブスクリプション
myRunSubscription
を削除します。 gcr.io/PROJECT_ID/pubsub
という名前のコンテナ イメージを Container Registry から削除します。- 呼び出し元のサービス アカウント
kuberun-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
を削除します。 - このチュートリアル用にクラスタを作成した場合は、クラスタを削除します。
- Pub/Sub トピック
次のステップ
- このチュートリアルでデプロイされたサンプル サービスを展開して、Cloud Storage にアップロードされた画像を変更する画像処理機能を追加する。
- トピックを Pub/Sub アーキテクチャに合わせる方法とトピックの管理方法を学習する。
- サブスクリプションの管理における Pub/Sub サブスクリプションの詳細を学習する。
- Google Cloud のその他の機能を試す。チュートリアルをご覧ください。