多くのアプリでは、ウェブ リクエストとは関連のないバックグラウンド処理を行う必要があります。このチュートリアルでは、ユーザーが翻訳するテキストを入力した後、以前の翻訳の一覧を表示するウェブアプリを作成します。翻訳は、ユーザーのリクエストをブロックしないようにバックグラウンド プロセスで行われます。
次の図は、翻訳リクエストのプロセスを示しています。
チュートリアル アプリが動作する際のイベントの順序は次のとおりです。
- ウェブページにアクセスすると、Firestore に保存されている以前の翻訳の一覧が表示されます。
- HTML フォームに入力してテキストの翻訳をリクエストします。
- 翻訳リクエストは Pub/Sub にパブリッシュされます。
- その Pub/Sub トピックに登録されている Cloud Run サービスが起動されます。
- Cloud Run サービスが Cloud Translation を使用してテキストを翻訳します。
- Cloud Run サービスは、その結果を Firestore に保存します。
このチュートリアルは、 でのバックグラウンド処理の詳細に関心をお持ちの方を対象としています。 Google CloudPub/Sub、Firestore、Cloud Run の使用経験は必要ありません。ただし、Java と HTML の経験があれば、すべてのコードを理解するうえで役立ちます。
目標
- Cloud Run サービスを理解し、デプロイする。
- アプリを試してみます。
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
gcloudコンポーネントを更新します。gcloud components update
- 開発環境を準備します。
アプリの準備
ターミナル ウィンドウで、サンプルアプリ リポジトリのクローンをローカル マシンに作成します。
git clone https://github.com/GoogleCloudPlatform/getting-started-java.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
バックグラウンド処理のサンプルコードを含むディレクトリに移動します。
cd getting-started-java/background
アプリについて
ウェブアプリには次に示す 2 つの主要なコンポーネントがあります。
- ウェブ リクエストを処理するための Java HTTP サーバー。サーバーには、次の 2 つのエンドポイントがあります。
/translateGET(ウェブブラウザを使用): ユーザーが送信して処理された翻訳リクエストの、最新の 10 件を表示します。POST(Pub/Sub サブスクリプションを使用): Cloud Translation API を使用して翻訳リクエストを処理し、結果を Firestore に保存します。
/create: 新しい翻訳リクエストを送信するためのフォーム。
- Web フォームによって送信された翻訳リクエストを処理するサービス クライアント。連携するクライアントは 次の 3 つです。
- Pub/Sub: ユーザーがウェブフォームを送信すると、Pub/Sub クライアントはリクエストの詳細を含むメッセージを公開します。このチュートリアルで作成されたサブスクリプションにより、これらのメッセージが、翻訳を実行するために作成した Cloud Run エンドポイントに中継されます。
- Translation: このクライアントは、翻訳を実行して Pub/Sub リクエストを処理します。
- Firestore: 翻訳が完了すると、このクライアントはリクエスト データを翻訳とともに Firestore に保存します。このクライアントは、メインの
/translateエンドポイントで最新のリクエストも読み出します。
Cloud Run コードについて
Cloud Run アプリは、Firestore、Translation、Pub/Sub と依存関係があります。
Firestore、Translation、Pub/Sub のグローバル クライアントは、呼び出し間で再利用できるように初期化されます。これにより、実行速度の低下の要因となる、呼び出しごとに新しいクライアントを初期化することが必要なくなります。
インデックス ハンドラ(
/)は、Firestore から既存の翻訳をすべて取得し、リストを使用して HTML テンプレートへの入力を行います。新しい翻訳をリクエストするには、HTML フォームを送信します。
/createに登録されているリクエスト翻訳ハンドラは、フォーム送信を解析してリクエストを検証し、メッセージを Pub/Sub にパブリッシュします。作成した Pub/Sub サブスクリプションは、これらのリクエストを Cloud Run エンドポイントに転送し、Pub/Sub メッセージを解析して翻訳するテキストとターゲット言語を取得します。すると、翻訳 API が、選択した言語に文字列を翻訳します。
アプリは、Firestore に作成した新しいドキュメントに翻訳データを保存します。
Cloud Run アプリのデプロイ
Pub/Sub トピック名を選択し、
uuidgenまたは uuidgenerator.net などのオンライン UUID ジェネレーターを使用して、Pub/Sub 検証トークンを生成します。このトークンは、Cloud Run エンドポイントが、作成した Pub/Sub サブスクリプションからのリクエストのみを受け入れるようにします。export PUBSUB_TOPIC=background-translate export PUBSUB_VERIFICATION_TOKEN=your-verification-token
Pub/Sub トピックを作成します。
gcloud pubsub topics create $PUBSUB_TOPICpom.xmlファイルのMY_PROJECTは プロジェクト ID に置き換えます。 Google Cloud
Jib Maven プラグインを使用して、コードのイメージをビルドし、GCR(イメージ リポジトリ)にデプロイします。
mvn clean package jib:buildCloud Run にアプリをデプロイします。
gcloud run deploy background --image gcr.io/MY_PROJECT/background \ --platform managed --region us-central1 --memory 512M \ --update-env-vars PUBSUB_TOPIC=$PUBSUB_TOPIC,PUBSUB_VERIFICATION_TOKEN=$PUBSUB_VERIFICATION_TOKEN
MY_PROJECTは、作成した Google Cloud プロジェクトの名前です。このコマンドにより、Pub/Sub サブスクリプションが翻訳リクエストをプッシュするエンドポイントが出力されます。 このエンドポイントをメモします。これは、Pub/Sub サブスクリプションを作成するために必要で、ブラウザーでエンドポイントにアクセスして新しい翻訳を要求するためです。
アプリをテストする
Cloud Run サービスのデプロイ後、翻訳のリクエストを試みます。
アプリをブラウザーで表示するには、前の手順で作成した Cloud Run エンドポイントに移動します。
翻訳に関する空のリストと新しい翻訳をリクエストするためのフォームを掲載したページがあります。
[+ Request Translation]をクリックし、リクエストフォームに記入して、[Submit]をクリックします。
送信すると自動的に
/translateパスに戻りますが、新しい翻訳はまだ表示されていない場合があります。ページを更新するには、[Refresh] refresh をクリックします。翻訳リストに新しい行が追加されます。翻訳が表示されない場合は、数秒待ってから再度試してください。それでも翻訳が表示されない場合は、アプリのデバッグに関する次のセクションをご覧ください。
アプリのデバッグ
Cloud Run サービスに接続できない場合、または新しい翻訳が表示されない場合は、次の点を確認します。
gcloud run deployコマンドが正常に完了し、エラーが出力されていないことを確認します。エラーがある場合(message=Build failedなど)は、それを修正して再度実行します。ログのエラーを確認します。
コンソールで、[Cloud Run] ページに移動します。 Google Cloud
サービス名
backgroundをクリックします。[ログ] をクリックします。
クリーンアップ
プロジェクトを削除する
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
Cloud Run サービスを削除します。
このチュートリアルで作成した Cloud Run サービスを削除します。
gcloud run services delete --region=$region background
次のステップ
- Cloud Run の詳細を確認する
- Cloud Run を使用してみる(フルマネージド環境や独自の Google Kubernetes Engine クラスタでステートレス コンテナを実行できます)。