data-iac について
data-iac は、データシステムのインフラをコードで記述するためのスキルです。Terraform、AWS CDK、CloudFormation を使うチーム向けに、モジュール再利用、環境の一貫性、状態管理、シークレット処理、リソースタグ付けを扱います。
主な機能
- 01Terraform モジュールのパターン
- 02AWS CDK コンストラクトのパターン
- 03リモート状態とロック
- 04全環境で共通のコード
- 05リソースタグ付けとコスト配分
- 06シークレットの取り扱い
活用シーン
- 01データシステム向けの再利用可能なモジュール作成
- 02開発・ステージング・本番環境への設定反映
- 03Terraform のリモート状態とロックの管理
- 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:サービス固有の設定
このスキルを使用する場面: データシステムのインフラストラクチャコードを記述するとき。
基本原則
- 再利用のためのモジュール — パターンをバージョン管理されたモジュールに切り出します。
- 環境間の同等性 — 開発、ステージング、本番では同じコードを使い、変数を変えます。
- 最小権限 — IAM には必要最小限のアクセス権を付与します。
- 状態は厳重に管理 — リモート状態とロックを使用し、手動編集は行いません。
- すべてにタグを付ける — コスト配分、所有者、環境を管理します。
パターン
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 のベストプラクティスに関するチェックリスト
コメント
Markdown 対応