mcpField
D
data-iac

data-iac

github.com/alexanderstephenthompsonクラウド・DevOps37 回インストール
リポジトリ

data-iac について

data-iac は、データシステムのインフラをコードで記述するためのスキルです。Terraform、AWS CDK、CloudFormation を使うチーム向けに、モジュール再利用、環境の一貫性、状態管理、シークレット処理、リソースタグ付けを扱います。

主な機能

  1. 01Terraform モジュールのパターン
  2. 02AWS CDK コンストラクトのパターン
  3. 03リモート状態とロック
  4. 04全環境で共通のコード
  5. 05リソースタグ付けとコスト配分
  6. 06シークレットの取り扱い

活用シーン

  1. 01データシステム向けの再利用可能なモジュール作成
  2. 02開発・ステージング・本番環境への設定反映
  3. 03Terraform のリモート状態とロックの管理
  4. 04所有者とコスト追跡のためのリソースタグ付け

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alexanderstephenthompson/claude-hub --skill data-iac

インストール後、Claude Code で/data-iacを入力して読み込まれたか確認します。

同梱ファイルassets/iac-checklist.mdreferences/terraform-modules.md

詳細

Data IaC スキル

Version: 1.0 Stack: Terraform, AWS CDK, CloudFormation

コードのないインフラストラクチャには、記録が残りません。コンソールを手動で変更すると、デプロイが失敗するまで誰も気づかない構成ドリフトが発生します。値をハードコードすると、開発環境と本番環境の構成が知らないうちに乖離します。ローカルの状態ファイルでは、デプロイ内容を把握できなくなるまで、ノートパソコンが壊れるのは時間の問題です。

IaC を使うと、インフラストラクチャをレビュー可能、再現可能、復旧可能にできます。すべての環境で同じコードを使えば、ステージング環境で動作するものは本番環境でも動作します。これらのパターンは、単なる整理整頓のためのものではありません。必ず起こる問題に直面したときに、復旧できるようにするためのものです。


対象範囲と境界

このスキルで扱う内容:

  • Terraform モジュールのパターン
  • AWS CDK のコンストラクト
  • 状態管理
  • 環境の昇格
  • シークレットの取り扱い
  • タグ付けとコスト配分

他のスキルに委ねる内容:

  • security:IAM ポリシー、暗号化設定
  • data-aws:サービス固有の設定

このスキルを使用する場面: データシステムのインフラストラクチャコードを記述するとき。


基本原則

  1. 再利用のためのモジュール — パターンをバージョン管理されたモジュールに切り出します。
  2. 環境間の同等性 — 開発、ステージング、本番では同じコードを使い、変数を変えます。
  3. 最小権限 — IAM には必要最小限のアクセス権を付与します。
  4. 状態は厳重に管理 — リモート状態とロックを使用し、手動編集は行いません。
  5. すべてにタグを付ける — コスト配分、所有者、環境を管理します。

パターン

Terraform モジュールの構成
modules/
├── data-lake/
│   ├── main.tf
│   ├── variables.tf
│   ├── outputs.tf
│   └── README.md
└── glue-job/
    ├── main.tf
    ├── variables.tf
    └── outputs.tf

environments/
├── dev/
│   ├── main.tf
│   └── terraform.tfvars
├── staging/
│   └── ...
└── prod/
    └── ...
必須タグ
locals {
  common_tags = {
    Environment = var.environment
    Project     = var.project_name
    ManagedBy   = "terraform"
    Owner       = var.owner_email
    CostCenter  = var.cost_center
  }
}

resource "aws_s3_bucket" "data_lake" {
  bucket = "${var.project_name}-${var.environment}-data-lake"
  tags   = local.common_tags
}
CDK スタックのパターン
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';

interface DataLakeStackProps extends cdk.StackProps {
  environment: string;
  projectName: string;
}

export class DataLakeStack extends cdk.Stack {
  public readonly rawBucket: s3.Bucket;
  public readonly curatedBucket: s3.Bucket;

  constructor(scope: Construct, id: string, props: DataLakeStackProps) {
    super(scope, id, props);

    this.rawBucket = new s3.Bucket(this, 'RawBucket', {
      bucketName: `${props.projectName}-${props.environment}-raw`,
      versioned: true,
      encryption: s3.BucketEncryption.S3_MANAGED,
    });

    this.curatedBucket = new s3.Bucket(this, 'CuratedBucket', {
      bucketName: `${props.projectName}-${props.environment}-curated`,
      versioned: true,
      encryption: s3.BucketEncryption.S3_MANAGED,
    });
  }
}
リモート状態(Terraform)
terraform {
  backend "s3" {
    bucket         = "company-terraform-state"
    key            = "data-platform/${var.environment}/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-locks"
  }
}

アンチパターン

アンチパターン問題解決策
ローカルの状態ファイル状態の喪失、共同作業ができないロック機能付きのリモートバックエンドを使用する
値のハードコード環境間で昇格できない変数と環境ごとの tfvars を使用する
モジュールがないコピー&ペーストが増え、環境間で乖離する再利用可能なモジュールに切り出す
コンソールでの手動変更構成ドリフト、未文書化コードにインポートするか、コードで再作成する
コードや状態にシークレットを記述セキュリティリスクSecrets Manager を使用し、ARN で参照する
タグ付けがないコストや所有者を追跡できないすべてにタグを付ける

チェックリスト

  • ロック機能付きのリモート状態
  • すべてのリソースにタグを付ける(環境、プロジェクト、所有者)
  • コードや変数にシークレットを含めない
  • モジュールをバージョン管理し、文書化する
  • すべての環境で同じコードを使用する
  • apply の前に plan をレビューする

参考資料

  • references/terraform-modules.md — モジュールの構成とパターン

アセット

  • assets/iac-checklist.md — Infrastructure as Code のベストプラクティスに関するチェックリスト

コメント