1. 概要
初めてウェブ アプリケーションをデプロイするのは大変なことのように思えるかもしれませんが、最初のデプロイ後も、プロセスが負担が大きすぎる場合は、アプリケーションの新しいバージョンをデプロイしない可能性があります。継続的デプロイを使用すると、アプリケーションの変更を簡単に自動的にデプロイできます。
このラボでは、ウェブ アプリケーションを作成し、アプリケーションのソースコードが変更されたときにアプリケーションを自動的にデプロイするように Cloud Run を構成します。次に、アプリケーションを変更して再デプロイします。
学習内容
- Cloud Shell エディタでウェブ アプリケーションを作成する
- アプリケーション コードを GitHub に保存する
- アプリケーションを Cloud Run に自動的にデプロイする
- Genkit を使用して生成 AI をアプリケーションに追加する
- dotprompt ライブラリを使用して LLM プロンプトを管理する
2. 前提条件
- Google アカウントをお持ちでない場合は、Google アカウントを作成する必要があります。
- 仕事用または学校用アカウントではなく、個人アカウントを使用している。職場用アカウントや学校用アカウントには、このラボに必要な API を有効にできない制限が適用されている場合があります。
- GitHub アカウントがまだない場合は、GitHub アカウントを作成する必要があります。
- 既存の GitHub アカウントがある場合は、そのアカウントを使用します。GitHub では、新しいアカウントがスパムとしてブロックされる可能性が高くなります。
- アカウントがスパムと見なされる可能性を減らすため、GitHub アカウントで 2 要素認証を設定します。
3. プロジェクトの設定
- Google Cloud コンソールにログインします。
- Cloud コンソールで課金を有効にする。
- このラボを完了しても、Cloud リソースの費用は 1 米ドル未満です。
- このラボの最後にある手順に沿ってリソースを削除すると、それ以上の請求が発生しなくなります。
- 新規ユーザーは、300 米ドル分の無料トライアルをご利用いただけます。
- 生成 AI for Devs イベントに参加する予定ですか?1 米ドル分のクレジットが提供される場合があります。
- 新しいプロジェクトを作成するか、既存のプロジェクトを再利用するかを選択します。
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. コードを記述する
Node.js でアプリケーションを作成するには:
- ホーム ディレクトリに移動します。
cd ~
codelab-genai
ディレクトリを作成します。mkdir codelab-genai
codelab-genai
ディレクトリに移動します。cd codelab-genai
index.js
ファイルを作成します。touch index.js
package.json
ファイルを作成します。npm init es6 -y
express
を依存関係として追加するnpm install express
node_modules
の commit を防ぐために.gitignore
ファイルを追加echo node_modules/ >> .gitignore
- Cloud Shell エディタで
index.js
ファイルを開きます。
画面の上部に空のファイルが表示されます。このcloudshell edit index.js
index.js
ファイルを編集できます。 - 次のコードをコピーして、開いた
index.js
ファイルに貼り付けます。
数秒後、Cloud Shell エディタによってコードが自動的に保存されます。このコードは、http リクエストに「Hello world!」という応答メッセージで応答します。import express from 'express'; const app = express(); app.get('/', async (req, res) => { res.send('Hello world!'); }); const port = process.env.PORT || 8080; app.listen(port, () => { console.log(`codelab-genai: listening on port ${port}`); });
アプリケーションの初期コードが完成し、バージョン管理に保存できるようになりました。
8. リポジトリを作成する
- 画面の下部にある Cloud Shell ターミナルに戻ります。
- 正しいディレクトリにいることを確認します。
cd ~/codelab-genai
- Git リポジトリを初期化する
git init -b main
- GitHub CLI にログインします。
gh auth login
Enter
を押してデフォルト オプションを受け入れ、GitHub CLI ツールの手順に沿って操作します。手順には次のものがあります。- ログインするアカウントを選択してください。
GitHub.com
- このホストでの Git オペレーションに使用するプロトコルは何ですか。
HTTPS
- GitHub 認証情報で Git を認証しますか?
Y
(この項目が表示されない場合はスキップします)。 - GitHub CLI の認証方法を選択してください。
Login with a web browser
- ワンタイム コードをコピーする
- https://github.com/login/device を開きます。
- 1 回限りのコード
- [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/index.js \n\n"
10. 自動デプロイを設定する
- Cloud Shell エディタのタブを開いたままにします。このタブについては後で説明します。
- 新しいタブで Cloud Run ページにアクセスします。
- コンソールで正しい Google Cloud プロジェクトを選択します。
- [CONNECT REPO] をクリックします。
- [SET UP WITH CLOUD BUILD] をクリックします。
- [リポジトリ プロバイダ] で [GitHub] を選択します。
- ブラウザで GitHub アカウントにログインしていない場合は、認証情報を使用してログインします。
- [認証]、[続行] の順にクリックします。
- ログインすると、Cloud Run ページに「GitHub アプリは、どのリポジトリにもインストールされていません。」というメッセージが表示されます。
- [INSTALL GOOGLE CLOUD BUILD] ボタンをクリックします。
- [インストールの設定] ページで [Only select repositories] を選択し、CLI で作成した codelab-genai リポジトリを選択します。
- [インストール] をクリックします。
- 注: GitHub リポジトリが多い場合は、読み込みに数分かかることがあります。
- [リポジトリ] として
your-user-name/codelab-genai
を選択します。- リポジトリがない場合は、[接続されたリポジトリを管理します] リンクをクリックします。
- [ブランチ] は
^main$
のままにします。 - [Go、Node.js、Python、Java、.NET Core、Ruby、PHP(Google Cloud の Buildpack を使用)] をクリックします。
- 他のフィールド(
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
- Node.js Genkit SDK をインストールします。
npm install @genkit-ai/ai
- Vertex AI 用の Node.js Genkit SDK をインストールします。
npm install @genkit-ai/vertexai
- Node.js Google Auth SDK をインストールします。
npm install google-auth-library
- Cloud Shell エディタで
index.js
を再度開きます。cloudshell edit ~/codelab-genai/index.js
index.js
ファイル内のコードを次のコードに置き換えます。import express from 'express'; const app = express(); import { generate } from '@genkit-ai/ai'; import { gemini15Flash, vertexAI } from '@genkit-ai/vertexai'; import { GoogleAuth } from 'google-auth-library'; const auth = new GoogleAuth(); app.get('/', async (req, res) => { const project = await auth.getProjectId(); const animal = req.query.animal || 'dog'; const prompt = `Give me 10 fun facts about ${animal}. Return this as html without backticks.` const result = await generate({ plugins: [ vertexAI({ projectId: project, location: 'us-central1' }), ], model: gemini15Flash, prompt, }); const html = result.text; res.send(html); }); const port = process.env.PORT || 8080; app.listen(port, () => { console.log(`codelab-genai: listening on port ${port}`); });
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 と管理者] である結果を選択します。 - Cloud Run アプリケーションを作成する既存の Google Cloud プロジェクトであることを確認します。
- [データアクセス監査ログの構成] テーブルで、[サービス] 列から
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 エディタで
index.js
を再度開きます。cloudshell edit ~/codelab-genai/index.js
await generativeModel.generateContent(prompt)
の呼び出し(行 19)の後に、次の行を追加します。
このコードは、生成されたコンテンツに関する情報を 構造化ロギング形式でconsole.log(JSON.stringify({ severity: 'DEBUG', message: 'Content is generated', prompt: prompt, response: resp.response, }));
stdout
に書き込みます。Cloud Run の Logging エージェントは、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 を構成しました。その後、アプリケーションを変更して再デプロイしました。
このラボが気に入ったら、別のコーディング言語またはフレームワークでもう一度試してみてください。
本日ご利用いただいたプロダクトの改善に役立つユーザー エクスペリエンス(UX)調査にご協力いただける場合は、こちらからご登録ください。
学習を継続するためのオプションは次のとおりです。
- ドキュメント: Firebase GenKit を柔軟なモデル抽象化として使用すると、任意のモデル API を簡単に統合し、コミュニティが管理するモデルを使用できます。
- Codelab: Gemini を搭載したチャットアプリを Cloud Run にデプロイする方法
- Cloud Run で Gemini 関数呼び出しを使用する方法
- Cloud Run Jobs Video Intelligence API を使用して動画をシーンごとに処理する方法
- オンデマンド ワークショップ: Google Kubernetes Engine オンボーディング