多くのアプリでは、ウェブ リクエストのコンテキストの外部でバックグラウンド処理を行う必要があります。このチュートリアルでは、ユーザーが翻訳するテキストを入力した後、以前の翻訳のリストを表示するウェブアプリを作成します。翻訳は、ユーザーのリクエストをブロックしないようにバックグラウンド プロセスで行われます。
次の図は、翻訳リクエストのプロセスを示しています。
チュートリアル アプリが動作する際のイベントの順序は次のとおりです。
- ウェブページにアクセスすると、Firestore に保存されている以前の翻訳のリストが表示されます。
- HTML フォームに入力してテキストの翻訳をリクエストします。
- 翻訳リクエストは Pub/Sub にパブリッシュされます。
- その Pub/Sub トピックに登録されている Cloud Run サービスが起動されます。
- Cloud Run サービスが Cloud Translation を使用してテキストを翻訳します。
- Cloud Run サービスは、その結果を Firestore に保存します。
このチュートリアルは、Google Cloud でのバックグラウンド処理の詳細に関心をお持ちの方を対象としています。Pub/Sub、Firestore、App Engine、Cloud Functions についての経験は必須要件ではありません。ただし、すべてのコードを理解するには、.NET、JavaScript、HTML の経験があると役立ちます。
目標
- Cloud Run サービスを理解し、デプロイします。
- アプリを試してみます。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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.
-
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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
)、エラーを修正して、もう一度実行してください。ログのエラーを確認します。
Google Cloud Console で、[Cloud Run] ページに移動します。
サービス名
translate-ui
をクリックします。[ログ] をクリックします。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
Google Cloud プロジェクトを削除する
- 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 サービスの削除
このチュートリアルで作成した Cloud Run サービスを削除します。
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker
次のステップ
- Cloud Run の詳細を確認する