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. 03管理 Terraform 远程状态与锁定
  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

详细介绍

数据 IaC 技能

版本: 1.0 技术栈: 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 引用
没有标签无法跟踪成本或所有权为所有资源添加标签

检查清单

  • 远程状态已启用锁定
  • 所有资源均已添加标签(环境、项目、所有者)
  • 代码或变量中不包含密钥
  • 模块已进行版本管理并编写文档
  • 所有环境使用相同代码
  • 应用前已审查计划

参考资料

  • references/terraform-modules.md — 模块结构和模式

资源

  • assets/iac-checklist.md — 基础设施即代码最佳实践检查清单

评论

支持 Markdown