infra-workflow

takemo101's avatarfrom takemo101

Terraform/Docker Composeによるインフラ構築のワークフロー、ベストプラクティス、Well-Architected Framework対応を定義

0stars🔀0forks📁View on GitHub🕐Updated Jan 11, 2026

When & Why to Use This Skill

This Claude skill provides a comprehensive framework for infrastructure management using Terraform and Docker Compose. It defines standardized workflows, best practices for directory structures and naming conventions, and ensures alignment with the Well-Architected Framework to optimize security, reliability, and cost-efficiency in cloud environments.

Use Cases

  • Standardizing Terraform workflows: Establish a consistent process for infrastructure design, implementation, and multi-phase reviews to ensure high-quality IaC code.
  • Local Development Environment Setup: Utilize Docker Compose best practices to create reproducible, multi-service local environments with proper health checks and volume management.
  • Well-Architected Reviews: Audit existing or new cloud architectures against the five pillars (Security, Reliability, Performance, Cost, and Operational Excellence) using built-in checklists.
  • Security-First Infrastructure: Implement mandatory security checks for network isolation, IAM least privilege, and data encryption during the Terraform planning phase.
  • Environment Variable Management: Standardize how sensitive and non-sensitive configurations are handled across local, staging, and production environments using Secrets Manager and .env templates.
nameinfra-workflow
descriptionTerraform/Docker Composeによるインフラ構築のワークフロー、ベストプラクティス、Well-Architected Framework対応を定義

インフラワークフロー

本ドキュメントは、Terraform/Docker Composeによるインフラ構築のワークフローを定義します。


1. インフラワークフロー概要

flowchart TB
    subgraph INFRA["インフラワークフロー"]
        direction TB
        
        %% インフラ設計
        subgraph DESIGN["インフラ設計フェーズ"]
            D1["インフラ要件確認"]
            D2["インフラ設計書作成<br/>@infra-reviewer"]
            D3{"設計レビュー<br/>9点以上"}
            
            D1 --> D2 --> D3
            D3 -->|"不合格"| D2
        end
        
        %% Terraform
        subgraph TF["Terraform実装フェーズ"]
            TF1["Terraformコード実装"]
            TF2["terraform plan"]
            TF3{"Plan成功?"}
            TF4["セキュリティチェック<br/>@security-reviewer"]
            TF5{"レビュー<br/>9点以上"}
            
            TF1 --> TF2 --> TF3
            TF3 -->|"失敗"| TF1
            TF3 -->|"成功"| TF4 --> TF5
            TF5 -->|"不合格"| TF1
        end
        
        %% Docker Compose
        subgraph DC["Docker Compose実装フェーズ"]
            DC1["Docker Compose作成"]
            DC2["docker-compose up"]
            DC3{"起動成功?"}
            DC4{"レビュー<br/>9点以上"}
            
            DC1 --> DC2 --> DC3
            DC3 -->|"失敗"| DC1
            DC3 -->|"成功"| DC4
            DC4 -->|"不合格"| DC1
        end
        
        %% フロー接続
        D3 -->|"合格"| TF
        D3 -->|"合格"| DC
        TF5 -->|"合格"| TF_OUT[["terraform apply<br/>待機"]]
        DC4 -->|"合格"| DC_OUT[["ローカル環境<br/>準備完了"]]
    end

2. Terraformワークフロー

2.1 フェーズ

# フェーズ 内容 完了条件
1 要件確認 インフラ要件の確認 要件が明確
2 設計 インフラ設計書作成 レビュー9点以上
3 実装 Terraformコード実装 terraform plan 成功
4 セキュリティレビュー セキュリティチェック レビュー9点以上
5 適用 terraform apply(手動) 人間の承認後

2.2 Terraform ベストプラクティス

ディレクトリ構成

infrastructure/
├── terraform/
│   ├── environments/
│   │   ├── dev/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   ├── outputs.tf
│   │   │   └── terraform.tfvars
│   │   ├── staging/
│   │   └── production/
│   │
│   └── modules/
│       ├── networking/
│       │   ├── main.tf
│       │   ├── variables.tf
│       │   └── outputs.tf
│       ├── compute/
│       ├── database/
│       └── security/
│
└── docs/
    └── インフラ設計書.md

命名規則

リソース 命名規則
リソース名 {project}-{env}-{resource} myapp-prod-vpc
モジュール名 機能を表す単語 networking, compute
変数名 snake_case instance_type

必須設定

# provider バージョン固定
terraform {
  required_version = ">= 1.0.0"
  
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

# 全変数にdescription必須
variable "instance_type" {
  type        = string
  description = "EC2インスタンスタイプ"
  default     = "t3.micro"
}

# 重要なoutputにはdescription必須
output "vpc_id" {
  description = "作成されたVPCのID"
  value       = aws_vpc.main.id
}

2.3 セキュリティチェック項目

カテゴリ チェック項目
ネットワーク セキュリティグループが最小権限か
IAM IAMポリシーが最小権限か
暗号化 RDS、S3、EBSが暗号化されているか
ログ CloudTrail、VPCフローログが有効か
公開設定 S3バケットがパブリックでないか
シークレット Secrets Managerが使用されているか

3. Docker Composeワークフロー

3.1 フェーズ

# フェーズ 内容 完了条件
1 要件確認 ローカル環境要件の確認 要件が明確
2 実装 Docker Compose作成 docker-compose up 成功
3 レビュー 設定レビュー レビュー9点以上
4 ドキュメント化 セットアップ手順の記載 README更新

3.2 Docker Compose ベストプラクティス

ディレクトリ構成

docker/
├── docker-compose.yml          # 本番用
├── docker-compose.dev.yml      # 開発用(上書き)
├── docker-compose.test.yml     # テスト用
├── .env.example                # 環境変数テンプレート
└── services/
    ├── backend/
    │   └── Dockerfile
    ├── frontend/
    │   └── Dockerfile
    └── nginx/
        └── nginx.conf

必須設定

version: '3.8'

services:
  backend:
    build:
      context: ./services/backend
      dockerfile: Dockerfile
    env_file:
      - .env
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:15-alpine
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  app-network:
    driver: bridge

volumes:
  db-data:

3.3 開発環境用オーバーライド

# docker-compose.dev.yml
version: '3.8'

services:
  backend:
    volumes:
      - ./backend:/app          # ホットリロード用
      - /app/node_modules       # node_modules除外
    environment:
      - DEBUG=true
    ports:
      - "3000:3000"
      - "9229:9229"             # デバッグポート

  frontend:
    volumes:
      - ./frontend:/app
      - /app/node_modules
    ports:
      - "5173:5173"

3.4 チェック項目

カテゴリ チェック項目
バージョン version: '3.8' 以上か
ネットワーク 適切なネットワーク分離がされているか
ボリューム データ永続化が適切に設定されているか
環境変数 .env ファイルから参照しているか
ヘルスチェック healthcheckが設定されているか
依存関係 depends_onで適切な依存関係が設定されているか
セキュリティ 機密情報がハードコードされていないか

4. Well-Architected Framework対応

4.1 5つの柱

確認項目
セキュリティ 暗号化、最小権限、ネットワーク分離、監査ログ
信頼性 Multi-AZ、Auto Scaling、バックアップ、DR
パフォーマンス効率 適切なインスタンスサイズ、キャッシュ、CDN
コスト最適化 不要リソース削除、Reserved/Spot活用
運用上の優秀性 IaC、CloudWatch、タグ付け、自動化

4.2 各柱のチェックリスト

セキュリティ

  • 全データの暗号化(at rest / in transit)
  • IAMポリシーは最小権限
  • セキュリティグループは最小権限
  • CloudTrailが有効
  • VPCフローログが有効
  • WAFの設定(該当する場合)

信頼性

  • Multi-AZ構成
  • Auto Scalingの設定
  • RDSの自動バックアップ
  • S3のバージョニング
  • DR計画の文書化

パフォーマンス効率

  • 適切なインスタンスタイプの選択
  • ElastiCacheの活用(該当する場合)
  • CloudFrontの活用(該当する場合)
  • RDSのリードレプリカ(該当する場合)

コスト最適化

  • 不要なリソースの削除
  • Reserved Instancesの検討
  • Spot Instancesの検討
  • S3ライフサイクルポリシー

運用上の優秀性

  • 全リソースにタグ付け
  • CloudWatch Alarmの設定
  • CloudWatch Logsへのログ集約
  • IaCによる完全な管理

5. 環境変数管理

5.1 Terraformからの環境変数出力

# outputs.tf
output "backend_env_vars" {
  description = "バックエンド用環境変数(非機密)"
  value = {
    DATABASE_HOST = aws_db_instance.main.address
    REDIS_HOST    = aws_elasticache_cluster.main.cache_nodes[0].address
    S3_BUCKET     = aws_s3_bucket.main.id
  }
}

output "backend_secrets_arn" {
  description = "Secrets Manager ARN"
  value       = aws_secretsmanager_secret.backend.arn
}

5.2 機密情報の管理

環境 管理方法
ローカル .env ファイル(.gitignore)
AWS Secrets Manager
CI/CD GitHub Secrets / GitLab CI Variables

変更履歴

日付 バージョン 変更内容
2026-01-02 1.0.0 初版作成(ai-frameworkからの取り込み)