700 以上のラボとコースにアクセス

Google Cloud でのアプリケーションの開発: アプリケーションのデプロイとメンテナンス

ラボ 1時間 30分 universal_currency_alt クレジット: 5 show_chart 中級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

Artifact Registry は、パッケージと Docker コンテナ イメージを一か所でまとめて保管、管理するための場所です。

Cloud Build は、Google Cloud でビルドを実行するサービスです。

Cloud Run は、Google のスケーラブルなインフラストラクチャ上でコンテナを実行できるマネージド コンピューティング プラットフォームです。

Google Cloud Observability は、アプリケーション向けのモニタリング、ロギング、トレースの統合マネージド サービスを提供します。

Cloud クライアント ライブラリは、アプリケーションから Google Cloud API を呼び出すための推奨される方法です。Cloud クライアント ライブラリでは、アプリケーションで使用しているプログラミング言語の自然な規則やスタイルを使用します。サーバーとの低レイヤの通信(認証や再試行ロジックなど)が処理されます。

Google API では、認証および承認に OAuth 2.0 プロトコルを使用しています。

Secret Manager を使用すると、API キー、パスワード、証明書、その他の機密データをバイナリ blob またはテキスト文字列として保存できます。

このラボでは、Cloud Shell で Python アプリケーションを実行してから、そのアプリケーションを Cloud Run にデプロイします。また、Cloud Run へのアプリケーション移行時に発生する問題に対処し、Google Cloud オペレーション スイートのアプリケーション開発機能を確認します。

学習内容

このラボでは、次のタスクの実行方法を学びます。

  • Python ウェブ アプリケーションをコンテナ化して Artifact Registry に公開する。
  • コンテナ化したアプリケーションを Cloud Run にデプロイする。
  • ログを使用してアプリケーションの問題をデバッグする。
  • アプリケーションに Error Reporting を追加する。

設定と要件

[ラボを開始] ボタンをクリックする前に

注: 以下の説明をお読みください。

ラボの時間は計測されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

この Qwiklabs ハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

必要なもの

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
  • ラボを完了するために十分な時間
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。 注: Pixelbook を使用している場合は、このラボをシークレット ウィンドウで実施してください。

ラボを開始してコンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側のパネルには、このラボで使用する必要がある一時的な認証情報が表示されます。

    [認証情報] パネル

  2. ユーザー名をコピーし、[Google Console を開く] をクリックします。 ラボでリソースが起動し、別のタブで [アカウントの選択] ページが表示されます。

    注: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
  3. [アカウントの選択] ページで [別のアカウントを使用] をクリックします。[ログイン] ページが開きます。

    [別のアカウントを使用] オプションがハイライト表示されている、アカウントのダイアログ ボックスを選択します。

  4. [接続の詳細] パネルでコピーしたユーザー名を貼り付けます。パスワードもコピーして貼り付けます。

注: 認証情報は [接続の詳細] パネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。請求が発生する事態を避けるため、Google Cloud アカウントをお持ちの場合でも、このラボでは使用しないでください。
  1. その後次のように進みます。
  • 利用規約に同意してください。
  • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
  • 無料トライアルには登録しないでください。

しばらくすると、このタブで Cloud コンソールが開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 Cloud コンソール メニュー

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

    ハイライト表示された Cloud Shell アイコン

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

Cloud Shell ターミナルでハイライト表示されたプロジェクト ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  • 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list

出力:

Credentialed accounts: - @.com (active)

出力例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project =

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: gcloud ドキュメントの全文については、 gcloud CLI の概要ガイド をご覧ください。

タスク 1. Python アプリケーションと必要なリソースを設定する

このタスクでは、Python アプリケーションをダウンロードして、現在のバージョンのアプリで使用されるリソースを作成します。

注: ほとんどの言語では、コードを読みやすくするためにインデントが使用されます。Python ではインデントを使用してコードのブロックを示すため、インデントが正確でなければなりません。インデントに使用するスペースの数は、一貫している必要があります。インデントにスペースとタブを混在させると、問題が発生する可能性があります。このラボでは、Python のインデントに 4 つのスペースを使用します。

Firestore データベースを作成する

  1. Firestore データベースを作成するには、Cloud Shell で次のコマンドを実行します。

    gcloud firestore databases create --location={{{ project_0.default_region | region }}}

    Firestore データベースは、書籍とユーザー プロファイル データを保存するために使用されます。

  2. Cloud Shell を承認するように求められたら、[承認] をクリックします。

適切な権限で Cloud Storage バケットを作成する

  1. Cloud Storage バケットを作成するには、次のコマンドを実行します。

    gcloud storage buckets create gs://${GOOGLE_CLOUD_PROJECT}-covers --location={{{ project_0.default_region | region }}} --no-public-access-prevention --uniform-bucket-level-access

    Cloud Storage バケットは、書籍の表紙画像を保存するために使用されます。このバケットには均一なバケットレベルのアクセスがあり、公開アクセスの防止を使用していません。

    注: コマンドが失敗し、アカウントに有効な認証情報がないことを示すエラーが表示された場合は、コマンドを再度実行してみてください。Qwiklabs の学生アカウントの権限がまだ反映されていない可能性があります。
  2. バケット内のすべてのオブジェクトを公開して読み取り可能にするには、次のコマンドを実行します。

    gcloud storage buckets add-iam-policy-binding gs://${GOOGLE_CLOUD_PROJECT}-covers --member=allUsers --role=roles/storage.legacyObjectReader

OAuth 同意画面を作成する

認証に OAuth 2.0 を使用する場合、アプリでは Google アカウントから 1 つ以上のアクセス スコープがリクエストされます。Google が同意画面を表示して、アプリケーションとデータを共有することに対するユーザーの同意を得ます。

  1. Google Cloud コンソールで、ナビゲーション メニューナビゲーション メニュー アイコン)を選択し、[API とサービス] > [OAuth 同意画面] を選択します。

  2. [開始] をクリックします。

  3. [アプリ名] に「Bookshelf」と入力します。

  4. [ユーザー サポートメール] で、受講者のメールアドレスを選択します。

  5. [次へ] をクリックします。

  6. [対象] で [内部] を選択し、[次へ] をクリックします。

    プロジェクトへのアクセス権を持つユーザーが、アプリにログインできるようになります。

  7. ラボの手順の左側にあるパネルで、[ユーザー名] の値をコピーします。

    ユーザー名をコピーする

  8. [メールアドレス] では、コピーしたユーザー名を貼り付けて、[次へ] をクリックします。

  9. ユーザーデータに関するポリシーに同意するチェックボックスをオンにして、[続行] をクリックします。

  10. [作成] をクリックします。

  11. ナビゲーション メニューで、[ブランディング] をクリックします。

  12. [+ ドメインの追加] をクリックします。

  13. [承認済みドメイン] セクションで、[承認済みドメイン 1] に「cloudshell.dev」と入力します。

  14. [保存] をクリックします。

  15. ナビゲーション メニューで [データアクセス] をクリックします。

  16. [スコープを追加または削除] をクリックします。

  17. リストの先頭で、openid の横にあるチェックボックスをオンにします。

  18. [フィルタ] に「userinfo.profile」と入力して Enter キーを押してから、[.../auth/userinfo.profile] スコープの横にあるチェックボックスをオンにします。

  19. [フィルタ] の「userinfo.profile」フィルタをクリアし、「contacts」と入力して Enter キーを押します。次に、[.../auth/contacts] スコープのチェックボックスをオンにします。

  20. [更新] をクリックします。

    非機密のスコープが 2 つ(openid と userinfo.profile)と、機密性の高いスコープが 1 つ(contacts)表示されます。

  21. [保存] をクリックします。

OAuth 2.0 認証情報を作成する

  1. ナビゲーション メニューで [クライアント]、[+ クライアントを作成] の順にクリックします。

  2. [アプリケーションの種類] で [ウェブ アプリケーション] を選択します。

  3. [名前] に「Bookshelf」と入力します。

  4. [承認済みのリダイレクト URI] で [+ URI を追加] をクリックします。

    ここに指定した URI は、ユーザーの同意を取得した後に Google がブラウザをアプリケーションにリダイレクトする際に使用されます。

  5. リダイレクト URI を取得するには、Cloud Shell で次のコマンドを実行します。

    echo "https://8080-${WEB_HOST}/oauth2callback"
  6. echo コマンドで作成した URI をコピーし、[URIs 1] に貼り付けます。

  7. [作成] をクリックします。

  8. [JSON をダウンロード] をクリックし、クライアント シークレット JSON をローカルマシンに保存します。

    クライアント シークレット ファイルは、Google でアプリを検証するために使用されます。

  9. [OK] をクリックします。

  10. Cloud Shell で、右上のツールバーの [さらに表示](その他アイコン)をクリックし、[アップロード] をクリックします。

  11. [ファイル選択] をクリックし、クライアント シークレット JSON ファイルを選択して、[開く] をクリックします。

  12. [アップロード] をクリックします。

    これで、クライアント シークレット JSON ファイルをホーム ディレクトリで使用できるようになりました。このファイルの内容は、OAuth プロセスで使用されます。

クライアント シークレット JSON を Secret Manager に保存する

クライアント シークレット JSON ファイルの保存先として、安全な Secret Manager を使用することをおすすめします。

  1. Secret Manager API を有効にするには、Cloud Shell で次のコマンドを実行します。

    gcloud services enable secretmanager.googleapis.com
  2. クライアント シークレット ファイルの名前を変更するには、次のコマンドを実行します。

    mv ~/client_secret*.json ~/client_secret.json
  3. シークレットを作成するには、次のコマンドを実行します。

    gcloud secrets create bookshelf-client-secrets --data-file=$HOME/client_secret.json

    これで、アプリケーションからアクセスできる bookshelf-client-secrets という名前のシークレットが作成されました。

  4. Flask 秘密鍵のシークレットを作成するには、次のコマンドを実行します。

    tr -dc A-Za-z0-9 </dev/urandom | head -c 20 | gcloud secrets create flask-secret-key --data-file=-

    このコマンドにより、20 文字のランダムな英数字のパスワードが作成され、flask-secret-key という名前のシークレットに保存されます。

Python コードを Cloud Shell にコピーする

  1. Cloud Storage バケットからホーム ディレクトリに Python コードをコピーするには、次のコマンドを実行します。

    gcloud storage cp gs://cloud-training/devapps-foundations/code/lab3/bookshelf.zip ~ && unzip ~/bookshelf.zip -d ~ && rm ~/bookshelf.zip
  2. bookshelf ディレクトリの内容を確認するには、次のコマンドを実行します。

    cd ~ ls -R bookshelf

    7 個の Python ファイル、1 個の要件ファイル、6 個のテンプレート ファイルを含むリストが表示されます。

    bookshelf: booksdb.py main.py oauth.py profiledb.py requirements.txt secrets.py storage.py templates translate.py bookshelf/templates: base.html error.html form.html list.html profile.html view.html

必要な依存関係をインストールする

  1. 要件ファイル内の依存関係を表示するには、次のコマンドを実行します。

    cat ~/bookshelf/requirements.txt

    要件ファイルでは、次の依存関係を指定します。

    • Flask: Python ウェブ アプリケーションの設計に使用されるウェブ フレームワーク モジュール
    • Gunicorn: Linux で動作する Python HTTP サーバー
    • Cloud Logging: アプリケーションからの情報の記録に使用
    • Firestore: アプリケーション開発のしやすさを念頭に置いて設計された、高速、フルマネージド、かつサーバーレスの NoSQL ドキュメント データベース
    • Cloud Storage: Google Cloud の統合オブジェクト ストレージ
    • Secret Manager: 機密データ用の安全なストレージ
    • Google の OAuth 2.0 サポート: Google API の認証と認可
    • Cloud Translation API: テキストの言語を検出し、他の言語に翻訳する API
  2. 要件ファイル内の依存関係をインストールするには、次のコマンドを実行します。

    pip3 install -r ~/bookshelf/requirements.txt --user

    pip は Python 用のパッケージ インストーラです。この pip3 コマンドは、Python バージョン 3 で使用するために requirements.txt ファイルで指定されたパッケージをインストールします。

アプリケーションをテストする

  1. HTTP サーバーを起動するには、次のコマンドを実行します。

    cd ~/bookshelf; EXTERNAL_HOST_URL="https://8080-${WEB_HOST}" ~/.local/bin/gunicorn -b :8080 main:app

    次の環境変数がアプリケーションに渡されます。

    • EXTERNAL_HOST_URL: コールバック URL で使用する必要があるスキームとホスト名を指定します。

    これで、アプリケーションがポート 8080 でホストされるようになりました。

  2. ウェブブラウザでアプリケーションを実行するには、[ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。

    ポート 8080 でのウェブ プレビュー

    ブラウザで新しいタブが開き、アプリケーションが実行されます。このページには、既存のすべての書籍のリストが表示されます。まだ書籍はありません。

    注: Cloud Shell を承認するよう求められたら、[承認] をクリックします。
  3. この「オズの魔法使い」の書籍の表紙画像を右クリックし、oz.png という名前でパソコンに保存します。

    Wizard of Oz の書籍の表紙

  4. [+ Add book] をクリックします。

    書籍を追加するにはログインする必要があるため、Google でログインするためのアカウントを選択するよう求められます。

    アカウントの選択

  5. 受講者のメールアドレスをクリックし、[続行] をクリックします。

  6. [許可] をクリックします。

  7. フォームに次の情報を入力します。

    フィールド
    タイトル オズの魔法使い
    著者 Frank L. Baum
    出版日 1900
    Description(説明) There's no place like home!
  8. [Cover Image] で [Choose File] をクリックします。

  9. ダウンロードしたファイル(oz.png)を選択し、[開く] をクリックします。

  10. [Save] をクリックします。

    表示ページに戻ります。書籍の詳細が表示されています。書籍の詳細は Firestore データベースに保存され、表紙画像は Cloud Storage に保存されます。

  11. メールアドレスをクリックします。

    プロファイルが表示されます。言語選択コントロールには「English」と表示されています。

  12. [Preferred Language] を [Spanish] に変更し、[Save] をクリックします。

  13. 書籍『Wonderful Wizard of Oz』をクリックします。

    表示ページに、元からあった英語の説明と、スペイン語の翻訳の両方が表示されます。

  14. Cloud Shell でアプリケーションを終了するには、Ctrl+C キーを押します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Python アプリケーションと必要なリソースを設定する。

タスク 2. アプリケーションをコンテナ化して Artifact Registry に公開する

このタスクでは、Cloud Build を使用してアプリケーションをコンテナ化し、Artifact Registry に公開します。

リポジトリを作成する

  1. Artifact Registry リポジトリを作成するには、Cloud Shell で次のコマンドを実行します。

    gcloud artifacts repositories create app-repo \ --repository-format=docker \ --location={{{ project_0.default_region | region }}}

    このリポジトリにアプリケーション コンテナが保存されます。

  2. リポジトリの詳細を表示するには、次のコマンドを実行します。

    gcloud artifacts repositories describe app-repo \ --location={{{ project_0.default_region | region }}}

アプリケーションをビルド、コンテナ化、公開する

独自の Dockerfile を作成してアプリケーションを Docker イメージにパッケージ化することもできますが、Cloud Build を利用すれば buildpacks を使用してコンテナを自動的にビルドできます。

  1. Cloud Build を使用してアプリケーションをビルドするには、次のコマンドを実行します。

    gcloud builds submit \ --pack image={{{ project_0.default_region | region }}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/app-repo/bookshelf \ ~/bookshelf 注: 権限が拒否されたことを示すエラーが表示された場合は、Cloud Build に必要な権限がまだ反映されていない可能性があります。権限が反映されてビルドが完了するまで、コマンドを再試行してください。これには数分かかる場合があります。

    このコマンドによって、~/bookshelf ディレクトリにあるコードの Docker イメージがビルドされ、Artifact Registry の app-repo リポジトリに保存されます。

  2. ビルドのリストを表示するには、次のコマンドを実行します。

    gcloud builds list

    bookshelf ビルドがリスト表示されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 アプリケーションをコンテナ化して Artifact Registry に公開する。

タスク 3. Cloud Run にアプリをデプロイしてテストする

このタスクでは、Cloud Run にアプリケーションをデプロイしてテストします。

Cloud Run にアプリをデプロイする

  1. Cloud Run にアプリケーションをデプロイするには、次のコマンドを実行します。

    gcloud run deploy bookshelf \ --image={{{ project_0.default_region | region }}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/app-repo/bookshelf \ --region={{{ project_0.default_region | region }}} --allow-unauthenticated \ --update-env-vars=GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT} 注: EXTERNAL_HOST_URL 環境変数は、これ以降は必要ありません。
  2. API を有効にするかどうかを確認するメッセージが表示されたら、「y」と入力します。

    このコマンドによって、先ほどビルドしたイメージが Cloud Run にデプロイされます。ユーザー ログインが必要なのは書籍を作成、変更、削除するときのみであるため、未認証の呼び出しを許可するように指定します。GOOGLE_CLOUD_PROJECT 環境変数をアプリケーションに指定しているのは、Cloud Run にデフォルトで用意されていないためです。

    Cloud Run によってアプリケーションがデプロイされます。

    注: run.googleapis.com にアクセスできないというエラーが表示された場合は、API の有効化が Cloud Run にまだ反映されていない可能性があります。成功するまで Cloud Run コマンドを繰り返し実行します。
  3. アプリケーションの URL を取得するには、次のコマンドを実行します。

    echo "https://bookshelf-$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)").{{{ project_0.default_region | region }}}.run.app"
  4. 前のコマンドによって作成されたリンクをクリックします。

    新しいタブが開き、「サービスを利用できません」というメッセージ(または別のエラー)が表示されます。

    アプリケーションが正しく動作していないため、原因を突き止める必要があります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Run にアプリをデプロイする。

タスク 4. 問題を特定してアプリケーションを修正する

このタスクでは、ログを使用して問題を修正します。

ログを使用して問題を特定する

アプリケーションで問題が発生した場合、Cloud Logging のログが問題の解決に役立つことがよくあります。

  1. Google Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[Cloud Run] を選択します。

  2. [bookshelf] をクリックし、[ログ] タブをクリックします。

    これらのログは Cloud Run 上の Bookshelf アプリケーションに固有のものです。ログを調べると、secretmanager.versions.access に対して permission denied エラーが記録されているはずです。

    アプリが Cloud Shell で実行されているときは、ログイン ユーザーの認証情報が使用されます。受講者ユーザー アカウントは、Secret Manager の項目にアクセスし、Cloud Storage にファイルを書き込み、Translation API を呼び出すことができます。

    一方で Cloud Run アプリケーションは、サービス アカウントを指定しない限り Compute Engine のデフォルトのサービス アカウントを使用します。このデフォルトのサービス アカウントには、上記の権限がありません。

    ベストプラクティスとして、アプリケーション固有のサービス アカウントを作成して関連付け、そのサービス アカウントに適切な権限を付与します。

サービス アカウントを作成して再デプロイする

  1. アプリケーションのサービス アカウントを作成するには、Cloud Shell で次のコマンドを実行します。

    gcloud iam service-accounts create bookshelf-run-sa

    まだ権限は追加していません。追加する適切なロールを判断するには、IAM の基本ロールと事前定義ロールのリファレンスをご覧ください。Secret Manager のロールには、シークレットにアクセスするための最小限の権限を付与する Secret Manager のシークレット アクセサー ロールが含まれます。

    注: アプリケーションが適切に動作するまで繰り返し試すことで、追加する権限を判断できます。このラボでは、繰り返し試すプロセスは踏まず、必要な権限をサービス アカウントに付与します。
  2. 必要なロールを追加するには、次のコマンドを実行します。

    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudtranslate.user" gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/datastore.user" gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/storage.objectUser"

    Secret Manager、Cloud Translation API、Firestore、Cloud Storage 用の権限を追加しました。

    実行中のアプリケーションによって権限が取得されるまでに、数分ほどかかります。この遅延を回避するには、アプリを再デプロイします。

  3. サービス アカウントとともにアプリケーションを再デプロイするには、次のコマンドを実行します。

    gcloud run deploy bookshelf \ --image={{{ project_0.default_region | region }}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/app-repo/bookshelf \ --region={{{ project_0.default_region | region }}} --allow-unauthenticated \ --update-env-vars=GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT} \ --service-account=bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
  4. アプリケーションを開くには、次のコマンドを実行した後にリンクをクリックします。

    echo "https://bookshelf-$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)").{{{ project_0.default_region | region }}}.run.app"

    このときエラーが表示される場合があり、原因はサービス アカウントの権限がまだ反映されていないことです。

    Cloud Run サービスの Bookshelf のログを見ると、権限がないか不十分である可能性があることを示すエラーが記録されています。権限が反映され、サービス アカウントが、必要な Google Cloud サービスを呼び出せるようになるまでの間は、アプリでエラーが発生します。

  5. アプリが開くようになるまで、アプリケーションのタブを閉じて生成された URL をクリックする操作を繰り返します。

    権限が反映されると、以前と同様の [Books] ページが表示されます。

OAuth をテストして修正する

  1. アプリケーションで [Login] をクリックします。

    ログインに失敗します。

    エラー メッセージを確認すると、アクセスがブロックされたこと、アプリから無効なリクエストが送信されたこと、エラー内容がリダイレクト URI の不一致であることがわかります。このエラーの原因は、OAuth 構成が Cloud Run サービス URL 向けになっておらず、cloudshell.dev での実行用に設定されていることです。

  2. Google Cloud コンソールでナビゲーション メニューナビゲーション メニュー アイコン)から [API とサービス] > [OAuth 同意画面] を選択し、[ブランディング] を選択します。

  3. [+ ドメインの追加] をクリックします。

  4. Cloud Shell で、次のコマンドを実行します。

    echo "bookshelf-$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)").{{{ project_0.default_region | region }}}.run.app"

    このコマンドによって、https:// のないアプリケーションの URL が構築されます。

  5. ドメイン名をクリップボードにコピーし、[承認済みドメイン 2] に貼り付けます。

  6. [保存] をクリックします。

  7. ナビゲーション メニューで [クライアント] を選択します。

  8. [OAuth 2.0 クライアント ID] で [Bookshelf] をクリックします。

  9. [承認済みのリダイレクト URI] で [+ URI を追加] をクリックします。

  10. リダイレクト URI を取得するには、Cloud Shell で次のコマンドを実行します。

    echo "https://bookshelf-$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)").{{{ project_0.default_region | region }}}.run.app/oauth2callback"
  11. echo コマンドで作成された URI をコピーし、[URI 2] に貼り付けます。

  12. [保存] をクリックします。

    シークレットはアプリケーションに対して 1 回だけ読み込まれるため、アプリケーションを再デプロイする必要があります。

  13. 修正を有効にするには、次のコマンドを使用してアプリを再デプロイします。

    gcloud run deploy bookshelf \ --image={{{ project_0.default_region | region }}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/app-repo/bookshelf \ --region={{{ project_0.default_region | region }}} --allow-unauthenticated \ --update-env-vars=GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT} \ --service-account=bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
  14. アプリケーションがデプロイされたら、次のコマンドを実行し、生成された URL をクリックします。

    echo "https://bookshelf-$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)").{{{ project_0.default_region | region }}}.run.app"

    アプリケーションが稼働しています。

  15. アプリケーションで [Login] をクリックし、同意してユーザーをログインさせます。

    メールアドレスがリンクになりました。

  16. メールアドレスをクリックします。

    使用する言語は引き続きスペイン語です。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 アプリケーションを修正する。

タスク 5. Google Cloud Observability の機能を確認する

このタスクでは、アプリケーションの健全性の維持に役立つ Google Cloud Observability の機能の一部を見ていきます。

アプリケーションに Error Reporting を追加する

Error Reporting は、実行中のクラウド サービスで発生したエラーをまとめます。

  1. サービス アカウントに必要なロールを追加するには、Cloud Shell で次のコマンドを実行します。

    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/errorreporting.writer"
  2. Cloud Shell のファイル エディタで ~/bookshelf/requirements.txt ファイルを開きます。

  3. 次の行を追加します。

    google-cloud-error-reporting==1.12.0

    requirements.txt ファイルは次のようになります。

    Flask==3.1.1 gunicorn==23.0.0 google-cloud-logging==3.12.1 google-cloud-firestore==2.21.0 google-cloud-storage==2.17.0 google-cloud-secret-manager==2.24.0 google-api-python-client==2.178.0 google-auth==2.40.3 google-auth-oauthlib==1.2.2 google-cloud-translate==3.21.1 google-cloud-error-reporting==1.12.0
  4. ファイルを保存します。

  5. 更新された依存関係をインストールするには、次のコマンドを実行します。

    pip3 install -r ~/bookshelf/requirements.txt --user
  6. ファイル エディタで、ファイル ~/bookshelf/main.py を開きます。

  7. cloud_logging インポート ステートメントの下の行に、次のコードを追加します。

    from google.cloud import error_reporting
  8. /profile エンドポイントの末尾に、次のコードを追加します。

    @app.route('/raiseerror') def raise_error(): """ 手動でエラーを発生させます。 """ log_request(request) print('raise_error()') error_client = error_reporting.Client() error_message = 'Intentionally Created Error' error_client.report( message=error_message, http_context=error_reporting.build_flask_context(request), ) session['error_message'] = f"{error_message}" return redirect(url_for('.error'))

    /raiseerror エンドポイントを呼び出すとエラーがシミュレートされます。Error Reporting にエラーが送信され、エラーページにリダイレクトされます。

  9. ファイルを保存します。

  10. アプリケーションをビルドして再デプロイするには、次のコマンドを実行します。

    gcloud builds submit \ --pack image={{{ project_0.default_region | region }}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/app-repo/bookshelf \ ~/bookshelf gcloud run deploy bookshelf \ --image={{{ project_0.default_region | region }}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/app-repo/bookshelf \ --region={{{ project_0.default_region | region }}} --allow-unauthenticated \ --update-env-vars=GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT} \ --service-account=bookshelf-run-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
  11. アプリケーションがデプロイされたら、次のコマンドを実行し、生成された URL をクリックします。

    echo "https://bookshelf-$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)").{{{ project_0.default_region | region }}}.run.app"
  12. URL の末尾に「/raiseerror」を追加して Enter キーを押します。

    アプリケーションのエラー ページにリダイレクトされ、Intentionally Created Error エラーが表示されます。

  13. URL 内の errorraiseerror に置き換えてから Enter キーを押します。

    アプリケーションのエラー ページに再度リダイレクトされます。これらのエラーについては後ほど確認します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 アプリケーションに Error Reporting を追加する。

Cloud Run サービスの詳細ページを確認する

Cloud Run サービスの詳細ページには、サービスの管理に役立つダッシュボードが組み込まれています。

  1. Google Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[Cloud Run] を選択します。

  2. [bookshelf] をクリックします。

    [指標] タブが表示されます。

  3. [過去 1 日] をクリックしてから [過去 1 時間] を選択します。

    [指標] タブには、過去 1 時間に行われたサービス呼び出しのリストと、自動的に収集された指標のグラフが表示されます。

  4. [ログ] タブをクリックします。

    このタブでは、Cloud Run サービスのすべてのログを確認できます。

Cloud Logging を確認する

  1. Google Cloud コンソールのタイトルバーにある検索フィールドに「Logging」と入力して [検索] をクリックし、「Logging」という項目をクリックします。

    表示されるページからすべてのログにアクセスできます。

  2. [すべてのリソース] プルダウン メニューから [Cloud Run のリビジョン] を選択し、[適用] をクリックします。

    Cloud Run のログすべてがここに表示されます。サービス名またはリビジョン名でフィルタできます。

  3. [重大度] で [エラー] をクリックします。

    アプリケーションで発生したエラーがここに表示されます。アプリケーションやサービスが複数ある場合、このビューでは、さまざまなエラーの発生場所を区別することが難しくなります。

Error Reporting を確認する

  1. Google Cloud コンソールのタイトルバーにある検索フィールドに「Error Reporting」と入力して [検索] をクリックし、「Error Reporting」という項目をクリックします。

    このページではエラーがグループ化されています。多くのエラーは、Cloud Run の Python アプリケーションがクラッシュしたときに自動的に作成されたものです。手動で発生させたエラーも表示されます。

  2. [1 時間] をクリックします。

  3. [Intentionally Created Error] をクリックします。

    類似するエラーがまとめて表示されます。エラーがグループ化されていると、問題をデバッグしやすくなります。

  4. サンプルのいずれかで、[ログを表示] をクリックします。

    Cloud Logging に戻り、このログエントリが表示されます。ログに記録された 1 つのエラーを固定し、同じ時間帯に発生したログを調べることができます。

    注: 実際のアプリケーションでは、発生した問題を追跡するために役立ちそうなエラーや情報をログに記録するようにしてください。

お疲れさまでした

アプリケーションをコンテナ化して Cloud Run にデプロイし、発生した問題をデバッグできました。また、サービス アカウントに必要なロールを付与し、ローカルと Cloud Run のデプロイの両方をサポートするように OAuth 構成を更新しました。さらに、アプリケーションに Error Reporting を追加し、Google Cloud Observability のアプリケーション開発機能を確認しました。

次のステップと詳細情報

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。