はじめに Link to heading

クラウドインフラの運用は複雑化の一途を辿っています。VMインスタンスの起動・停止、リソースの監視、コスト最適化、トラブルシューティング…これらの日々の運用タスクに追われていませんか?

本記事では、Google Cloud Platform(GCP)上でAIエージェントがインフラを自律的に運用する環境を、ゼロから構築する方法を解説します。人間が指示を出すだけで、AIがGCPのリソースを操作し、監視し、最適化する—そんな未来志向のインフラ運用を実現しましょう。

なぜインフラAIエージェントなのか Link to heading

従来のインフラ運用の課題 Link to heading

  • 手作業の多さ: CLIコマンドを手動で実行、GUIを何度もクリック
  • 知識の属人化: 複雑な手順書、ベテランエンジニアへの依存
  • 対応の遅さ: アラート発生から対応まで時間がかかる
  • 単調な繰り返し: 同じ操作を何度も実行

AIエージェントが実現する世界 Link to heading

[エンジニア] 「asia-northeast1-aのインスタンス状態を確認して」
    ↓
[AIエージェント] GCP APIを呼び出し → 情報を取得 → 整形して報告
    ↓
[エンジニア] 「CPU使用率が高いインスタンスがあれば教えて」
    ↓
[AIエージェント] メトリクスを分析 → 異常検知 → アラート

AIエージェントの利点:

  • 自然言語で操作: コマンドを覚える必要なし
  • 自律的な判断: 状況に応じた最適なアクションを選択
  • 24時間監視: 人間が寝ている間も動作
  • 学習と改善: 過去のオペレーションから学習

プロジェクト概要 Link to heading

構築する環境 Link to heading

┌─────────────────────────────────────────────────┐
│         AI Agent (Python CLI)                   │
│  - 自然言語での指示受付                          │
│  - GCP操作ツール(起動/停止/削除)               │
│  - 監視ツール(メトリクス収集・異常検知)        │
└────────────┬────────────────────────────────────┘
             │ Google Cloud SDK
┌────────────▼────────────────────────────────────┐
│         Google Cloud Platform                   │
│  - Compute Engine (VM)                          │
│  - Cloud Storage (バケット)                     │
│  - Cloud Monitoring (メトリクス)                │
└─────────────────────────────────────────────────┘
             │
┌────────────▼────────────────────────────────────┐
│    Infrastructure as Code                       │
│  Terraform: インフラプロビジョニング             │
│  Ansible: サーバー構成管理                       │
└─────────────────────────────────────────────────┘

技術スタック Link to heading

  • Python 3.12: メイン言語
  • uv: 高速Pythonパッケージマネージャー
  • gcloud CLI: GCP認証とプロジェクト管理
  • Terraform: GCPリソース作成・管理
  • Ansible: サーバー内構成管理
  • structlog: 構造化ロギング
  • click: CLIフレームワーク

アーキテクチャ設計の重要な選択 Link to heading

ツールの使い分け:Terraform vs Ansible Link to heading

この2つのツールは役割が異なるため、併用することで最大の効果を発揮します。

Terraform: インフラプロビジョニングに特化 Link to heading

役割:

  • GCPリソース(VM、VPC、ストレージ)の作成・削除
  • ネットワーク構成の定義
  • IAMロールとサービスアカウントの管理

特徴:

  • 宣言的な記述(「あるべき姿」を定義)
  • 状態管理(terraform.state)
  • terraform planで変更内容を事前確認

使用例:

1resource "google_compute_instance" "vm" {
2  name         = "web-server"
3  machine_type = "e2-medium"
4  zone         = "asia-northeast1-a"
5}

Ansible: 構成管理とデプロイに特化 Link to heading

役割:

  • サーバー内のパッケージインストール
  • 設定ファイルの配置
  • アプリケーションのデプロイ
  • サービスの起動・再起動

特徴:

  • 手続き型の記述(「どうやって実現するか」を定義)
  • エージェントレス(SSH経由で実行)
  • 冪等性の保証

使用例:

1- name: Webサーバーのセットアップ
2  hosts: all
3  tasks:
4    - name: Nginxをインストール
5      apt:
6        name: nginx
7        state: present

使い分けの原則 Link to heading

作業内容ツール理由
VMインスタンス作成Terraformインフラリソース
NginxインストールAnsibleサーバー構成
VPCネットワーク構築Terraformインフラリソース
アプリデプロイAnsibleサーバー構成
IAMロール設定Terraformインフラリソース
設定ファイル配置Ansibleサーバー構成

Python環境管理:なぜuvなのか Link to heading

uvとは Link to heading

uvは、Astral社(Ruffの開発元)が開発したRust製の超高速Pythonパッケージマネージャーです。

従来のpip:

1pip install -r requirements.txt
2# → 30秒〜数分

uvを使用:

1uv pip install -r requirements.txt
2# → 2〜3秒(10-100倍高速!)

uvを選んだ理由 Link to heading

  1. 圧倒的な速度: pipの10〜100倍高速
  2. pipとの互換性: requirements.txtをそのまま使える
  3. 仮想環境管理: uv venvで即座に仮想環境作成
  4. 信頼性: Rust製で安全性が高い
  5. モダンな設計: 最新のPythonエコシステムに対応

インストール方法(推奨) Link to heading

1# pipxでuvをインストール
2sudo apt install pipx
3pipx install uv
4
5# これで完了!
6uv --version

この方法なら:

  • ✅ システムのPython環境を汚染しない
  • ✅ aptでpipxをインストール(システムパッケージ管理)
  • ✅ pipxでuvを分離インストール(Pythonツール管理)

セットアップ手順 Link to heading

Phase 0: 前提条件のインストール Link to heading

必要なツール Link to heading

1# 前提条件チェックスクリプトを実行
2bash scripts/check_prerequisites.sh

インストールが必要なもの:

  • Python 3.10以上
  • pipx + uv
  • gcloud CLI
  • Terraform(オプション)

gcloud CLIのインストール Link to heading

 1# gcloud CLIをダウンロード&インストール
 2curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
 3tar -xzf google-cloud-cli-linux-x86_64.tar.gz
 4./google-cloud-sdk/install.sh
 5
 6# PATHを更新
 7source ~/.bashrc
 8
 9# バージョン確認
10gcloud version

uvのインストール Link to heading

1# pipxをインストール
2sudo apt install -y pipx
3
4# uvをインストール
5pipx install uv
6
7# 確認
8uv --version  # → uv 0.9.7

Phase 1: GCPプロジェクトとリポジトリ Link to heading

1. GCPプロジェクト作成 Link to heading

Google Cloud Consoleで infra-ai-agent プロジェクトを作成します。

2. リポジトリ構造 Link to heading

infra-ai-agent/
├── README.md                 # プロジェクト概要
├── CLAUDE.md                 # AIエージェント向けガイド
├── .gitignore                # 機密情報の除外
├── env.example               # 環境変数テンプレート
├── requirements.txt          # Python依存関係
│
├── scripts/                  # セットアップ・テストスクリプト
│   ├── check_prerequisites.sh
│   ├── setup.sh
│   └── test_connection.py
│
├── terraform/                # インフラコード(Terraform)
│   ├── provider.tf
│   ├── variables.tf
│   ├── outputs.tf
│   └── terraform.tfvars.example
│
├── ansible/                  # 構成管理(Ansible)
│   ├── ansible.cfg
│   ├── inventory/
│   │   └── gcp.yml          # GCP動的インベントリ
│   ├── playbooks/
│   │   └── setup.yml
│   └── requirements.yml
│
└── agent/                    # AIエージェントコア
    ├── __init__.py
    ├── main.py               # CLIエントリーポイント
    └── tools/
        ├── gcp_tools.py      # GCP操作ツール
        └── monitoring.py     # 監視ツール

Phase 2: 環境変数の設定 Link to heading

1# テンプレートをコピー
2cp env.example .env
3
4# 編集
5vim .env

.envの内容:

 1# GCPプロジェクトID
 2GCP_PROJECT_ID=infra-ai-agent
 3
 4# GCPリージョンとゾーン
 5GCP_REGION=asia-northeast1
 6GCP_ZONE=asia-northeast1-a
 7
 8# Terraform設定
 9TF_VAR_project_id=infra-ai-agent
10TF_VAR_region=asia-northeast1
11
12# ログレベル
13LOG_LEVEL=INFO
14
15# 環境識別子
16ENVIRONMENT=development

Phase 3: GCP認証 Link to heading

1# gcloud認証(ブラウザが開く)
2gcloud auth login
3
4# プロジェクト設定
5gcloud config set project infra-ai-agent
6
7# Application Default Credentials設定
8gcloud auth application-default login

Application Default Credentials(ADC)とは?

  • PythonスクリプトがGCP APIを使うための認証方式
  • ~/.config/gcloud/application_default_credentials.jsonに保存
  • Google Cloud SDKが自動的に読み込む

Phase 4: セットアップスクリプト実行 Link to heading

1# 自動セットアップ
2bash scripts/setup.sh

このスクリプトが実行すること:

  1. ✅ 環境変数の確認
  2. ✅ Pythonバージョンチェック
  3. ✅ uvを使って仮想環境作成(.venv
  4. ✅ 61個の依存パッケージをインストール
  5. ✅ gcloud CLI認証確認
  6. ✅ GCP APIを有効化(Compute Engine、Cloud Monitoring等)

Phase 5: 接続テスト Link to heading

1# GCP接続テストを実行
2source .venv/bin/activate
3python scripts/test_connection.py

テスト内容:

  • 認証テスト
  • プロジェクトアクセステスト
  • Compute Engine API呼び出し
  • ゾーン一覧取得

成功例:

==================================================
🚀 Infra AI Agent - GCP接続テスト
==================================================

✓ 認証成功
✓ プロジェクトアクセス成功
✓ Compute Engine API 呼び出し成功
✓ すべてのテストが成功しました (4/4)

✨ GCP接続が正常に確認できました!

実装したAIエージェントツール Link to heading

CLIインターフェース Link to heading

1# AIエージェントのヘルプ
2python -m agent.main --help
3
4# 使用可能なコマンド:
5#   status   - インフラの現在の状態を確認
6#   zones    - 利用可能なゾーン一覧
7#   start    - VMインスタンスを起動
8#   stop     - VMインスタンスを停止
9#   monitor  - インスタンスのメトリクスを監視

実行例1: インフラ状態確認 Link to heading

1python -m agent.main status

出力:

📊 インフラステータスチェック

💻 VMインスタンス:
  インスタンスが見つかりません

🪣 Cloud Storage バケット:
  バケットが見つかりません

実行例2: ゾーン一覧表示 Link to heading

1python -m agent.main zones

出力:

🌏 利用可能なゾーン

📍 asia-northeast1
  🟢 asia-northeast1-a
  🟢 asia-northeast1-b
  🟢 asia-northeast1-c

📍 asia-northeast2
  🟢 asia-northeast2-a
  🟢 asia-northeast2-b
  🟢 asia-northeast2-c

... (127ゾーン取得)

実行例3: VMインスタンス操作 Link to heading

1# インスタンス起動
2python -m agent.main start my-instance --zone asia-northeast1-a
3
4# インスタンス停止
5python -m agent.main stop my-instance --zone asia-northeast1-a

実行例4: 監視とメトリクス Link to heading

1# 過去1時間のメトリクスを取得
2python -m agent.main monitor my-instance --hours 1

出力:

📈 my-instance のメトリクス監視

インスタンス: my-instance
ゾーン: asia-northeast1-a
期間: 過去1時間

💻 CPU:
  平均: 45.23%
  最大: 78.50%
  最小: 12.30%
  データポイント: 60

⚠️  CPU使用率が高くなっています

実装の詳細 Link to heading

GCP操作ツール Link to heading

 1# agent/tools/gcp_tools.py
 2from google.cloud import compute_v1
 3
 4class GCPTools:
 5    def __init__(self, project_id):
 6        self.project_id = project_id
 7        self.zone = "asia-northeast1-a"
 8    
 9    def list_instances(self):
10        """VMインスタンス一覧を取得"""
11        client = compute_v1.InstancesClient()
12        instances = client.list(
13            project=self.project_id,
14            zone=self.zone
15        )
16        return [
17            {
18                'name': inst.name,
19                'status': inst.status,
20                'machine_type': inst.machine_type,
21                'internal_ip': inst.network_interfaces[0].network_i_p
22            }
23            for inst in instances
24        ]
25    
26    def start_instance(self, instance_name):
27        """VMインスタンスを起動"""
28        client = compute_v1.InstancesClient()
29        operation = client.start(
30            project=self.project_id,
31            zone=self.zone,
32            instance=instance_name
33        )
34        logger.info("Started instance", name=instance_name)
35        return True

監視ツール Link to heading

 1# agent/tools/monitoring.py
 2from google.cloud import monitoring_v3
 3from datetime import datetime, timedelta
 4
 5class MonitoringTools:
 6    def get_cpu_utilization(self, instance_name, hours=1):
 7        """CPU使用率を取得"""
 8        client = monitoring_v3.MetricServiceClient()
 9        
10        # 時間範囲
11        end_time = datetime.utcnow()
12        start_time = end_time - timedelta(hours=hours)
13        
14        # メトリクスフィルタ
15        filter_str = (
16            f'resource.type = "gce_instance" '
17            f'AND resource.labels.instance_id = "{instance_name}" '
18            f'AND metric.type = "compute.googleapis.com/instance/cpu/utilization"'
19        )
20        
21        # データ取得
22        results = client.list_time_series(
23            name=f"projects/{self.project_id}",
24            filter=filter_str,
25            interval=interval
26        )
27        
28        return [
29            {
30                'timestamp': point.interval.end_time,
31                'value': point.value.double_value * 100,
32                'unit': '%'
33            }
34            for point in results
35        ]

Terraform設定 Link to heading

プロバイダー設定 Link to heading

 1# terraform/provider.tf
 2terraform {
 3  required_version = ">= 1.5.0"
 4
 5  required_providers {
 6    google = {
 7      source  = "hashicorp/google"
 8      version = "~> 5.0"
 9    }
10  }
11}
12
13provider "google" {
14  project = var.project_id
15  region  = var.region
16  zone    = var.zone
17}

変数定義 Link to heading

 1# terraform/variables.tf
 2variable "project_id" {
 3  description = "GCPプロジェクトID"
 4  type        = string
 5  default     = "infra-ai-agent"
 6}
 7
 8variable "region" {
 9  description = "デフォルトのGCPリージョン"
10  type        = string
11  default     = "asia-northeast1"
12}
13
14variable "environment" {
15  description = "環境識別子"
16  type        = string
17  default     = "development"
18}

Ansible設定 Link to heading

GCP動的インベントリ Link to heading

 1# ansible/inventory/gcp.yml
 2---
 3plugin: gcp_compute
 4
 5projects:
 6  - infra-ai-agent
 7
 8regions:
 9  - asia-northeast1
10
11# グループ化設定
12keyed_groups:
13  - key: zone
14    prefix: zone
15  
16  - key: labels
17    prefix: label
18  
19  - key: status
20    prefix: status
21
22# ホスト変数設定
23compose:
24  ansible_host: networkInterfaces[0].accessConfigs[0].natIP

セットアップPlaybook Link to heading

 1# ansible/playbooks/setup.yml
 2---
 3- name: GCPインスタンス基本セットアップ
 4  hosts: all
 5  become: yes
 6  
 7  vars:
 8    basic_packages:
 9      - vim
10      - git
11      - curl
12      - htop
13      - python3
14    
15    timezone: Asia/Tokyo
16  
17  tasks:
18    - name: タイムゾーンの設定
19      timezone:
20        name: "{{ timezone }}"
21    
22    - name: パッケージリストの更新
23      apt:
24        update_cache: yes
25        cache_valid_time: 3600
26    
27    - name: 基本パッケージのインストール
28      apt:
29        name: "{{ basic_packages }}"
30        state: present

トラブルシューティング Link to heading

よくある問題と解決方法 Link to heading

1. gcloud CLIが見つからない Link to heading

1# PATHが通っていない場合
2export PATH="/path/to/google-cloud-sdk/bin:$PATH"
3
4# bashrcに追加
5echo 'export PATH="/path/to/google-cloud-sdk/bin:$PATH"' >> ~/.bashrc
6source ~/.bashrc

2. 認証エラー Link to heading

1# Application Default Credentialsを再設定
2gcloud auth application-default login
3
4# 認証情報の確認
5gcloud auth list

3. API有効化エラー Link to heading

1# 必要なAPIを手動で有効化
2gcloud services enable compute.googleapis.com
3gcloud services enable monitoring.googleapis.com
4gcloud services enable logging.googleapis.com

4. Python依存関係のエラー Link to heading

1# 仮想環境を再作成
2rm -rf .venv
3uv venv
4source .venv/bin/activate
5uv pip install -r requirements.txt

ベストプラクティス Link to heading

セキュリティ Link to heading

  • .envファイルは絶対にGitにコミットしない
  • サービスアカウントには最小権限の原則を適用
  • APIキーは定期的にローテーション
  • すべてのオペレーションをCloud Loggingに記録
  • 本番環境では別のGCPプロジェクトを使用

コスト最適化 Link to heading

 1# 使用していないインスタンスの自動停止
 2def auto_stop_idle_instances():
 3    """CPU使用率が低いインスタンスを停止"""
 4    monitoring = MonitoringTools()
 5    gcp_tools = GCPTools()
 6    
 7    instances = gcp_tools.list_instances()
 8    for instance in instances:
 9        metrics = monitoring.get_cpu_utilization(
10            instance['name'], 
11            hours=24
12        )
13        
14        avg_cpu = sum(m['value'] for m in metrics) / len(metrics)
15        
16        if avg_cpu < 5.0:  # 5%未満
17            logger.warning(
18                "Idle instance detected",
19                instance=instance['name'],
20                avg_cpu=avg_cpu
21            )
22            # 停止するかどうかは人間が判断
23            # gcp_tools.stop_instance(instance['name'])

運用Tips Link to heading

ログの構造化:

1import structlog
2
3logger = structlog.get_logger()
4logger.info(
5    "Instance started",
6    instance_name="web-server-01",
7    zone="asia-northeast1-a",
8    machine_type="e2-medium"
9)

エラーハンドリング:

 1try:
 2    gcp_tools.start_instance("my-instance")
 3except Exception as e:
 4    logger.error(
 5        "Failed to start instance",
 6        instance="my-instance",
 7        error=str(e)
 8    )
 9    # アラート通知
10    send_alert_to_slack(f"エラー: {e}")

まとめ Link to heading

構築した環境 Link to heading

  • ✅ GCP接続が確認済みのPython環境
  • ✅ VMインスタンス操作ツール(起動/停止/削除)
  • ✅ 監視ツール(CPU/メモリ/ディスクI/O)
  • ✅ Terraformによるインフラコード管理
  • ✅ Ansibleによる構成管理
  • ✅ uvによる高速パッケージ管理

達成したこと Link to heading

  1. 環境構築の自動化: セットアップスクリプト一発で完了
  2. ツールの適材適所: Terraform(インフラ)+ Ansible(構成管理)
  3. モダンなPython環境: uvで高速インストール
  4. 実用的なCLI: 自然言語に近いコマンド体系
  5. 拡張可能な設計: 新しいツールを簡単に追加可能

次のステップ Link to heading

Phase 1: 基本機能の充実 Link to heading

  • より詳細なメトリクス監視
  • 異常検知アルゴリズムの実装
  • 自動スケーリングロジック

Phase 2: AI統合 Link to heading

  • Claude APIとの統合
  • 自然言語での指示受付
  • コンテキストを理解した自律的判断

Phase 3: 高度な自動化 Link to heading

  • マルチエージェント協調
  • 予測的メンテナンス
  • コスト最適化の自動実行

今後の可能性 Link to heading

AIエージェントの進化:

現在: 「VMを起動して」 → 起動
  ↓
未来: 「顧客が増えそう」 → リソース分析 → 自動スケールアップ → コスト試算 → 承認待ち

学習と改善:

  • 過去のオペレーションログから学習
  • より効率的な手順の自動発見
  • エラーパターンの事前検知

参考リソース Link to heading


インフラ運用の未来は、AIとの協働にあります。この記事で構築した環境をベースに、あなただけのインフラAIエージェントを育ててみませんか?