运维部署
用 Terraform 生成并部署华为云资源时…
当用户想用 Terraform 在华为云上创建或部署基础设施(ECS、VPC、RDS、ELB、OBS 等)时,按九阶段流程生成配置并安全地执行部署。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 Terraform 生成并部署华为云特定
解决思路
- 凭证处理:从环境变量 HW_ACCESS_KEY 和 HW_SECRET_KEY 读取 AK/SK;若为临时/STS 凭证,必须从环境变量 HW_SECURITY_TOKEN(或 HUAWEICLOUD_SECURITY_TOKEN)读取并写入 terraform.tfvars 的 security_token 字段,因为 provider 无法可靠地从环境变量解析 security_token;若该环境变量未设置则省略(永久 AK/SK 场景)。在任何依赖凭证的步骤(资源查询、terraform plan 等)之前,先阅读 reference/guardrails.md 中的完整规则。若 API 或 Terraform 调用报认证错误,向用户说明具体错误,请其确认问题已解决后重试,不要指导用户如何配置凭证。
- 理解用户真实目标:用户可能直接描述资源(如创建 ECS 实例),也可能描述业务目标(如部署网站、上线应用)。必须先从用户目标推断出预期的华为云架构,而不只是看显式资源名。
- 确定资源集合:根据用户目标识别需要创建哪些资源、可复用哪些已有资源、资源之间存在哪些依赖。例如:简单公网网站可能需要 VPC、子网、安全组、ECS、EIP;托管数据库部署可能需要 VPC、子网、安全组、RDS;可扩展的公网服务可能需要 VPC、子网、安全组、ECS 或 AS、ELB 及公网访问。
- 提出资源方案供确认:在生成 Terraform 前,向用户提出具体资源方案供其确认,包含推荐规格、可用的候选选项、是新建还是复用已有资源、以及仅在来源可靠时给出的价格信息。不要要求用户手动提供每个参数,而是:先从目标推断可能的架构,再提出带推荐默认值的具体方案,最后只确认少数真正影响正确性、成本或架构的决策。
- 确认安全组规则(关键):先从用户目标推断可能端口(Web 服务器 → 80、443;SSH → 22;数据库 → 3306、5432),再询问用户确认端口(如“需要开放哪些端口?推荐:80、443、22”),然后基于确认的端口生成规则,而非默认规则。生成时每条规则都要包含 ethertype = "IPv4",并始终包含 egress 规则。禁止:只写 egress 规则而无 ingress 规则;未经询问用户就使用硬编码默认端口;生成与用户确认不符的规则。
- 生成任何代码前先验证资源可用性(强制、不可跳过):在写第一行 Terraform 之前,必须针对目标区域验证已确认方案中的每个资源规格。目标区域在步骤 4.3 已确认,若不知道区域说明 4.3 未完成,必须回头补齐。具体做法:第一步,先阅读 ../huawei-cloud-computing-query/SKILL.md(不可跳过),了解确切的调用格式、必需参数、参数格式以及如何传入目标区域;第二步,读完技能定义后,用其要求的精确参数调用 huawei-cloud-computing-query 技能,并传入 4.3 确认的目标区域,确认方案中每个资源规格确实存在且在该区域可用,任何无法确认的规格都不得出现在任何 .tf 文件中。禁止跨区域假设——在区域 A 可用的资源不代表在区域 B 可用,必须针对目标区域重新查询。禁止:未先阅读 SKILL.md 就调用该技能;猜测或编造调用参数;在资源规格无法确认可用时继续生成 Terraform;假设资源可用性可跨区域沿用。若查询失败(环境错误、网络问题、SDK 崩溃):必须立即停止,不得继续生成 Terraform;诊断并修复问题(调用该技能的环境检查、验证凭证、检查网络),重试查询,若再次失败则修复后继续重试;不存在“优雅降级”,未验证的规格就是等待发生的部署故障。唯一可接受的结果是:(a) 所有规格确认可用,或 (b) 某规格确认不可用并请用户另选。修改已有 Terraform 时(改规格、换区域、换实例类型等),在编辑任何 .tf 文件之前,必须针对新区域的新规格重新运行可用性查询,不要假设之前查询的结果仍然适用。
- 确认后生成 Terraform:生成前必须先阅读第 8.1 节映射表中的相关参考文档。按要求的文件结构和风格规则生成 Terraform 文件,必须生成全部必需文件(providers.tf、variables.tf、main.tf、terraform.tfvars、README.md)并在继续前确认它们存在。
- 验证凭证配置:在进入验证前,确认华为云凭证已通过环境变量配置好,AK/SK 处理规则见 reference/guardrails.md。
- 为 provider 下载配置华为云镜像:在运行 terraform init 之前配置华为云镜像,避免从官方 Terraform registry 下载缓慢;不要先尝试从官方 registry 下载,始终使用华为云镜像。步骤:检查本地 provider 缓存是否存在(位置见 validation-workflow.md);若缓存存在且版本 >= 1.90.0 则跳过下载;若需要下载,在项目目录创建 .tfrc 文件,内容为 provider_installation { network_mirror { url = "https://mirrors.huaweicloud.com/terraform/" include = ["registry.terraform.io/huaweicloud/*"] } };将 TF_CLI_CONFIG_FILE 环境变量设为该 .tfrc 文件路径;每条 terraform init 命令都必须在同一命令行中包含 TF_CLI_CONFIG_FILE,禁止不带该环境变量的裸 terraform init,例如:export TF_CLI_CONFIG_FILE="/path/to/project/.tfrc" && terraform init -upgrade。
- 验证并修复生成的配置:按顺序运行 terraform fmt -recursive → terraform init → terraform validate → terraform plan。任一步失败则检查错误、修复配置并重试,直到 terraform plan 成功。详细验证步骤见 reference/validation-workflow.md。
- 展示费用预估(关键,不可跳过):此步骤为强制项,必须在 terraform plan 成功后、任何确认对话框或 terraform apply 之前立即执行,跳过即属严重违规。按指定格式输出:💰 费用预估,列出即将创建的资源(资源类型(规格):预估费用)、预估合计、以及华为云价格计算器链接 https://www.huaweicloud.com/pricing.html#/calculator。必需元素(全部必须出现):带规格的资源列表(来自已确认方案)、每项资源的预估月费用(可用区间)、总预估费用、华为云价格计算器链接(固定 URL)。若无法估算某项费用,仍要列出该资源并标注“费用请参考价格计算器”,不得从列表中省略。进入步骤 4.9 前确认已输出上述全部必需元素,缺任何一项都要停下补上。
- 经用户确认后执行 terraform apply:费用预估展示后,弹出确认对话框请用户确认,再执行 apply。用户确认流程规则见 reference/guardrails.md。
- apply 错误修复循环:若 terraform apply 失败,检查错误、修复配置、重新运行 terraform plan,并重新执行 terraform apply,重复直到成功。
- apply 后资源校验:terraform apply 成功后,验证已部署资源与已确认方案一致;若发现差异,报告并修复。
- 遵守护栏原则:不编造规格、价格或资源事实;terraform apply 必须经用户明确确认;不索取敏感信息;未先阅读某技能的 SKILL.md 不得调用该技能。
- 遵循 Terraform 生成规则:从已确认的资源方案出发;遵循最小可行配置原则;优先保证 Terraform 有效性而非不必要的灵活性;在相关时使用已有的包引用。
- 使用参考与模板:生成前必须查阅第 8.1 节映射表(通用规则见 reference/guardrails.md 与 reference/terraform-generation-guide.md;安全组见 reference/VPC-best-practices/VPC-best-practices.md 的 Deploy Security Group,ethertype 为必填;带 EIP 的 ECS 见 reference/ECS-best-practices/Deploy-Instance-with-EIP-best-practices.md,使用 huaweicloud_compute_eip_associate、public_ip = .address;VPC/子网见 VPC-best-practices.md 的 Deploy Basic Network;RDS 见 reference/RDS-best-practices/RDS-best-practices.md)。若包中有接近目标场景的示例,以其为起点,保留有用结构、适配已确认方案、移除不需要的资源。将业务目标映射到相关服务参考(如“部署网站” → VPC + ECS + EIP,“托管数据库” → RDS + 网络)。用参考来改进而非过度构建,保持最终 Terraform 与用户确认的方案一致并遵循最小可行配置原则。不要盲目依赖模板,始终验证模板与已确认方案匹配,并通过正常验证流程验证。
- 完成前通过质量检查清单:生成的 Terraform 与已确认资源方案一致;已生成并验证全部 5 个必需文件(providers.tf、variables.tf、main.tf、terraform.tfvars、README.md);未向用户索取敏感信息;验证已到达 terraform plan,或已清楚说明阻塞原因;费用预估已在用户确认前展示(步骤 4.8,不可跳过);费用预估包含全部必需元素(资源列表、规格、每项资源预估费用、总费用、价格计算器链接);在 terraform apply 前已通过确认对话框请用户确认;仅在用户明确确认后才执行 terraform apply(或用户拒绝)。
适用边界 · 注意事项
- 用户没有华为云账号或未配置 AK/SK 凭证时(本技能依赖华为云 provider 与凭证)。
- 无法访问华为云镜像或目标区域不可达、且资源可用性查询无法完成时——此时必须停止,不得继续生成 Terraform。
- 用户只想了解架构设计或价格咨询、并不打算实际生成配置或执行部署时。