始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Create a Pub/Sub topic
/ 10
Deploy the Lab Report Service: Build
/ 15
Create a Revision for Cloud Run
/ 15
Deploy the Email Service: Build
/ 15
Create a new Revision
/ 15
Create a service account
/ 10
Create a Pub/Sub subscription
/ 10
Deploy the SMS Service
/ 10
Create a Pub/Sub topic
/ 10
Deploy the Lab Report Service: Build
/ 15
Create a Revision for Cloud Run
/ 15
Deploy the Email Service: Build
/ 15
Create a new Revision
/ 15
Create a service account
/ 10
Create a Pub/Sub subscription
/ 10
Deploy the SMS Service
/ 10
「サーバーレス Cloud Run 開発」コースのラボでは、架空のビジネス シナリオを読み進めながら、登場人物のサーバーレス移行計画を進めていきます。
12 年前、リリーさんは動物病院チェーン「Pet Theory」を開業しました。その後、クリニックの数は年々増え、自動化の必要性も高まっています。Pet Theory では、検査会社から戻ってきた医療検査の結果の処理に時間がかかり、ミスも起こりやすいため、リリーさんはこの状況を改善したいと考えています。
現在、Pet Theory の IT 管理者であるパトリックさんは、検査結果を手作業で処理しています。検査結果が戻ってくるたびに、検査を受けたペットの飼い主にまずメールで結果を知らせ、その後、スマートフォンでテキスト メッセージを入力して、同じ内容を再度送っています。
パトリックさんはソフトウェア コンサルタントのルビーさんと協力し、よりスケーラブルなシステムを設計しようとしています。継続的なメンテナンスにそれほど手間がかからないソリューションを構築したいと考え、2 人はサーバーレス テクノロジーを採用することにしました。
このラボでは、次の方法について学びます。
Cloud コンソールとシェル環境に関する基本的な知識があることを前提としています。このラボは一連のラボの一部です。必須ではありませんが、事前に次のラボを受講しておくと役立ちます。
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 右側の [ラボの設定とアクセス] パネルには、以下が表示されます。
ラボのタイマーはページの上部に表示され、残り時間が示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの設定とアクセス] パネルでもユーザー名を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの設定とアクセス] パネルでもパスワードを確認できます。
[次へ] をクリックします。
その後のページはクリックして先に進みます。
しばらくすると、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
ウィンドウで次の操作を行います。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
出力:
出力:
gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
一部の Compute Engine リソースは、リージョン内やゾーン内に存在します。リージョンとは、リソースを実行できる特定の地理的なロケーションです。1 つのリージョンには 1 つ以上のゾーンがあります。
Cloud Shell で次の gcloud コマンドを実行して、ラボのデフォルトのリージョンとゾーンを設定します。
Pet Theory では、飼い主に検査結果を伝えるプロセスを自動化したいと考えています。予約件数の増加に対応するのが難しくなってきたため、リリーさんはルビーさんに協力を依頼することにしました。
|
リリーさん(Pet Theory 創業者) |
ルビーさん、お世話になっております。 先日は保険ポータルの件に対応していただき、ありがとうございました。 医療検査の結果についても何か改善できないでしょうか。飼い主さんにもっと効率よく結果を送る方法が必要なのです。 リリー |
|
ルビーさん(ソフトウェア コンサルタント) |
リリーさん、ご連絡ありがとうございます。 わかりました。現状を改善できそうなアイデアがいくつかありますので、検討したいと思います。 ルビー |
Pet Theory では、医療検査を外部の検査会社に委託しています。検査会社で医療検査が完了すると、結果が Pet Theory に返送されます。
検査会社は、HTTP(S) POST を使用して、Pet Theory のウェブ エンドポイントに検査結果を送信します。次の図は、全般的なアーキテクチャの概要を示しています。
ルビーさんは、現在のプロセス全体を確認したうえで、次の処理を行うシステムを設計できると考えました。
ルビーさんの設計では、上記の各処理を個別のサービスとして構成します。そのため、次の要素が必要になります。
ルビーさんは、用途を 1 つに絞った関数を使用することで、記述しやすく、バグの少ないコードを開発しようと考えています。
|
ルビーさん(ソフトウェア コンサルタント) |
パトリックさん、お世話になっております。 リリーさんから、検査結果の処理を支援するプロトタイプを作成したいという相談がありました。
まず、 ルビー |
|
パトリックさん(IT 管理者) |
ルビーさん、ご連絡ありがとうございます。 面白そうなプロジェクトですね。どちらも Google Cloud ですぐに設定できる作業ですので、今朝のうちに終わらせようと思います。 パトリック |
パトリックさんが new-lab-report という Pub/Sub
トピックを作成するのをお手伝いしましょう。
サービスが Pub/Sub メッセージをパブリッシュするには、そのメッセージの送信先となるトピックを指定する必要があります。ここで作成するトピックに対して、Lab Report Service は受け取った検査結果ごとにメッセージをパブリッシュします。
まず、このタスクで使用するトピックを作成します。
トピック「new-lab-report」に送られたメッセージを受信するよう設定されているサービスはすべて、Lab Report Service がパブリッシュしたメッセージを受信できます。上記の図では、そうしたメッセージを受信するサービスとして、Email Service と SMS Service の 2 つが示されています。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Pub/Sub トピックの準備ができたことをルビーさんに伝えましょう。
|
パトリックさん(IT 管理者) |
ルビーさん、お世話になっております。 作業が終わりました。 お手数でなければ、このプロトタイプをどうやって作っていくのか、私も見てみたいです。一緒に作業してもよいでしょうか。 パトリック |
|
ルビーさん(ソフトウェア コンサルタント) |
パトリックさん、ご連絡ありがとうございます。 迅速に対応していただき助かりました。時間を作りますので、一緒に作成作業を進めましょう。 ルビー |
ルビーさんが新しい Lab Report Service を設定するお手伝いをしましょう。
このサービスはプロトタイプ用であるため、行う処理は次の 2 つだけです。
lab-service ディレクトリに移動します。
これらのコマンドにより、package.json
ファイルが更新され、このサービスに必要な依存関係が示されます。
次に、Cloud Run がコードの起動方法を認識できるよう、package.json
ファイルを編集します。
package.json ファイルを開きます。
package.json ファイルの「scripts」セクションの 7
行目に、次のようにコード行
"start": "node index.js",
を追加し、ファイルを保存します。
"start": "node index.js",
そうしないと、デプロイ中にエラーが発生します。
index.js
という名前の新しいファイルを作成し、次のコードを追加します。
const labReport = req.body;
await publishPubSubMessage(labReport);
具体的には、この 2 行で次の処理を行います。
Dockerfile
という名前のファイルを作成し、次のコードを追加します。
このファイルでは、Cloud Run サービスをコンテナとしてパッケージ化する方法を定義します。
deploy.sh
という名前のファイルを作成し、次のコマンドを貼り付けます。
タイミングの問題により、このコマンドを最初に実行したときにエラーが表示される場合があります。その場合は、deploy.sh
をもう一度実行してください。
デプロイが正常に完了すると、次のようなメッセージが表示されます。
これで、Lab Report Service がデプロイされ、HTTP 経由で医療検査の結果を受信できるようになりました。次に、この新しいサービスが正しく稼働しているかをテストします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Lab Report Service を検証するために、検査会社から送信される 3 件の HTTPS POST をシミュレートします。各 POST には、1 件の検査結果が含まれています。テストで使用する検査結果データには ID のみを含めます。
post-reports.sh
という名前の新しいファイルを作成し、次のコードを追加します。
上記のスクリプトでは、curl コマンドを使用して、Lab Report Service
の URL に 3 つの異なる ID を POST
します。各コマンドはバックグラウンドで個別に実行されます。
post-reports.sh スクリプトを実行可能にします。このスクリプトにより、3 件の検査結果が Lab Report Service に POST されました。ログで結果を確認します。
Google Cloud コンソールで、ナビゲーション メニュー()> [Cloud Run] をクリックします。
新しくデプロイした lab-report-service が [サービス] リストに表示されたら、これをクリックします。
次のページに、lab-report-service の詳細が表示されます。[ログ] タブをクリックします。
[ログ] ページには、先ほどスクリプトを使用して POST した 3 件の検査結果の処理結果が表示されます。以下のように、HTTP ステータス コード 204(No Content)が返されていれば成功です。エントリが表示されない場合は、右側のスクロールバーを上下に動かしてみてください。これにより、ログが再読み込みされます。
次のタスクでは、SMS Service と Email Service を記述します。これらのサービスは、Lab Report Service が「new-lab-report」トピックに Pub/Sub メッセージをパブリッシュするとトリガーされます。
ルビーさんが新しい Email Service を設定するのをお手伝いしましょう。
上記のコマンドにより、アプリケーションとその依存関係を記述する
package.json ファイルが更新されます。Cloud Run
がコードの実行方法を認識できるように、start
スクリプトを追加します。
package.json ファイルを開きます。
「scripts」セクションに、次のように
"start": "node index.js",
の行を追加し、ファイルを保存します。
"start": "node index.js",
そうしないと、デプロイ中にエラーが発生します。
index.js
という名前の新しいファイルを作成し、次のコードを追加します。
このコードは、Pub/Sub がメッセージをサービスに POST したときに実行されます。処理内容は次のとおりです。
sendEmail()
関数の呼び出しを試みる。
サービス間の通信が正常に動作することを確認できたら、sendEmail()
関数にコードを追加し、実際にメールを送信できるようにします。
Dockerfile
という名前のファイルを作成し、次のコードを追加します。
このファイルでは、Cloud Run サービスをコンテナとしてパッケージ化する方法を定義します。
deploy.sh
という名前の新しいファイルを作成し、次のコードを追加します。
deploy.sh を実行可能にします。デプロイが完了すると、次のようなメッセージが表示されます。
サービスが正常にデプロイされました。次に、Pub/Sub メッセージを利用できるようになったときに Email Service がトリガーされるよう設定します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
「new-lab-report」トピックを使用して新しい Pub/Sub メッセージがパブリッシュされるたびに、Email Service がトリガーされるようにします。そのためには、Pub/Sub がこのサービスを自動的に呼び出せるように、サービス アカウントを構成する必要があります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
次に、「new-lab-report」メッセージがパブリッシュされたときに Email Service を呼び出すよう Pub/Sub を設定します。
次に、プロジェクトで Pub/Sub 認証トークンを作成できるようにします。
これで、Cloud Pub/Sub メッセージに応答するようにサービスを設定できました。次のステップでは、コードを検証し、要件を満たしていることを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
次に、ログを開きます(ナビゲーション メニュー > [Cloud Run])。アカウントには、email-service と lab-report-service という 2 つの Cloud Run サービスが表示されます。
[email-service] をクリックし、続いて
[ログ] をクリックします。
このサービスが Pub/Sub
によってトリガーされたことを示す結果が表示されます。想定したメッセージが表示されない場合は、スクロールバーを上下に動かしてログを更新してみてください。
お疲れさまでした。これで、Cloud Pub/Sub トピック キューからメッセージが処理されるたびに、Email Service がログに情報を書き込めるようになりました。最後のタスクでは、SMS Service を記述します。
ルビーさんが新しい SMS Service を設定するのをお手伝いしましょう。
package.json ファイルを開きます。
「scripts」セクションに、次のように
"start": "node index.js",
の行を追加し、ファイルを保存します。
"start": "node index.js",
そうしないと、デプロイ中にエラーが発生します。
index.js
という名前の新しいファイルを作成し、次のコードを追加します。
Dockerfile
という名前のファイルを作成し、次のコードを追加します。
このファイルでは、Cloud Run サービスをコンテナとしてパッケージ化する方法を定義します。コードを作成したら、次にサービスをデプロイします。
deploy.sh
という名前のファイルを作成し、次のコードを追加します。
deploy.sh を実行可能にします。デプロイが完了すると、次のようなメッセージが表示されます。
SMS Service は正常にデプロイされましたが、まだ Cloud Pub/Sub にはリンクされていません。次のセクションで、このリンクを構成します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Email Service と同様に、Cloud Pub/Sub と SMS Service の間のリンクを構成し、メッセージを受信できるようにする必要があります。
次に、「new-lab-report」メッセージがパブリッシュされたときに SMS Service を呼び出すよう Pub/Sub を設定します。
SMS_SERVICE_URL が取得されていることを確認します。
次に、Pub/Sub サブスクリプションを作成します。
次に、ログを開きます(ナビゲーション メニュー > [Cloud Run])。アカウントには、email-service、lab-report-service、sms-service という 3 つの Cloud Run サービスが表示されます。
[sms-service] をクリックし、続いて [ログ] をクリックします。このサービスが Pub/Sub によってトリガーされたことを示す結果が表示されます。
これで、プロトタイプ システムが作成され、正常にテストされました。ですが、パトリックさんは最初の検証段階で復元性がまだテストされていないことを心配しています。
いずれかのサービスが停止した場合、どうなるでしょうか。このような状況は珍しくなく、パトリックさんも以前に経験したことがあります。
システムによるこのような状況への対処方法を調査するルビーさんのお手伝いをしましょう。ルビーさんは、不具合を含むバージョンの Email Service をデプロイし、サービスで障害が発生した場合にどうなるかをテストしたいと考えています。
email-service ディレクトリに戻ります。エラーが発生するように、Email Service アプリケーションに無効なテキストを追加します。
index.js を編集して
sendEmail() 関数に
throw
の行を追加します。これにより、メールサーバーがダウンしているかのように例外がスローされます。
このコードを追加すると、サービスが呼び出されたときにクラッシュします。
Email Service のログを開き、不具合を含む Email Service のログを確認します。ナビゲーション メニュー > [Cloud Run] の順にクリックします。
アカウントに 3 つの Cloud Run サービスが表示されたら、[email-service] をクリックします。
Email Service は呼び出されていますが、クラッシュを繰り返しています。ログを少し遡ると、根本原因である「Email server is down」が見つかります。また、サービスがステータス コード 500 を返しており、Pub/Sub がサービスの呼び出しを繰り返し試行していることも確認できます。
SMS Service のログを見ると、SMS Service は正常に動作していることがわかります。
次に、Email Service のエラーを修正して、アプリケーションを復元します。
index.js ファイルを開き、先ほど追加した throw
の行を削除して、ファイルを保存します。
index.js の sendEmail 関数は、次のようになります。
検査結果 12、34、56 のメールが最終的に送信され、Email Service がステータス コード 204 を返し、Pub/Sub によるサービスの呼び出しが停止したことを確認できます。Pub/Sub は処理が成功するまで再試行を続けていたため、データは失われていません。これで堅牢なシステムの基盤ができあがりました。
ルビーさんは、あなたの支援を受けて、復元性に優れたプロトタイプ システムを構築できました。このサービスは、すべての飼い主にメールと SMS メッセージを自動的に送信できます。個別のサービスが一時的に停止した場合でも、システムには再試行メカニズムが組み込まれているため、データが失われることはありません。ルビーさんのもとに、その成果を称えるうれしいメッセージが届きました。
|
リリーさん(Pet Theory 創業者) |
ルビーさん、お世話になっております。 プロジェクトをリードして懸命に取り組んでいただき、感謝の言葉もありません。 当院の重要なシステムをあっという間に一新することができました。 金曜日にささやかな慰労会を開きますので、ぜひ主賓としてご参加ください。 リリー |
|
|
ルビーさん、お疲れ様です。 Pet Theory 様から、あなたのすばらしい仕事についてお褒めの言葉をいただきました。おかげで、チームの評価が大きく高まりました。 この業務が完了したところで、次のプロジェクトではもっと責任のある役割を任せたいと考えています。 メロディー マネージング ディレクター Computer Consulting Inc. |
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 7 月 23 日
ラボの最終テスト日: 2024 年 7 月 23 日
Copyright 2026 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください