关于 data-iac
data-iac 是面向数据系统基础设施代码编写的技能,适用于使用 Terraform、AWS CDK 或 CloudFormation 管理基础设施的团队。它涵盖模块复用、环境一致性、状态管理、密钥处理与资源标记等实践。
主要功能
- 01Terraform 模块设计模式
- 02AWS CDK 构造模式
- 03远程状态与锁定
- 04跨环境使用相同代码
- 05资源标记与成本归属
- 06安全处理密钥
适用场景
- 01为数据系统编写可复用的基础设施模块
- 02在开发、预发布和生产环境间推广配置
- 03管理 Terraform 远程状态与锁定
- 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:特定服务的配置
在以下情况下使用此技能: 为数据系统编写基础设施代码。
核心原则
- 模块复用 — 将模式提取为有版本管理的模块。
- 环境一致性 — 开发、预发布和生产环境使用相同代码,仅变量不同。
- 最小权限 — 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 引用 |
| 没有标签 | 无法跟踪成本或所有权 | 为所有资源添加标签 |
检查清单
- 远程状态已启用锁定
- 所有资源均已添加标签(环境、项目、所有者)
- 代码或变量中不包含密钥
- 模块已进行版本管理并编写文档
- 所有环境使用相同代码
- 应用前已审查计划
参考资料
references/terraform-modules.md— 模块结构和模式
资源
assets/iac-checklist.md— 基础设施即代码最佳实践检查清单
评论
支持 Markdown