用途
本技能用于在编写 OCI 的 Terraform 配置、排查 Provider 报错、管理状态文件或实现 Resource Manager 栈时提供专家级知识。它围绕 Oracle Cloud Infrastructure 的基础设施即代码实践,重点解决可移植性、状态一致性与资源生命周期保护问题。
主要能力
避免硬编码
技能强调不要在 Terraform 中硬编码 OCID,否则在跨区域或跨租户迁移时会失效;应改用变量或数据源。可用域名称同样不应硬编码,因为 AD 名称带租户特定前缀,应通过 oci_identity_availability_domains 数据源动态查询。
生命周期与成本控制
在开发/测试环境中应显式设置 preserve_boot_volume = false,因为默认值为 true,实例销毁后会遗留引导卷。资料指出,一个拥有 10 个实例反复测试的开发团队可能因此每月产生 50–500 美元的隐性孤儿卷费用。生产数据库应添加 lifecycle 块,使用 prevent_destroy = true 防止误删,并用 ignore_changes 忽略控制台标签编辑。
资源标识稳定性
对于不应因列表重排而被替换的资源,应使用 for_each 配合稳定键,而不是 count。资料举例说明,将实例名列表从 ["web1","web2"] 改为 ["web0","web1","web2"] 会导致所有实例被重建。
状态管理
团队使用不应将 Terraform 状态存储在本地,而应使用 OCI Object Storage 的 S3 兼容后端,并配置 bucket、key、region、endpoint 及跳过校验等参数。技能还涵盖状态漂移的识别与修复(terraform plan、terraform refresh)、通过 terraform import 导入已存在资源、处理“409 Conflict — Resource Already Exists”、状态文件损坏的恢复步骤,以及启用 Object Storage 桶版本化作为预防措施。
销毁与超时
OCI 在销毁时强制依赖顺序,实例必须先于子网、子网先于 VCN 终止;可用 terraform graph 可视化依赖图,并按逆序使用 -target 销毁。对于长耗时资源,如 Autonomous Database 通常需要 15–30 分钟,默认 20 分钟超时可能造成误报失败,应显式设置 timeouts 块。
Provider 认证
技能说明认证优先级:显式 provider 块凭据、TF_VAR_* 环境变量、~/.oci/config 的 DEFAULT 配置、Instance Principal。常见陷阱是显式 provider 块会静默覆盖环境变量。在 OCI 计算实例上使用 Instance Principal 时,实例必须已在动态组中,否则会报出难以理解的授权错误。
Landing Zone
oracle-terraform-modules/terraform-oci-landing-zones 适用于需要 CIS OCI Foundations Benchmark 合规的全新租户搭建、多环境 hub-and-spoke 网络、集中日志、Cloud Guard 与安全区域。不适用于已有基础设施的棕地场景(过于主观,易造成状态冲突)或简单单应用部署(模块开销大于收益)。
使用方式
技能以“NEVER 清单”和正确/错误代码对照的形式组织,便于在编写或审查 Terraform 时直接参照。对于 Provider 配置、Resource Manager 栈 CLI 操作、常见资源完整 HCL 示例与 Landing Zone 用法,技能会按条件加载 references/oci-terraform-patterns.md;而 NEVER 清单、生命周期管理与状态排错已包含在主文件中,无需加载参考文件。
适用场景
适用于使用 Terraform 管理 OCI 资源的工程师与团队,尤其是需要跨区域/跨租户可移植配置、团队协作状态管理、生产资源保护、状态漂移修复与销毁排错的场景。
限制
资料未提供该技能的安装命令、收费方式、支持平台或具体版本要求,这些信息暂未提供。