更新日:2025年11月18日

12分で読めます

AIエージェントをGKEに安全にデプロイする方法

このガイドでは、GitLabのAIパワーDevSecOpsプラットフォームを使用して、ADKベースのAIエージェントをGoogle Kubernetes Engineに簡単かつ安全にデプロイする方法を説明します。

AIエージェントの構築はワクワクするものですが、安全に本番環境にデプロイする作業は複雑であってはなりません。このチュートリアルでは、GitLabのネイティブGoogle Cloudインテグレーションを使用することで、AIエージェントをGoogle Kubernetes Engine(GKE)に組み込み、スキャン機能込みのサービスアカウントキーなしで簡単にデプロイする方法を学びます。

AIエージェントのデプロイ先としてGKEを選ぶ理由

GKEは、OIDC認証を通じてGitLab CI/CDパイプラインとシームレスに接続するエンタープライズグレードのオーケストレーションを提供します。開発チームは、クラウドインフラに対する完全な可視性、コンプライアンス、制御を維持しながらAIエージェントをデプロイできます。このガイドでは、GoogleのAgent Development Kit(ADK)を使用してアプリを構築し、GitLabでデプロイされるので、さらにシームレスな体験が期待できます。

このアプローチの3つの主要なメリット:

完全なインフラ制御 - データ、ルール、環境のすべてが自社管理となります。AIエージェントの実行場所と設定方法を完全に制御できます。

ネイティブGitLabインテグレーション - 複雑な回避策は不要です。GitLabとGoogle Cloudのネイティブインテグレーションにより、既存のパイプラインがそのまま使用できます。

本番環境レベルのスケーリング - AIワークロードの拡大に合わせて、GKEがスケーリングと内部オーケストレーションの負荷を自動的に処理します。

重要なのは、GitLabとGKEの組み合わせにより、デベロッパーエクスペリエンスを犠牲にすることなく、AIデプロイメントに必要なエンタープライズレベルの信頼性を提供するということです。

前提条件

開始前に、次のAPIが有効化されていることを確認してください:

  • GKE API
  • アーティファクトレジストリAPI
  • Vertex AI API

また、次が用意されていることも確認してください:

  • GitLabプロジェクトの作成
  • GKEクラスターのプロビジョニング
  • アーティファクトレジストリのリポジトリの作成

デプロイプロセス

1. GitLabでIAMと権限を設定する

GitLabのインテグレーションページに移動して、Google Cloud認証(IAM)を設定します。

設定 > インテグレーションに移動し、Google Cloudインテグレーションを設定します。グループレベルインテグレーションを使用している場合、デフォルト設定がプロジェクトにすでに継承されていることに注意してください。つまり、グループレベルで一度設定すれば、すべてのプロジェクトがこの設定を継承し、機能するようになります。

最初から設定する場合は、次の情報を提供します:

  • プロジェクトID
  • プロジェクト番号
  • ワークロードアイデンティティプールID
  • プロバイダーID

設定が完了すると、GitLabはGoogle Cloud ConsoleでCloud Shellを介して実行するスクリプトを提供します。このスクリプトを実行することで、適切なアクセスを有効にするために必要なサービスプリンシパルを備えたワークロードアイデンティティフェデレーションプールが作成されます。

2. アーティファクトレジストリインテグレーションを設定する

GitLabのインテグレーション設定画面で、アーティファクト管理を設定します。

  1. アーティファクト管理をクリックします。

  2. Googleアーティファクトレジストリを選択します。

  3. 次の情報を提供します:

    • プロジェクトID
    • リポジトリ名(事前に作成)
    • リポジトリの場所

GitLabは、Google Cloud Consoleで実行する別のスクリプトを提供します。

重要: 次の手順に進む前に、ワークロードアイデンティティフェデレーションプールに次のロールを追加します:

  • サービスアカウントユーザー
  • Kubernetesデベロッパー
  • Kubernetesクラスタービューアー

これらの権限により、後続の手順でGitLabがGKEにデプロイできるようになります。

3. CI/CDパイプラインの作成

ここが重要な部分です。デプロイ用のCI/CDパイプラインの作成です。

ビルド > パイプラインエディタに移動し、4つのステージを持つパイプラインを定義します:

  • Build - Dockerがコンテナイメージを作成します。
  • Test - GitLab Auto DevOpsが組み込みのセキュリティスキャンを提供し、脆弱性がないことを確認します。
  • Upload - GitLabの組み込みCI/CDコンポーネントを使用してGoogleアーティファクトレジストリにプッシュします。
  • Deploy - Kubernetes定義を使用してGKEにデプロイします。

完全な.gitlab-ci.ymlは次のとおりです:

default:
  tags: [ saas-linux-2xlarge-amd64 ]

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
  GCP_PROJECT_ID: "your-project-id"
  GKE_CLUSTER: "your-cluster"
  GKE_REGION: "us-central1"
  KSA_NAME: "ai-agent-ksa"

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
  - template: Jobs/Container-Scanning.gitlab-ci.yml
  - template: 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

deploy:
  stage: deploy
  image: google/cloud-sdk:slim
  identity: google_cloud
  before_script:
    - apt-get update && apt-get install -y kubectl google-cloud-sdk-gke-gcloud-auth-plugin
    - gcloud container clusters get-credentials $GKE_CLUSTER --region $GKE_REGION --project $GCP_PROJECT_ID
  script:
    - |
      kubectl apply -f - <<EOF
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ai-agent
        namespace: default
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: ai-agent
        template:
          metadata:
            labels:
              app: ai-agent
          spec:
            serviceAccountName: $KSA_NAME
            containers:
            - name: ai-agent
              image: $AR_IMAGE
              ports:
              - containerPort: 8080
              resources:
                requests: {cpu: 500m, memory: 1Gi}
                limits: {cpu: 2000m, memory: 4Gi}
              livenessProbe:
                httpGet: {path: /health, port: 8080}
                initialDelaySeconds: 60
              readinessProbe:
                httpGet: {path: /health, port: 8080}
                initialDelaySeconds: 30
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: ai-agent-service
        namespace: default
      spec:
        type: LoadBalancer
        ports:
        - port: 80
          targetPort: 8080
        selector:
          app: ai-agent
      ---
      apiVersion: autoscaling/v2
      kind: HorizontalPodAutoscaler
      metadata:
        name: ai-agent-hpa
        namespace: default
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: ai-agent
        minReplicas: 2
        maxReplicas: 10
        metrics:
        - type: Resource
          resource:
            name: cpu
            target: {type: Utilization, averageUtilization: 70}
      EOF
      
      kubectl rollout status deployment/ai-agent -n default --timeout=5m
      EXTERNAL_IP=$(kubectl get service ai-agent-service -n default -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
      echo "Deployed at: http://$EXTERNAL_IP"
  only:
    - main

GKEの重要な設定

これが機能する理由、そしてGKEにこの追加設定が必要な理由は、Vertex AIと連携できるKubernetesサービスアカウントがクラスター内に必要だからです。このサービスアカウントには、Google CloudのAI機能にアクセスする権限が必要です。

この設定なしでは、アプリケーションはデプロイできますが、AIエージェントが機能しません。Vertex AIにアクセスできるKubernetesサービスアカウントを作成する必要があります。

この1回限りのセットアップを実行します:

#!/bin/bash


PROJECT_ID="your-project-id"


GSA_NAME="ai-agent-vertex"


GSA_EMAIL="${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"


KSA_NAME="ai-agent-ksa"


CLUSTER_NAME="your-cluster"


REGION="us-central1"



# GCPサービスアカウントを作成


gcloud iam service-accounts create $GSA_NAME \
    --display-name="AI Agent Vertex AI" \
    --project=$PROJECT_ID

# Vertex AI権限を付与


gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:${GSA_EMAIL}" \
    --role="roles/aiplatform.user"

# クラスター認証情報を取得


gcloud container clusters get-credentials $CLUSTER_NAME \
    --region $REGION --project $PROJECT_ID

# Kubernetesサービスアカウントを作成


kubectl create serviceaccount $KSA_NAME -n default



# アカウントをリンク


kubectl annotate serviceaccount $KSA_NAME -n default \
    iam.gke.io/gcp-service-account=${GSA_EMAIL}

gcloud iam service-accounts add-iam-policy-binding ${GSA_EMAIL} \
    --role=roles/iam.workloadIdentityUser \
    --member="serviceAccount:${PROJECT_ID}.svc.id.goog[default/${KSA_NAME}]" \
    --project=$PROJECT_ID

4. GKEにデプロイする

完了したら、この変更をパイプラインにプッシュすると、準備完了です。

パイプラインがデプロイされたことを確認できます。CI/CD > パイプラインに移動すると、4つのステージが表示されます:

  • Build
  • Test(定義されたすべてのセキュリティスキャンを含む)
  • アーティファクトレジストリへのUpload(成功)
  • GKEのKubernetesへのDeploy(成功)

まとめ

GitLabとGoogle Cloudの組み合わせにより、AIエージェントをGKEに簡単かつ安全にデプロイできます。複雑な手順を踏む必要がなかったことが、おわかりいただけたと思います。GitLabのネイティブGoogle Cloudインテグレーションのおかげで実現できたのです。

デモ動画をご覧ください:

このチュートリアルの完全なコード例を使用して、今すぐ始めてみてください。まだGitLabユーザーでない場合は、無料トライアルでDevSecOpsプラットフォームをお試しください。Google Cloudでホストされているスタートアップ企業には、GitLabをお試しいただける特典があります。

ご意見をお寄せください

このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成してあなたの声を届けましょう。
Share your feedback

フォーチュン100企業の50%以上がGitLabを信頼

より優れたソフトウェアをより速く提供

インテリジェントなDevSecOpsプラットフォームで

チームの可能性を広げましょう。