コンテンツにスキップ

Infrastructure as Code (IaC) 実装ガイド

[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。

実装ノート(アーティファクト): トレーニングスクリプトが出力する artifact_manifest.json と推奨CLIフラグについては docs/implementation/ARTIFACT_MANIFESTS.md を参照してください。

実装日: 2025年12月20日 バージョン: v0.1.0 著者: 青木 雅弘

概要

EvoSpikeNetの環境管理をInfrastructure as Code (IaC)化し、環境再現性100%を実現しました。Terraform、Ansible、Kubernetes、Docker Composeを統合した包括的なIaCシステムを実装しています。

実装内容

1. Terraform統合

1.1 主要ファイル

  • terraform/main.tf: メイン設定ファイル
  • Dockerプロバイダー設定
  • ネットワーク、ボリューム、コンテナ管理
  • 環境変数の自動生成
  • ヘルスチェックスクリプト生成

  • terraform/terraform.tfvars: 環境別変数

  • 開発環境(CPU、ポート8000/8050)
  • ステージング環境(GPU、ポート8100/8150)
  • 本番環境(GPU、ポート8200/8250)

  • terraform/templates/: テンプレートファイル

  • env.tpl: 環境変数テンプレート
  • docker-compose-override.tpl: Docker Composeオーバーライド
  • health_check.tpl: ヘルスチェックスクリプト

1.2 使用方法

# Terraformの初期化
cd terraform
terraform init

# 実行計画の確認
terraform plan

# 環境のデプロイ(dev)
terraform apply -var-file=terraform.tfvars

# 環境の削除
terraform destroy

1.3 変数のカスタマイズ

# terraform.tfvars
environment            = "dev"
device                 = "cpu"
enable_gpu             = false
api_port               = 8000
frontend_port          = 8050
postgres_password      = "secure_password"
api_keys               = "key1,key2,key3"

2. Ansible統合

2.1 主要ファイル

  • ansible/playbook.yml: メインプレイブック
  • システム依存関係のインストール
  • Docker、Docker Compose、Terraformのセットアップ
  • プロジェクトのクローンと設定
  • Python環境のセットアップ
  • データディレクトリの作成

  • ansible/inventory.ini: インベントリ定義

  • ローカル環境
  • 開発サーバー
  • ステージングサーバー
  • 本番サーバー

  • ansible/ansible.cfg: Ansible設定

2.2 使用方法

# ローカル環境のセットアップ
cd ansible
ansible-playbook -i inventory.ini playbook.yml --limit local

# リモートサーバーのセットアップ
ansible-playbook -i inventory.ini playbook.yml --limit development

# 本番環境のセットアップ(要注意!)
ansible-playbook -i inventory.ini playbook.yml --limit production

2.3 インベントリのカスタマイズ

[development]
dev-server ansible_host=YOUR_IP ansible_user=YOUR_USER

[production]
prod-server-1 ansible_host=YOUR_IP ansible_user=YOUR_USER
prod-server-2 ansible_host=YOUR_IP ansible_user=YOUR_USER

3. Kubernetes統合

3.1 主要コンポーネント

k8s/deployment.yamlに定義:

  1. Namespace: 専用のevospikenetネームスペース
  2. ConfigMap: 環境変数の設定
  3. Secret: 機密データの管理
  4. PostgreSQL StatefulSet: データベースの永続化
  5. API Deployment: 3レプリカ、オートスケーリング対応
  6. Frontend Deployment: 2レプリカ
  7. Services: 内部/外部通信
  8. HorizontalPodAutoscaler: CPU/メモリベースのオートスケーリング
  9. Ingress: 外部アクセス制御

3.2 使用方法

# Kubernetesへのデプロイ
kubectl apply -f k8s/deployment.yaml

# ステータス確認
kubectl get all -n evospikenet

# ログ確認
kubectl logs -n evospikenet -l app=api

# スケーリング
kubectl scale deployment api -n evospikenet --replicas=5

# 削除
kubectl delete namespace evospikenet

3.3 オートスケーリング設定

# HPA設定例
minReplicas: 3
maxReplicas: 10
metrics:
  - CPU: 70%
  - Memory: 80%

4. 環境セットアップスクリプト

4.1 scripts/setup_environment.sh

包括的な環境セットアップと検証を行うスクリプト。

機能: - 依存関係チェック(Python、Docker、Gitなど) - Pythonバージョン検証(≥3.9) - 必要ファイルの存在確認 - ディスク容量チェック(≥10GB) - 仮想環境の作成と依存関係インストール - .envファイルの生成 - pre-commitフックのセットアップ - Dockerネットワークの作成 - 環境レポートの生成

4.2 使用方法

# フルセットアップ(対話式)
./scripts/setup_environment.sh dev

# 検証のみ
./scripts/setup_environment.sh dev true

# ステージング環境
./scripts/setup_environment.sh staging

4.3 検証項目

✅ Python ≥3.9 ✅ Dockerデーモン起動中 ✅ Docker Compose利用可能 ✅ Gitインストール済み ✅ 必要ファイル存在 ✅ 十分なディスク容量(≥10GB) ✅ 必要なポート利用可能

5. Makefile統合

5.1 IaC関連コマンド

# 環境セットアップ
make env-setup

# 検証のみ
make env-validate

# Terraform操作
make terraform-init      # 初期化
make terraform-plan      # 実行計画表示
make terraform-apply     # 適用
make terraform-destroy   # 破棄

# Ansibleセットアップ
make ansible-setup

# Kubernetesデプロイ
make k8s-deploy

# Docker操作
make docker-build        # イメージビルド
make docker-up           # サービス起動
make docker-down         # サービス停止
make docker-logs         # ログ表示

# ヘルスチェック
make health-check

6. 100%再現性の実現

6.1 再現性100%を支える要素

  1. バージョン固定:
  2. Pythonパッケージ: requirements.txt
  3. Dockerイメージ: 明示的なタグ指定
  4. Terraformプロバイダー: バージョン制約
  5. システムパッケージ: Ansible管理

  6. 設定の一元管理:

  7. Terraform: インフラ設定
  8. Ansible: システム設定
  9. Docker Compose: サービス設定
  10. ConfigMap/Secret: アプリケーション設定

  11. 自動化:

  12. 環境検証スクリプト
  13. セットアップスクリプト
  14. ヘルスチェック
  15. CI/CD統合

  16. ドキュメント化:

  17. 自己文書化されたIaC設定
  18. テンプレートのコメント
  19. 詳細なREADME

6.2 環境タイプ

環境 用途 GPU APIポート フロントエンドポート
開発 開発 CPU 8000 8050
ステージング 検証 GPU 8100 8150
本番 本番運用 GPU 8200 8250

7. デプロイフロー

7.1 新規環境構築

# 1. リポジトリクローン
git clone https://github.com/your-org/EvoSpikeNet.git
cd EvoSpikeNet

# 2. 環境検証
make env-validate

# 3. 環境セットアップ
make env-setup

# 4. Terraform初期化
make terraform-init

# 5. Terraform適用
make terraform-apply

# 6. サービス起動
make docker-up

# 7. ヘルスチェック
make health-check

7.2 既存環境更新

# 1. コード更新
git pull

# 2. 依存関係更新
pip install -r requirements.txt

# 3. インフラ更新
make terraform-plan
make terraform-apply

# 4. サービス再起動
make docker-down
make docker-up

# 5. ヘルスチェック
make health-check

8. トラブルシューティング

問題: Terraform applyが失敗

原因: Dockerネットワークの競合

解決策:

# 既存ネットワークの削除
docker network rm evospikenet_dev_network

# Terraformの再適用
make terraform-apply

問題: ポート競合

原因: ポートが既に使用中

解決策:

# terraform.tfvarsでポート変更
api_port = 8001
frontend_port = 8051

問題: Python依存関係エラー

原因: 仮想環境の不整合

解決策:

# 仮想環境の再作成
rm -rf venv
make env-setup

9. セキュリティ考慮事項

9.1 機密データ管理

# .envファイルをGit除外
echo ".env*" >> .gitignore

# Terraformステートも除外
echo "*.tfstate*" >> .gitignore

# シークレットの暗号化(本番)
ansible-vault encrypt ansible/secrets.yml

9.2 アクセス制御

# Kubernetes Secretで管理
apiVersion: v1
kind: Secret
metadata:
  name: evospikenet-secrets
type: Opaque
stringData:
  EVOSPIKENET_API_KEYS: "encrypted_keys"

10. CI/CD統合

10.1 GitHub Actions例

name: Deploy Infrastructure

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2

      - name: Terraform Init
        run: cd terraform && terraform init

      - name: Terraform Plan
        run: cd terraform && terraform plan

      - name: Terraform Apply
        run: cd terraform && terraform apply -auto-approve

11. メトリクスとモニタリング

11.1 環境ヘルスメトリクス

  • API応答時間
  • サービス起動時間
  • リソース使用率
  • エラー率
  • デプロイ成功率

11.2 ヘルスチェック項目

✅ APIヘルス (http://localhost:8000/api/health) ✅ フロントエンドヘルス (http://localhost:8050/) ✅ PostgreSQL接続 ✅ Milvus接続 ✅ Elasticsearch接続 ✅ Zenoh Router接続

まとめ

IaC実装により、EvoSpikeNetは以下を達成しました:

  • 環境再現性100%: どの環境でも同じ構成を再現可能
  • 自動化: ワンコマンドでセットアップと検証
  • マルチ環境対応: Dev/Staging/Productionの明確な分離
  • スケーラビリティ: Kubernetes対応で大規模展開可能
  • セキュリティ: 機密データの適切な管理
  • ドキュメント化: 自己文書化されたIaC設定
  • CI/CD対応: 自動デプロイ統合準備完了
  • モニタリング統合: ヘルスチェックとメトリクス収集

これにより、開発者は環境セットアップに煩わされることなく、機能開発に集中できます。