让我们说我正在创建一组AWS实例:
resource "aws_instance" "provision" {
count = var.aws_azs
...
}
然后,在一个单独的null_resource中,将配置步骤与配置步骤分离:
resource "null_resource" "configure" {
count = var.aws_azs
depends_on = [aws_instance.provision[count.index]]
...
}
该依赖关系是非法的,因为depends_on需要静态引用。但是,如果我改为将其更改为depends_on = ["aws_instance.provision"]
,则任何实例受到污染时,所有配置资源都将受到污染。有没有办法只依赖一个资源列表中的一个实例?
答案 0 :(得分:0)
depends_on
元参数根本不与污染机制相互作用。它仅用于帮助Terraform选择合适的顺序来执行操作。
给出如下配置:
resource "null_resource" "configure" {
count = var.aws_azs
depends_on = [aws_instance.provision]
}
这只是意味着,如果某个特定计划同时包含针对aws_instance.provision
和 null_resource.configure
实例的操作,则所有aws_instance.provision
操作将在开始任何操作之前完成null_resource.configure
个动作。绝不会导致计划任何其他更改。
如果您的目标是在替换相应的null_resource.configure
实例时重新创建aws_instance.provision
实例,则可以使用triggers
来实现,例如:
resource "null_resource" "configure" {
count = length(aws_instance.provision)
triggers = {
instance_id = aws_instance.provision[count.index].id
}
}
在这种情况下,决定者是aws_instance.provision[count.index].id
的 value :只要该ID不变,就不会重新创建null_resource
。由于id
的{{1}}仅在重新创建时才更改,因此aws_instance
除非重新创建特定的对应索引,否则不会重新运行。
在null_resource.configure
表达式中引用aws_instance.provision
也会创建隐式依赖关系,因此Terraform还将确保在开始任何{{1 }},而无需另外指定triggers
。