Terraform 地形:共同创造和依靠
我有这个地形代码Terraform 地形:共同创造和依靠,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我有这个地形代码 // Route53 Zone module "zones" { source = "terraform-aws-modules/route53/aws//modules/zones" version = "~> 1.2.0" create = var.environment == "PRO" ? true : false zones = { "exam
// Route53 Zone
module "zones" {
source = "terraform-aws-modules/route53/aws//modules/zones"
version = "~> 1.2.0"
create = var.environment == "PRO" ? true : false
zones = {
"example.com" = {
comment = "example.com (production)"
tags = merge(var.global_tags, { environment = var.environment})
}
}
}
// Route53 Records
module "records" {
source = "terraform-aws-modules/route53/aws//modules/records"
version = "~> 1.2.0"
create = var.environment == "PRO" ? true : false
zone_name = keys(module.zones.this_route53_zone_zone_id)[0]
records = [
{
name = "ci"
type = "A"
ttl = 300
records = [
"34.24.14.04",
]
},
]
depends_on = [module.zones]
}
我选择了一个不同于PRO的环境,所以这个模块只创建。。。
运行完地形图后,我得到
错误:索引无效
在main.tf第287行的模块“记录”中:
287:zone\u name=键(module.zones.this\u route53\u zone\u zone\u id)[0]
|----------------
|module.zones.this_route53_zone_zone_id是没有属性的对象
给定的键未标识此集合值中的元素。
我该怎么处理?我想将我的代码与任何值一起使用到去变量环境中。我们在 使用此模块的解决方案如下所示:
- 为
example.com
- 使用可预测的方式引用
zone\u id=module.zones.zone[“example.com”].zone\u id
- 在区域中创建记录
dependens\u
。如果需要意外的依赖关系,我们还为terraform 0.12
提供了一种方法,使用模块dependens\u=[…]
这将强制依赖模块内的所有资源
module "zones" {
source = "mineiros-io/route53/aws"
version = "~> 0.3.0"
# not called 'create' but 'module_enabled' in our modules.
module_enabled = var.environment == "PRO"
# it is possible to create multiple zones at once all sharing the same
# delegation set (nameservers)
name = [
"example.com" ,
]
comment = "example.com (${var.environment})"
tags = merge(var.global_tags, {
environment = var.environment
})
}
module "records" {
source = "mineiros-io/route53/aws"
version = "~> 0.3.0"
module_enabled = var.environment == "PRO"
zone_id = module.zones.zone["example.com"].zone_id
records = [
{
name = "ci"
type = "A"
ttl = 300
records = [
"34.24.14.04",
]
},
]
}
请参见此处一些更复杂的示例:
这个计划看起来像:
#将创建module.records.aws_route53_record.record[“a-ci”]
+资源“aws\U路由53\U记录”“记录”{
+允许覆盖=错误
+fqdn=(应用后已知)
+id=(应用后已知)
+name=“ci”
+记录=[
+ "34.24.14.04",
]
+ttl=300
+type=“A”
+区域_id=(应用后已知)
}
#将创建module.zones.aws\u route53\u委派集。委派集[0]
+资源“aws_路由53_委派集”“委派集”{
+id=(应用后已知)
+名称\服务器=(应用后已知)
}
#将创建module.zones.aws_route53_zone.zone[“example.com”]
+资源“aws\U路由53\U区域”“区域”{
+comment=“example.com(PRO)”
+委托集id=(应用后已知)
+强制销毁=错误
+id=(应用后已知)
+name=“example.com”
+名称\服务器=(应用后已知)
+标签={
+“Name”=“example.com”
+“环境”=“专业”
}
+区域_id=(应用后已知)
}
计划:3添加,0更改,0销毁。
注意:为了清楚起见,您还可以合并模块的两个调用,并在同一个模块调用中创建区域和记录。我刚刚拆分了用法以匹配您最初的示例