1. 概要
初めてウェブ アプリケーションをデプロイするのは、大変なことのように思えるかもしれません。最初のデプロイ後も、プロセスが複雑すぎると、アプリケーションの新しいバージョンのデプロイを避ける可能性があります。継続的デプロイを使用すると、アプリケーションの変更を簡単に自動的にデプロイできます。
このラボでは、ウェブ アプリケーションを作成し、アプリケーションのソースコードが変更されたときにアプリケーションを自動的にデプロイするように Cloud Run を構成します。その後、アプリケーションを変更して再度デプロイします。
学習内容
- Cloud Shell エディタでウェブ アプリケーションを作成する
- GitHub にアプリケーション コードを保存する
- アプリケーションを Cloud Run に自動的にデプロイする
- Vertex AI を使用してアプリケーションに生成 AI を追加する
2. 前提条件
- Google アカウントをお持ちでない場合は、Google アカウントを作成する必要があります。
- 仕事用または学校用アカウントではなく、個人アカウントを使用します。職場用アカウントと学校用アカウントには、このラボに必要な API を有効にできない制限が設定されている場合があります。
- GitHub アカウントをお持ちでない場合は、GitHub アカウントを作成する必要があります。
- GitHub アカウントをお持ちの場合は、そのアカウントを使用してください。GitHub では、新しいアカウントが迷惑メールとしてブロックされることがよくあります。
- GitHub アカウントで 2 要素認証を構成して、アカウントがスパムとしてマークされる可能性を減らしてください。
3. プロジェクトの設定
- Google Cloud コンソールにログインします。
- Cloud コンソールで課金を有効にします。
- このラボを完了するのにかかる Cloud リソースの費用は 1 米ドル未満です。
- このラボの最後の手順に沿ってリソースを削除すると、それ以上の料金は発生しません。
- 新規ユーザーは、300 米ドル分の無料トライアルをご利用いただけます。
- Gen AI for Devs イベントに参加しますか?1 米ドル相当のクレジットを利用できる場合があります。
- 新しいプロジェクトを作成するか、既存のプロジェクトを再利用します。
- Cloud Billing の [マイ プロジェクト] で課金が有効になっていることを確認します。
- 新しいプロジェクトの
Billing account列にBilling is disabledと表示されている場合:Actions列のその他アイコンをクリックします。- [お支払い情報を変更] をクリックします。
- 使用する請求先アカウントを選択します
- Gen AI for Devs イベントに参加している場合、アカウントの名前は Google Cloud Platform Trial Billing Account になっている可能性があります。
- 新しいプロジェクトの
4. Cloud Shell エディタを開く
- Cloud Shell エディタに移動します。
- ターミナルが画面の下部に表示されない場合は、ターミナルを開きます。
- ハンバーガー メニュー
をクリックします。 - [Terminal] をクリックします。
- [New Terminal] をクリックします。

- ハンバーガー メニュー
- ターミナルで、次のコマンドを使用してプロジェクトを設定します。
- 形式:
gcloud config set project [PROJECT_ID] - 例:
gcloud config set project lab-project-id-example - プロジェクト ID を忘れた場合:
- 次のコマンドを使用すると、すべてのプロジェクト ID を一覧表示できます。
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- 次のコマンドを使用すると、すべてのプロジェクト ID を一覧表示できます。
- 形式:
- 承認を求められたら、[承認] をクリックして続行します。

- 次のようなメッセージが表示されます。
Updated property [core/project].
WARNINGが表示され、Do you want to continue (Y/N)?と表示された場合は、プロジェクト ID が正しく入力されていない可能性があります。Nを押してEnterを押し、gcloud config set projectコマンドをもう一度実行してみてください。
5. API を有効にする
ターミナルで API を有効にします。
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com
このコマンドが完了するまで数分かかる場合がありますが、最終的には次のような成功メッセージが表示されます。
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Git を構成する
- グローバル Git ユーザーのメールを設定します。
git config --global user.email "you@example.com" - グローバル Git ユーザー名を設定します。
git config --global user.name "Your Name" - グローバル Git のデフォルト ブランチを
mainに設定します。git config --global init.defaultBranch main
7. コードを記述する
Python でアプリケーションを作成するには:
- ホーム ディレクトリに移動します。
cd ~ codelab-genaiディレクトリを作成します。mkdir codelab-genaicodelab-genaiディレクトリに移動します。cd codelab-genaimain.pyファイルを作成します。touch main.py- 依存関係のリストを含む
requirements.txtを作成します。cat > requirements.txt << EOF Flask==3.0.0 gunicorn==20.1.0 EOF - Cloud Shell エディタで
main.pyファイルを開きます。 画面の上部に空のファイルが表示されます。このcloudshell edit main.pymain.pyファイルを編集できます。
- 次のコードをコピーして、開いた
main.pyファイルに貼り付けます。 数秒後に、Cloud Shell エディタがコードを自動的に保存します。このコードは、「Hello world!」という応答メッセージで HTTP リクエストに応答します。import os from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return f"Hello world!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
アプリケーションの初期コードが完成し、バージョン管理に保存できるようになりました。
8. リポジトリを作成する
- 画面下部の Cloud Shell ターミナルに戻ります。
- 正しいディレクトリにいることを確認します。
cd ~/codelab-genai - Git リポジトリを初期化する
git init -b main - GitHub CLI にログインします。
gh auth loginEnterを押してデフォルトのオプションを承認し、GitHub CLI ツールに表示される手順に沿って操作します。手順には次のものがあります。- ログインするアカウントを選択してください。
GitHub.com - このホストでの Git オペレーションに使用するプロトコルは何ですか?
HTTPS - GitHub 認証情報を使用して Git を認証しますか?
Y(表示されない場合はスキップします)。 - GitHub CLI の認証方法を選択してください。
Login with a web browser - ワンタイム コードをコピーする
- https://github.com/login/device を開きます。
- ワンタイム コードを貼り付ける
- [Authorize github] をクリックします。
- ログインを完了する
- ログインするアカウントを選択してください。
- ログインしていることを確認します。
正常にログインできていると、GitHub ユーザー名が表示されます。gh api user -q ".login" GITHUB_USERNAME変数を作成するGITHUB_USERNAME=$(gh api user -q ".login")- 環境変数が作成されたことを確認します。
変数が正常に作成されていると、GitHub ユーザー名が表示されます。echo ${GITHUB_USERNAME} codelab-genaiという名前の空の GitHub リポジトリを作成します。 次のエラーが表示された場合:gh repo create codelab-genai --private この場合、GraphQL: Name already exists on this account (createRepository)
codelab-genaiという名前のリポジトリはすでに存在します。このチュートリアルを続行するには、次の 2 つの方法があります。- 既存の GitHub リポジトリを削除する
- 別の名前でリポジトリを作成し、次のコマンドで変更してください。
codelab-genaiリポジトリをリモートoriginとして追加します。git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
9. コードを共有する
- 正しいディレクトリにいることを確認します。
cd ~/codelab-genai - 現在のディレクトリ内のすべてのファイルをこの commit に追加します。
git add . - 最初の commit を作成します。
git commit -m "add http server" - commit を
originリポジトリのmainブランチに push します。git push -u origin main
次のコマンドを実行し、結果の URL にアクセスすると、GitHub でアプリケーション コードを表示できます。
echo -e "\n\nTo see your code, visit this URL:\n \
https://github.com/${GITHUB_USERNAME}/codelab-genai/blob/main/main.py \n\n"
10. 自動デプロイを設定する
- Cloud Shell エディタのタブは開いたままにします。このタブには後で戻ります。
- 新しいタブで、Cloud Run ページにアクセスします。
- コンソール
で正しい Google Cloud プロジェクトを選択します。 - [リポジトリを接続] をクリックします。
- [Cloud Build の設定] をクリックします。
- [リポジトリ プロバイダ] で [GitHub] を選択します。
- ブラウザで GitHub アカウントにログインしていない場合は、認証情報を使用してログインします。
- [認証]、[続行] の順にクリックします。
- ログインすると、Cloud Run ページに「GitHub アプリは、どのリポジトリにもインストールされていません。」というメッセージが表示されます。
- [Google Cloud Build をインストール] ボタンをクリックします。
- [Installation Setup] ページで、[Only select repositories] を選択し、CLI で作成した codelab-genai リポジトリを選択します。
- [インストール] をクリックします。
- 注: GitHub リポジトリが多い場合は、読み込みに数分かかることがあります。
- [リポジトリ] として
your-user-name/codelab-genaiを選択します。- リポジトリが存在しない場合は、[接続されたリポジトリを管理します] リンクをクリックします。
- [ブランチ] は
^main$のままにします。 - [Go、Node.js、Python、Java、.NET Core、Ruby、PHP(Google Cloud の Buildpacks を使用)] をクリックします。
- 他のフィールド(
Build context directory、Entrypoint、Function target)はそのままにします。
- 他のフィールド(
- [保存] をクリックします。
- [リポジトリ プロバイダ] で [GitHub] を選択します。
- [認証] まで下にスクロールします。
- [未認証の呼び出しを許可] をクリックします。
- [作成] をクリックします。
ビルドが完了したら(数分かかります)、このコマンドを実行し、結果の URL にアクセスして実行中のアプリケーションを表示します。
echo -e "\n\nOnce the build finishes, visit your live application:\n \
"$( \
gcloud run services list | \
grep codelab-genai | \
awk '/URL/{print $2}' | \
head -1 \
)" \n\n"
11. コードを変更する
Cloud Shell エディタに戻る
Cloud Shell エディタがまだ開いている場合は、これらの手順をスキップできます。
- Cloud Shell エディタに移動します。
- ターミナルが画面の下部に表示されない場合は、ターミナルを開きます。
- ハンバーガー メニュー
をクリックします。 - [Terminal] をクリックします。
- [New Terminal] をクリックします。

- ハンバーガー メニュー
- ターミナルで、次のコマンドを使用してプロジェクトを設定します。
- 形式:
gcloud config set project [PROJECT_ID] - 例:
gcloud config set project lab-project-id-example - プロジェクト ID を忘れた場合:
- 次のコマンドを使用すると、すべてのプロジェクト ID を一覧表示できます。
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- 次のコマンドを使用すると、すべてのプロジェクト ID を一覧表示できます。
- 形式:
- 承認を求められたら、[承認] をクリックして続行します。

- 次のようなメッセージが表示されます。
Updated property [core/project].
WARNINGが表示され、Do you want to continue (Y/N)?と表示された場合は、プロジェクト ID が正しく入力されていない可能性があります。Nを押してEnterを押し、gcloud config set projectコマンドをもう一度実行してみてください。
アプリケーションに Vertex AI を追加する
- 画面下部の Cloud Shell ターミナルに戻ります。
- 正しいディレクトリにいることを確認します。
cd ~/codelab-genai - 既存の依存関係に Vertex AI SDK の依存関係を追加します。
sed -i -e '$agoogle-cloud-aiplatform==1.59.0' requirements.txt - 既存の依存関係に Google 認証ライブラリを追加します。
sed -i -e '$agoogle-auth==2.32.0' requirements.txt - Cloud Shell エディタで
main.pyを再度開くcloudshell edit main.py main.pyファイルのコードを次のコードに置き換えます。import os from flask import Flask, request import google.auth import vertexai from vertexai.generative_models import GenerativeModel _, project = google.auth.default() app = Flask(__name__) @app.route("/") def hello_world(): vertexai.init(project=project, location="us-central1") model = GenerativeModel("gemini-1.5-flash") animal = request.args.get("animal", "dog") prompt = f"Give me 10 fun facts about {animal}. Return this as html without backticks." response = model.generate_content(prompt) return response.text if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
12. 再デプロイ
- Cloud Shell で正しいディレクトリにいることを確認します。
cd ~/codelab-genai - 次のコマンドを実行して、アプリケーションの新しいバージョンをローカル Git リポジトリに commit します。
git add . git commit -m "add latest changes" - 変更を GitHub に push します。
git push - ビルドが完了したら、次のコマンドを実行して、デプロイされたアプリケーションにアクセスします。
echo -e "\n\nOnce the build finishes, visit your live application:\n \ "$( \ gcloud run services list | \ grep codelab-genai | \ awk '/URL/{print $2}' | \ head -1 \ )" \n\n"
変更が反映されるまでに数分かかることがあります。
すべてのリビジョンの履歴は、https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions で確認できます。
13. (省略可)Vertex AI の使用状況を監査する
他の Google Cloud サービスと同様に、Vertex AI オペレーションを監査できます。監査ログは、「誰が、いつ、どこで何をしたか」の確認に役立ちます。Vertex AI の管理監査ログはデフォルトで有効になっています。コンテンツを生成するリクエストを監査するには、データアクセス監査ログを有効にする必要があります。
- Google Cloud コンソールで、[監査ログ] ページに移動します。
このページを検索バーで検索する場合は、小見出しが「IAM と管理」の結果を選択します。 - 既存の Google Cloud プロジェクトが、Cloud Run アプリケーションを作成するプロジェクトであることを確認します。
- [データアクセス監査ログの構成] テーブルで、[サービス] 列から
Vertex AI APIを選択します。 - [ログタイプ] タブで、データアクセス監査ログのタイプ
Admin readとData readを選択します。 - [保存] をクリックします。
有効にすると、アプリケーションの呼び出しごとに監査ログを表示できます。呼び出しの詳細を含む監査ログを表示する手順は次のとおりです。
- デプロイしたアプリケーションに戻り、ページを更新してログをトリガーします。
- Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
- クエリ ウィンドウに次のように入力します。
LOG_ID("cloudaudit.googleapis.com%2Fdata_access") protoPayload.serviceName="aiplatform.googleapis.com" - [クエリを実行] をクリックします。
監査ログは Vertex AI API の使用状況をキャプチャしますが、プロンプトやレスポンスの詳細などのワークロード関連データをモニタリングすることはできません。
14. (省略可)AI ワークロードのオブザーバビリティを高める
監査ログには、ワークロード関連の情報は記録されません。ワークロードのオブザーバビリティを高めるには、この情報を明示的にロギングする必要があります。これには、お気に入りのロギング フレームワークを使用できます。次の手順では、ネイティブの Node.js ロギング メカニズムを使用してこれを行う方法を示します。
- Cloud Shell エディタで
main.pyを再度開くcloudshell edit ~/codelab-genai/main.py import os(1 行目)の後に、次の行を追加します。 これらの行は、Python ログのデフォルトの形式を変更して、Google Cloud に取り込むことができる JSON の構造化形式に従うようにします。import sys, json, logging class JsonFormatter(logging.Formatter): def format(self, record): json_log_object = { "severity": record.levelname, "message": record.getMessage(), } json_log_object.update(getattr(record, "json_fields", {})) return json.dumps(json_log_object) logger = logging.getLogger(__name__) sh = logging.StreamHandler(sys.stdout) sh.setFormatter(JsonFormatter()) logger.addHandler(sh) logger.setLevel(logging.DEBUG)model.generate_content(prompt)を呼び出す行(34 行目)の後に、次の行を追加します。 このコードは、コンテンツ生成に関する構造化された情報をjson_fields = {"prompt": prompt, "response": response.to_dict()} logger.debug("Content is generated", extra={"json_fields": json_fields})stdoutに出力します。この情報は、ロギング エージェントによって読み取られ、Cloud Logging に取り込まれます。- Cloud Shell を再度開き、次のコマンドを入力して、正しいディレクトリにいることを確認します。
cd ~/codelab-genai - 変更を commit します。
git commit -am "observe generated content" - 変更を GitHub に push して、変更されたバージョンの再デプロイをトリガーします。
git push
新しいバージョンをデプロイすると、Vertex AI への呼び出しに関するデバッグ情報を確認できます。
アプリケーション ログを表示する手順は次のとおりです。
- Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
- クエリ ウィンドウに次のように入力します。
LOG_ID("run.googleapis.com%2Fstdout") severity=DEBUG - [クエリを実行] をクリックします。
クエリの結果には、プロンプトと Vertex AI レスポンスを含むログが表示されます。このログには、安全対策のモニタリングに使用できる「安全性評価」が含まれています。
15. (省略可)クリーンアップ
サービスが使用されていない場合、Cloud Run の料金は発生しませんが、コンテナ イメージを Artifact Registry に保存すると課金される場合があります。Cloud プロジェクトを削除して、料金が発生しないようにすることができます。Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
必要に応じて、プロジェクトを削除します。
gcloud projects delete $GOOGLE_CLOUD_PROJECT
cloudshell ディスクから不要なリソースを削除することもできます。次のことが可能です。
- Codelab プロジェクト ディレクトリを削除します。
rm -rf ~/codelab-genai - 警告: この操作は元に戻せません。Cloud Shell のすべてのデータを削除して空き容量を増やす場合は、ホーム ディレクトリ全体を削除できます。残しておきたいものはすべて別の場所に保存されていることを確認してください。
sudo rm -rf $HOME
16. 完了
このラボでは、ウェブ アプリケーションを作成し、アプリケーションのソースコードが変更されたときにアプリケーションを自動的にデプロイするように Cloud Run を構成しました。その後、アプリケーションを変更して再度デプロイしました。
このラボが気に入った場合は、別のコーディング言語またはフレームワークで再度お試しください。