Terraform 地形:取决于使用count创建的资源
我已经创建了一组具有Terraform 地形:取决于使用count创建的资源,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我已经创建了一组具有count resource "aws_nat_gateway" "nat_gateway_ec1_dev" { count = 3 } resource "aws_route_table" "route_table_ics_ec1_dev_private" { vpc_id = module.vpc_dev.vpc_id count = 3 depends_on = [ ##HOW TO ADD NAT GATEWAY DEP
count
resource "aws_nat_gateway" "nat_gateway_ec1_dev" {
count = 3
}
resource "aws_route_table" "route_table_ics_ec1_dev_private" {
vpc_id = module.vpc_dev.vpc_id
count = 3
depends_on = [
##HOW TO ADD NAT GATEWAY DEPENDCIE HERE
]
}
我想在创建路由表时将其作为依赖资源,我在其中也使用了count
resource "aws_nat_gateway" "nat_gateway_ec1_dev" {
count = 3
}
resource "aws_route_table" "route_table_ics_ec1_dev_private" {
vpc_id = module.vpc_dev.vpc_id
count = 3
depends_on = [
##HOW TO ADD NAT GATEWAY DEPENDCIE HERE
]
}
我的问题是如何在route_表资源中添加NAT网关依赖项??由于这两个资源都是使用count创建的,因此我无法在此处静态指定名称我们通常不需要使用
dependens\u on
,因为在大多数情况下,对象之间的依赖关系由它们之间的数据流暗示。在这种情况下,当您编写描述到NAT网关的路由的route
块时,这将成为事实:
resource "aws_route_table" "route_table_ics_ec1_dev_private" {
vpc_id = module.vpc_dev.vpc_id
count = 3
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.nat_gateway_ec1_dev[count.index].id
}
}
由于该路由的配置取决于NAT网关的id,Terraform可以看到它必须等到NAT网关创建完成后才能开始创建路由表
dependens\u on
适用于对象之间数据流不足的更复杂情况,因为最终结果取决于远程API暗示的一些副作用,而不是Terraform中明确的副作用。这种情况的一个示例是,对象在单独的步骤中应用访问策略(例如使用S3 bucket和关联的bucket策略)之前不可用:
resource "aws_s3_bucket" "example" {
# ...
}
resource "aws_s3_bucket_policy" "example" {
bucket = aws_s3_bucket.example.bucket
policy = # ...
}
综上所述,Terraform可以理解,它必须在创建策略之前创建bucket,但是,如果配置中的其他地方也在使用该S3 bucket,那么它可能需要声明对策略的显式依赖,以确保在尝试该操作之前,必要的访问规则将生效:
# Service cannot access the data from the S3 bucket
# until the policy has been activated.
depends_on = [aws_s3_bucket_policy.example]
计数
和对于每个
都没有任何区别,因为依赖于
:地形中资源之间的依赖关系总是针对整个资源
和数据
块,而不是针对从它们创建的单个实例。因此,在您的情况下,如果需要对NAT网关的显式依赖(而不是),那么您将以相同的方式编写它,而不管在该资源上设置了count
:
# Not actually needed, but included for the sake of example.
depends_on = [aws_nat_gateway.nat_gateway_ec1_dev]
为什么在这里设置
取决于,而不是在设置使用NAT网关的路由时让Terraform自动解决这个问题?这个例子可能是好的,也可能不是好的,但问题是有效的;在更复杂的计划中,有时需要手动表示依赖关系。正如您所述,我已使用路由
修改了脚本,但我收到一个错误aws\u nat\u gateway.nat\u gateway\u ics\u ec1\u dev在地形计划
上是空元组。这是因为NAT网关创建错误吗??