使用Terraform在OCI多区域创建VCN仅根区域生效问题咨询
配置修改方案
问题根因
你当前配置的核心问题是VCN模块内的资源未显式绑定对应区域的provider,导致只有默认根区域的资源被创建。
具体修改步骤
方案1:复用现有多provider别名配置(适配当前代码结构)
- 检查
./modules/vcn内部的VCN资源定义,确保两个区域的VCN资源分别绑定对应provider别名,示例如下:
# 根区域VCN resource "oci_core_vcn" "root_vcn" { provider = oci.root # 显式绑定根区域provider cidr_block = "10.0.0.0/16" compartment_id = var.compartment_ocid display_name = "root-vcn" # 其他VCN配置参数 } # 第二区域VCN resource "oci_core_vcn" "region1_vcn" { provider = oci.region1 # 显式绑定第二区域provider cidr_block = "10.1.0.0/16" compartment_id = var.compartment_ocid display_name = "region1-vcn" # 其他VCN配置参数 }
- 验证
var.region1取值为合法OCI区域标识(如ap-singapore-1、us-ashburn-1等),可临时添加输出调试:
output "region1_id" { value = var.region1 }
- 执行
terraform providers命令,确认输出中存在2个OCI provider实例,分别对应根区域和第二区域的配置。
方案2:优化为单区域模块复用(更易扩展多区域)
推荐使用该方案,后续新增区域只需新增provider配置和模块调用即可:
- 删除VCN模块
required_providers中的configuration_aliases配置,修改为通用单区域配置:
terraform { required_providers { oci = { source = "hashicorp/oci" version = ">= 1.0.2" } } }
- 模块内部的VCN资源不需要显式指定provider,使用默认OCI provider即可。
- 根目录多次调用VCN模块,分别传入不同区域的provider:
# 根区域VCN module "vcn_root" { source = "./modules/vcn" providers = { oci = oci.home } # 传入根区域VCN的对应参数 vcn_cidr = "10.0.0.0/16" vcn_name = "root-vcn" # 其他参数 } # 第二区域VCN module "vcn_region1" { source = "./modules/vcn" providers = { oci = oci.region1 } # 传入第二区域VCN的对应参数 vcn_cidr = "10.1.0.0/16" vcn_name = "region1-vcn" # 其他参数 }
验证
修改完成后执行terraform plan,输出中会显示两个VCN资源的创建计划,确认无误后执行terraform apply即可完成多区域VCN创建。
内容的提问来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

