从 Terraform 说起 链接到标题
之前一直用 Terraform 管理阿里云资源:DNS 记录、安全组规则、ECS 查询。
Terraform 是优秀的基础设施编排工具,但日常运维中使用它有些痛点:
- 操作重:改一条 DNS 记录也要跑完改 HCL → plan → apply 全套流程
- State 维护繁琐:即使使用 OSS 后端,每次操作前要 pull state,操作后要 push state。多人操作时还要处理 lock 超时或冲突
- 查询不便:查一条 DNS 记录,要么
terraform state list再 grep,要么混用 aliyun CLI,反而多一套工具 - 过设计:只有几台 ECS、几十条 DNS 记录的场景,Terraform 的"全量声明式"模型过于笨重
这些痛点本质上是因为:Terraform 是为"基础设施全生命周期管理"设计的,不是为"今天改条记录明天加个端口"设计的。
而日常运维中后者才是常态。
更轻量的方案:aliyun CLI 链接到标题
aliyun CLI 一条命令就能完成 Terraform 改 HCL → plan → apply 三件事:
# 查 DNS 记录
aliyun alidns DescribeDomainRecords --DomainName example.com
# 添加 A 记录
aliyun alidns AddDomainRecord --DomainName example.com --RR www --Type A --Value 1.2.3.4
# 更新 A 记录
aliyun alidns UpdateDomainRecord --RecordId <id> --RR www --Type A --Value 5.6.7.8
# 查安全组规则
aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId <sg-id>
找到正确的命令和参数比跑 Terraform 快得多。但问题在于:每次都记不住这些命令的参数格式。
Skill:把命令模板变成可复用的知识 链接到标题
将常用命令整理为 Skill,agent 在需要时自动加载,不需要你记忆命令格式。
文件位置:.opencode/skills/aliyun-mgr/SKILL.md
---
name: aliyun-mgr
description: 阿里云资源管理 — 通过 aliyun CLI 管理 DNS 记录、安全组规则、查询 ECS 实例
---
Skill 的核心是命令模板和操作步骤:
## 前置准备
set -a; source .env; set +a
## DNS 管理(域名 example.com)
### 列出所有记录
aliyun alidns DescribeDomainRecords --DomainName example.com
### 添加 A 记录
aliyun alidns AddDomainRecord \
--DomainName example.com \
--RR <hostname> --Type A --Value <目标IP>
### 更新 A 记录
aliyun alidns UpdateDomainRecord \
--RecordId <recordId> \
--RR <hostname> --Type A --Value <新IP>
### 批量重定向:将所有指向旧 IP 的 A 记录改为新 IP
aliyun alidns DescribeDomainRecords --DomainName example.com | \
jq '.DomainRecords.Record[] | select(.Type == "A" and .Value == "<旧IP>") | .RecordId' -r | \
xargs -I {} aliyun alidns UpdateDomainRecord --RecordId {} --Type A --Value <新IP>
现在当你需要操作 DNS 时,agent 看到 aliyun-mgr 的 description 匹配你的请求,自动加载 Skill 内容,然后按模板执行。你只需要说需求,不需要记命令。
Subagent:隔离执行,不污染主上下文 链接到标题
Skill 虽然解决了记命令的问题,但 aliyun CLI 的输出(整屏 JSON)会直接注入主 agent 的 context,污染对话。
这就是 Subagent 的用武之地。
文件位置:.opencode/agents/aliyun-mgr.md
---
description: 阿里云资源管理。DNS 记录增删改、安全组规则管理、ECS 实例查询。
涉及阿里云操作时 MUST be used PROACTIVELY。
mode: subagent
permission:
bash:
"aliyun *": "allow"
"set -a*": "allow"
"source *": "allow"
"ssh *": "allow"
"jq *": "allow"
edit: deny
write: deny
---
你是一个阿里云运维助手,操作步骤参考 skill aliyun-mgr。
每次操作前先加载凭证。
执行完成后向主 agent 返回结构化结果。
Key 设计:
- 权限隔离:只允许 aliyun CLI 和 source 命令,禁止 edit/write,不会误改项目文件
- Context 隔离:Subagent 在独立的 context 中执行,所有 JSON 输出都在子 context 中消化,主 agent 只收到结果摘要
- Skill 引用:Subagent 不重复写命令模板,而是引用已有的 SKILL.md,知识维持单一来源
完整执行流程 链接到标题
当你说"帮我把 example.com 的所有 DNS 记录指向新服务器"时:
主 agent(收到请求)
│
├── AGENTS.md → "涉及阿里云 → @aliyun-mgr"
│
└── 调用 @aliyun-mgr subagent
│
├── [独立 context] source .env 加载凭证
├── [独立 context] 读取 SKILL.md 获取命令模板
├── [独立 context] aliyun alidns DescribeDomainRecords
├── [独立 context] 逐条 UpdateDomainRecord
├── [独立 context] 整理结果摘要
│
└── 返回主 agent:
"已完成。更新了 5 条 A 记录:
- gate 123.x → 5.6.7.8
- hello 123.x → 5.6.7.8
- rag-app 123.x → 5.6.7.8
- home-ping 123.x → 5.6.7.8
- 未变更指向其他 IP 的记录"
主 agent context 无污染
主 agent 看不到 aliyun CLI 的原始 JSON 输出,看不到凭证加载过程,只看到一段清晰的结果摘要。
和 Terraform 的对比 链接到标题
| Terraform | aliyun CLI + Skill + Subagent | |
|---|---|---|
| 操作步骤 | 改 HCL → plan → apply | 一句话需求 → Subagent 执行 |
| 查询效率 | terraform state list 或混用 CLI |
直接 aliyun CLI |
| State 管理 | OSS 后端、pull/push、lock 超时 | 无 state |
| 学习成本 | HCL 语法、provider 配置、state 机制 | aliyun CLI 参数(agent 帮你记) |
| 安全性 | plan 预览 + apply 确认 | Subagent 权限白名单 |
| Context 影响 | Terraform 输出注入主 agent | Subagent 隔离,零污染 |
| 适用场景 | 基础设施初始化/大规模变更 | 日常运维/查询/临时变更 |
两者不互斥。Terraform 仍然适合"基础设施即代码"的全量管理场景。但如果你只是日常查个记录、加个域名、改个安全组——这套 Skill + Subagent 方案比 Terraform 轻量得多。
原则:Skill 管知识,Subagent 管执行 链接到标题
Skill 和 Subagent 各司其职:
Skill aliyun-mgr/SKILL.md ← 知识库(命令模板、注意事项)
Subagent aliyun-mgr.md ← 执行器(权限控制、context 隔离)
- Skill 只放"怎么做"——命令模板、参数格式、注意事项
- Subagent 引用 Skill,但用自己的 prompt 和权限策略
- 修改命令模板只改 SKILL.md,不影响 Subagent 逻辑
社区有句话总结得精辟:Skills are how-to. Subagents are who-does-it.
总结 链接到标题
Terraform 是重型起重机,适合盖楼。日常运维需要的是一把趁手的螺丝刀。
Skill + Subagent 提供的价值:
- 不需要记命令——Skill 帮你记
- 不需要拼参数——模板就在那里
- 不需要和 JSON 搏斗——Subagent 消化原始输出
- 不需要维护 state——每次操作独立执行
- 不需要担心误操作——Subagent 权限白名单兜底
用 Terraform 还是用 Agent,取决于你要做的事。一次性地创建整个 VPC + 多台 ECS + RDS,Terraform 显然合适。但如果只是"帮我把 example.com 的 DNS 全部指向新 IP",这句话比改 HCL 再 plan apply 快一个数量级。