关于 opentofu
opentofu 是使用 HCL 声明式管理云基础设施的开源 IaC 技能,面向基础设施工程和云资源配置。它涵盖计划、部署、状态管理与加密,也包含 Pulumi 的 IaC 模式参考。
主要功能
- 01使用 HCL 声明式管理基础设施
- 02规划、应用和销毁资源
- 03管理远程状态与工作区
- 04通过模块复用基础设施配置
- 05参考 Pulumi 项目与自动化模式
适用场景
- 01配置多云资源
- 02为不同环境隔离状态
- 03将现有资源纳入管理
- 04在 CI/CD 中审核基础设施变更
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill opentofu安装后在 Claude Code 中输入/opentofu确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/cicd-integration.mdhcl-fundamentals.mdimport-migration.mdmodules.mdpulumi-sdk.mdpulumi-stacks.mdstate-encryption.mdstate-management.mdvariables-outputs.mdworkspaces.md详细介绍
OpenTofu
概述
OpenTofu 是一款开源的基础设施即代码工具,使用 HCL(HashiCorp Configuration Language)以声明式方式管理云基础设施。它是由社区驱动的 Terraform 分支,完全兼容现有的 Terraform 提供程序和模块,并提供原生状态加密等独有功能。Pulumi 则提供了另一种 IaC 方法:使用通用编程语言(TypeScript、Python、Go),而非 HCL。
适用场景: 以声明式方式管理云基础设施、配置多云资源、确保不同环境中的基础设施一致性、加密静态存储的状态(OpenTofu)、使用熟悉的编程语言实现 IaC(Pulumi)。
不适用场景: 更适合使用命令行工具的一次性脚本、应用层配置管理(使用 Ansible/Chef)、容器编排逻辑(使用 Kubernetes 清单)、简单的静态托管(使用平台原生工具)。
快速参考
| 模式 | 工具 / 命令 | 要点 |
|---|---|---|
| 初始化项目 | tofu init | 下载提供程序并初始化后端 |
| 预览更改 | tofu plan | 显示差异,但不应用更改 |
| 应用更改 | tofu apply | 配置 / 更新资源 |
| 销毁资源 | tofu destroy | 拆除受管理的基础设施 |
| 导入资源 | tofu import <addr> <id> | 将现有资源纳入管理 |
| 状态加密 | terraform.encryption block | OpenTofu 独有,使用密钥提供程序和 AES-GCM |
| 远程后端 | backend "s3" / backend "gcs" | 将状态存储在云存储中并启用锁定 |
| 工作区 | tofu workspace new <name> | 为每个环境隔离状态 |
| 使用模块 | module "name" { source = "..." } | 可复用的基础设施组件 |
| 输出值 | output "name" { value = ... } | 为其他配置或 CI 提供值 |
| 变量文件 | terraform.tfvars / -var-file | 覆盖特定环境的变量 |
| 创建 Pulumi 项目 | pulumi new typescript | 搭建 TypeScript IaC 项目 |
| Pulumi 预览 | pulumi preview | 显示计划的更改 |
| Pulumi 部署 | pulumi up | 配置 / 更新资源 |
| Pulumi 配置 | pulumi config set key value | 作用于堆栈的配置 |
| Pulumi 密钥 | pulumi config set --secret key val | 加密的配置值 |
| Pulumi 堆栈 | pulumi stack select <name> | 在不同环境之间切换 |
| 自动化 API | LocalWorkspace.createOrSelectStack() | 以编程方式管理堆栈 |
常见错误
| 错误 | 正确做法 |
|---|---|
| 在团队环境中将状态存储在本地 | 配置远程后端(S3、GCS、Azure Blob)并启用状态锁定 |
| 在 HCL 中硬编码提供商凭据 | 使用环境变量或提供商专属的身份验证链 |
未检查计划就运行 tofu apply | 先运行 tofu plan -out=plan.tfplan,再运行 tofu apply plan.tfplan |
| 手动编辑状态 | 使用 tofu state mv、tofu state rm 或 tofu import |
忽略 .terraform.lock.hcl | 提交锁文件,确保提供商版本可复现 |
对复杂的条件资源使用 count | 优先使用映射形式的 for_each,以确保资源寻址稳定 |
| 所有环境共用一个工作区 | 为每个环境使用独立工作区或后端配置 |
将密钥放入 terraform.tfvars | 使用 sensitive = true 变量、保险库或环境变量 |
| Pulumi:在组件类之外创建资源 | 将相关资源封装在 ComponentResource 中以便复用 |
| Pulumi:未等待异步操作完成 | 确保所有资源操作完成后再导出堆栈 |
在 CI/CD 中跳过 tofu plan | 始终先生成计划,并在管道中要求审批后再应用 |
未谨慎使用 -target | 优先使用完整计划;-target 可能导致状态不一致 |
委派
- 基础设施模式探索:使用
ExploreAgent - IaC 代码审查:使用
TaskAgent - 漂移检测分析:使用
TaskAgent
如果有
amazon-web-services技能,请将 AWS 资源模式委派给它。 如果有docker技能,请将容器基础设施模式委派给它。 如果有github-actions技能,请将 CI/CD 管道模式委派给它。
参考资料
评论
支持 Markdown