多くのアプリでは、ウェブ リクエストのコンテキストの外部でバックグラウンド処理を行う必要があります。このチュートリアルでは、ユーザーが翻訳するテキストを入力した後、以前の翻訳のリストを表示するウェブアプリを作成します。翻訳は、ユーザーのリクエストをブロックしないようにバックグラウンド プロセスで行われます。
次の図は、翻訳リクエストのプロセスを示しています。
チュートリアル アプリが動作する際のイベントの順序は次のとおりです。
- ウェブページにアクセスすると、Firestore に保存されている以前の翻訳のリストが表示されます。
- HTML フォームに入力してテキストの翻訳をリクエストします。
- 翻訳リクエストは Pub/Sub にパブリッシュされます。
- その Pub/Sub トピックに登録されている Cloud Run サービスが起動されます。
- Cloud Run サービスが Cloud Translation を使用してテキストを翻訳します。
- Cloud Run サービスは、その結果を Firestore に保存します。
このチュートリアルは、 でのバックグラウンド処理の詳細に関心をお持ちの方を対象としています。 Google CloudPub/Sub、Firestore、App Engine、Cloud Run 関数についての経験は必須要件ではありません。ただし、すべてのコードを理解するには、.NET、JavaScript、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, Cloud Run, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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, Cloud Run, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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-dotnet.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
バックグラウンド タスクのサンプルコードを含むディレクトリに移動します。
cd getting-started-dotnet/BackgroundProcessing
TranslateWorker サービスについて
このサービスは、Firestore や Translation のようないくつかの依存関係をインポートすることから始まります。
Firestore クライアントと Translation クライアントは初期化されているため、ハンドラの呼び出し間で再利用できます。これにより、実行速度の低下の要因となる、呼び出しごとに新しいクライアントを初期化する必要がなくなります。
翻訳 API は、選択した言語に文字列を翻訳します。
コントローラのコンストラクタは、Firestore クライアントと Pub/Sub クライアントを受け取ります。
Postメソッドは Pub/Sub メッセージを解析して、翻訳するテキストを取得します。メッセージ ID を翻訳リクエストの一意の名前として使用して、重複した翻訳が保存されないようにします。
TranslateWorker サービスのデプロイ
BackgroundProcessingディレクトリで、PowerShell スクリプトを実行してサービスをビルドし、Cloud Run にデプロイします。PublishTo-CloudRun.ps1
PublishTo-CloudRun.ps1 スクリプトについて
PublishTo-CloudRun.ps1 スクリプトはサービスを Cloud Run に公開し、TranslateWorker サービスが誤用されるのを防ぎます。サービスがすべての着信接続を許可した場合、誰でもコントローラに翻訳リクエストを送信することができ、それによりコストが発生します。したがって、Pub/Sub からの POST リクエストのみを受け入れるようにサービスを設定します。
このスクリプトは次のことを行います。
dotnet publishを使用してローカルでアプリをビルドします。- Cloud Build を使用して、アプリを実行するコンテナをビルドします。
- アプリを Cloud Run にデプロイします。
- プロジェクトで Pub/Sub 認証トークンを作成できるようにします。
- Pub/Sub サブスクリプション ID を表すサービス アカウントを作成します。
- サービス アカウントに、
TranslateWorkerサービスを呼び出す権限を付与します。 Pub/Sub トピックとサブスクリプションを作成します。
TranslateUI サービスについて
TranslateUI サービスは、最近の翻訳を表示するウェブページをレンダリングし、新しい翻訳のリクエストを受け入れます。
StartUpクラスは ASP.NET アプリを構成し、Pub/Sub および Firestore クライアントを作成します。インデックス ハンドラ
Indexは、Firestore からすべての既存の翻訳を取得し、リストを使用してViewModelに入力します。新しい翻訳をリクエストするには、HTML フォームを送信します。リクエスト翻訳ハンドラはリクエストを検証し、メッセージを Pub/Sub にパブリッシュします。
TranslateUI サービスのデプロイ
BackgroundProcessingディレクトリで、PowerShell スクリプトを実行してサービスをビルドし、Cloud Run にデプロイします。./PublishTo-CloudRun.ps1
PublishTo-CloudRun.ps1 スクリプトについて
PublishTo-CloudRun.ps1 スクリプトは、アプリを Cloud Run に公開します。
このスクリプトは次のことを行います。
dotnet publishを使用してローカルでアプリをビルドします。- Cloud Build を使用して、アプリを実行するコンテナをビルドします。
アプリを Cloud Run にデプロイします。
アプリをテストする
PublishTo-CloudRun.ps1 スクリプトが正常に実行されたら、翻訳のリクエストを試行します。
PublishTo-CloudRun.ps1スクリプトの最後のコマンドは、UI サービスの URL を通知してくれます。ターミナル ウィンドウで、TranslateUIサービスの URL を見つけます。gcloud beta run services describe translate-ui --region $region --format="get(status.address.hostname)"
ブラウザで、前のステップで見つけた URL に移動します。
翻訳に関する空のリストと新しい翻訳をリクエストするためのフォームを掲載したページがあります。
[Text to translate] フィールドに、翻訳するテキスト(
Hello, World.など)を入力します。[送信] をクリック
ページを更新するには、[更新] をクリックします。refresh翻訳リストに新しい行が追加されます。翻訳が表示されない場合は、数秒待ってから再度試してください。それでも翻訳が表示されない場合は、アプリのデバッグに関する次のセクションをご覧ください。
アプリのデバッグ
Cloud Run サービスに接続できない場合、または新しい翻訳が表示されない場合は、次の点を確認します。
PublishTo-CloudRun.ps1スクリプトが正常に完了し、エラーが出力されていないことを確認してください。エラーがあった場合(たとえば、message=Build failed)、エラーを修正して、もう一度実行してください。ログのエラーを確認します。
コンソールで、[Cloud Run] ページに移動します。 Google Cloud
サービス名
translate-uiをクリックします。[ログ] をクリックします。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する Google Cloud
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
Cloud Run サービスの削除
このチュートリアルで作成した Cloud Run サービスを削除します。
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker
次のステップ
- Cloud Run の詳細を確認する