公開:2025年7月7日
11分で読めます
デモアプリ付きの詳細なガイドに従って、自律型AIの使い方を、GitLabのネイティブインテグレーションやCI/CDコンポーネントとあわせて学びましょう。
自律型AIの登場により、インテリジェントなアプリケーションの構築方法は大きく変わりつつありますが、
AIエージェントを安全かつ効率的にデプロイするのは簡単ではありません。
このチュートリアルでは、
GoogleのAgent Development Kit(ADK)で構築したAIエージェントを、
GitLabのネイティブインテグレーションとCI/CDコンポーネントを使って
Cloud Runにデプロイする方法を
学びます。
自律型AIは、人工知能の分野における大きな進化と言えるでしょう。従来の生成AIツールが常に人間からの指示を必要とするのに対し、AIエージェントは高度な言語モデルや自然言語処理を活用して、自律的に行動を起こします。自律型AIはリクエストを理解し、意思決定を行い、複数のステップからなる計画を実行して、目標を自ら達成できます。
このチュートリアルでは、GoogleのADKを使用します。ADKは、AIエージェントの開発とデプロイに対応した、柔軟でモジュール化されたフレームワークです。GeminiやGoogleのエコシステム向けに最適化されていますが、モデルやデプロイ方法に依存せず、他のフレームワークとの互換性も考慮して設計されています。
デプロイプロセスを実演するための実用的な例として「Canada City Advisor」を使います。ユーザーの希望や条件に基づいて、理想的なカナダの都市を提案するAIエージェントです。
その仕組みは以下の通りです。
ユーザーが予算条件やライフスタイルの希望を入力します。
ルートエージェントが以下2つのサブエージェントを統括します。
システムがユーザーに合った都市の候補を生成します。
異なる専門性を持つAIエージェントが連動して複雑な問題を解決するこのマルチエージェント構成により、自律型AIの強みが活かされます。サブエージェントは、ルートエージェントが予算やライフスタイルの分析が必要と判断したときにのみ呼び出されます。
始める前に、以下のものが準備できていることを確認してください。
以下のAPIが有効になっているGoogle Cloudプロジェクト
ソースコード用のGitLabプロジェクト
GitLabとGoogle Cloudの両方に対する適切な権限
ステップ1:ワークロードアイデンティティフェデレーションによるIAMインテグレーションを設定する
最初のステップでは、Workload Identity連携を使用して、GitLabとGoogle Cloudの間で安全なキーレス認証を確立します。これにより、サービスアカウントキーが不要となり、セキュリティが向上します。
GitLabプロジェクトでの手順は以下のとおりです。
設定 > インテグレーション > Google Cloud IAMの順に移動します。
以下の情報を入力します。
GitLabがスクリプトを生成します。このスクリプトをコピーして、Google Cloud Shellで実行し、Workload Identity連携を作成します。
ステップ2:Google Artifact Registryのインテグレーションを設定する
次に、コンテナイメージを保存するGoogle Artifact Registryとの接続を設定します。
GitLabで、設定 > インテグレーション > Google Artifact Registryの順に移動します。
以下の情報を入力します。
重要:リポジトリはすでにArtifact Registryに存在している必要があります。この設定操作では、GitLabが新しいリポジトリを自動で作成することはありません。
GitLabは、必要な権限を設定するためのコマンドを生成します。これをGoogle Cloud Shellで実行します。
さらに、Cloud Runへのデプロイのために、サービスプリンシパルに以下のロールを追加します。
roles/run.admin
roles/iam.serviceAccountUser
roles/cloudbuild.builds.editor
以下のgcloudコマンドを使用して、これらのロールを追加できます。
GCP_PROJECT_ID="<your-project-id>" #replace
GCP_PROJECT_NUMBER="<your-project-number>" #replace
GCP_WORKLOAD_IDENTITY_POOL="<your-pool-id>" #replace
gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \
--member="principalSet://iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL}/attribute.developer_access/true" \
--role='roles/run.admin'
gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \
--member="principalSet://iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL}/attribute.developer_access/true" \
--role='roles/iam.serviceAccountUser'
gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \
--member="principalSet://iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL}/attribute.developer_access/true" \
--role='roles/cloudbuild.builds.editor'
ステップ3:CI/CDパイプラインを作成する
ここからが本番です。デプロイ用のパイプラインを構築しましょう!GitLabのCI/CDコンポーネントを使用すると、非常に簡単に作成できます。
プロジェクトのルートに .gitlab-ci.yml
ファイルを作成します。
stages:
- build
- test
- upload
- deploy
variables:
GITLAB_IMAGE: $CI_REGISTRY_IMAGE/main:$CI_COMMIT_SHORT_SHA
AR_IMAGE: $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/main:$CI_COMMIT_SHORT_SHA
build:
image: docker:24.0.5
stage: build
services:
- docker:24.0.5-dind
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build -t $GITLAB_IMAGE .
- docker push $GITLAB_IMAGE
include:
- template: Jobs/Dependency-Scanning.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Dependency-Scanning.gitlab-ci.yml
- template: Jobs/SAST.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/SAST.gitlab-ci.yml
- template: Jobs/Secret-Detection.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Secret-Detection.gitlab-ci.yml
- component: gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@main
inputs:
stage: upload
source: $GITLAB_IMAGE
target: $AR_IMAGE
- component: gitlab.com/google-gitlab-components/cloud-run/deploy-cloud-run@main
inputs:
stage: deploy
project_id: "<your-project-id>" #replace
service: "canadian-city"
region: "us-central1"
image: $AR_IMAGE
このパイプラインは、以下の4つのステージで構成されています。
Build:AIエージェントを使用してDockerコンテナを作成します
Test:セキュリティスキャン(コンテナスキャン、依存関係スキャン、SAST)を実行します
Upload:コンテナをArtifact Registryにプッシュします
Deploy:Cloud Runにデプロイします
GitLabのCI/CDコンポーネントを使う大きなメリットは、いくつかのパラメーターを指定するだけで、認証やデプロイの複雑な処理をすべてコンポーネント側が自動で行ってくれる点です。
ステップ4:デプロイとテスト
すべての設定が完了したら、いよいよデプロイの実行です。
コードと .gitlab-ci.yml
をGitLabリポジトリにコミットします。
パイプラインは自動的に実行されます。
GitLabのCI/CDインターフェースでパイプラインの進行状況を確認します。
完了後、Google CloudコンソールでCloud RunのURLを確認できます。
各ステージが順番に実行される様子を確認できます。
Buildステージでコンテナが作成されます。
Testステージで包括的なセキュリティスキャンが実行されます。
UploadステージでArtifact Registryにプッシュされます。
DeployステージでCloud Runのサービスが作成または更新されます。
この手法には、以下のようなセキュリティ上の利点があります。
長期間有効な認証情報が不要:Workload identity連携により、サービスアカウントキーが不要になります。
自動セキュリティスキャン:すべてのデプロイで脆弱性がスキャンされます。
監査証跡:誰が何をいつデプロイしたのかを完全に可視化します。
最小権限の原則:きめ細かなIAMロールによりアクセスが制限されます。
GitLabのセキュリティ機能とGoogle Cloudの強力なAIおよびサーバーレスプラットフォームを組み合わせることで、安全でスケーラブルなAIエージェントをデプロイできます。GitLabとGoogle Cloudのインテグレーションによって、従来こうしたデプロイに伴っていた複雑さの多くが解消されます。
このチュートリアルの[サンプルコード
全文](https://gitlab.com/gitlab-partners-public/google-cloud/demos/ai-agent-deployment)を使えば、
すぐに始められます。GitLabをまだご利用でない場合は、ぜひ無料トライアルでDevSecOpsプラットフォームをご体験ください。
監修:小松原 つかさ @tkomatsubara
(GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト)