はじめに 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
- 圧倒的な速度: pipの10〜100倍高速
- pipとの互換性: requirements.txtをそのまま使える
- 仮想環境管理:
uv venvで即座に仮想環境作成 - 信頼性: Rust製で安全性が高い
- モダンな設計: 最新の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
このスクリプトが実行すること:
- ✅ 環境変数の確認
- ✅ Pythonバージョンチェック
- ✅ uvを使って仮想環境作成(
.venv) - ✅ 61個の依存パッケージをインストール
- ✅ gcloud CLI認証確認
- ✅ 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
- 環境構築の自動化: セットアップスクリプト一発で完了
- ツールの適材適所: Terraform(インフラ)+ Ansible(構成管理)
- モダンなPython環境: uvで高速インストール
- 実用的なCLI: 自然言語に近いコマンド体系
- 拡張可能な設計: 新しいツールを簡単に追加可能
次のステップ 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エージェントを育ててみませんか?