您能否有条件地将生命周期块应用于Terraform 0.12中的资源。
例如,如果我想根据传递给模块的参数将此块添加到AWS ASG资源中。
[dafault]
答案 0 :(得分:4)
不,你不能。
生命周期设置都会影响Terraform如何构造和遍历依赖关系图。结果,只能使用文字值,因为对于任意表达式求值而言,处理太早了。
虽然并没有明确禁止实现目标的 for_each 或其他 dynamic 使用,但此类构造要到以后执行才能确定。
目前最好的解决方法是资源的两个单独副本,一个带有此块,另一个不带:
lifecycle {
ignore_changes = [
target_group_arns,
]
}
希望,将来的Terraform版本将支持动态生命周期块和其中的非常数表达式。
答案 1 :(得分:0)
感谢您回答问题的评论。 目前最好的解决方案似乎是复制资源,以便有一个带有life_cycle块的资源,一个不带life_cycle块的资源,并通过计数测试对其进行控制。
resource "aws_autoscaling_group" "asg" {
count = var.enabled && var.manage_targets ? 1 : 0
name = var.name
vpc_zone_identifier = var.subnets
launch_configuration = join("", aws_launch_configuration.lc.*.id)
load_balancers = var.load_balancers
target_group_arns = var.target_group_arns
min_size = var.min
max_size = var.max
default_cooldown = var.cooldown
termination_policies = var.termination_policies
health_check_grace_period = var.health_check_grace_period
health_check_type = var.health_check_type
enabled_metrics = var.enabled_metrics
tags = flatten([
{
key = "Name"
value = var.name
propagate_at_launch = true
},
{
key = "Environment"
value = var.envname
propagate_at_launch = true
},
{
key = "Service"
value = var.service
propagate_at_launch = true
},
var.extra_tags,
slice(
[{
"key" = "Patch Group"
"value" = var.patch_group
"propagate_at_launch" = true
}],
var.patch_group == "" ? 1 : 0,
1,
),
])
}
resource "aws_autoscaling_group" "asg_unmanaged_targets" {
count = var.enabled && !var.manage_targets ? 1 : 0
name = var.name
vpc_zone_identifier = var.subnets
launch_configuration = join("", aws_launch_configuration.lc.*.id)
load_balancers = var.load_balancers
target_group_arns = var.target_group_arns
min_size = var.min
max_size = var.max
default_cooldown = var.cooldown
termination_policies = var.termination_policies
health_check_grace_period = var.health_check_grace_period
health_check_type = var.health_check_type
enabled_metrics = var.enabled_metrics
lifecycle {
ignore_changes = [
target_group_arns,
]
}
tags = flatten([
{
key = "Name"
value = var.name
propagate_at_launch = true
},
{
key = "Environment"
value = var.envname
propagate_at_launch = true
},
{
key = "Service"
value = var.service
propagate_at_launch = true
},
var.extra_tags,
slice(
[{
"key" = "Patch Group"
"value" = var.patch_group
"propagate_at_launch" = true
}],
var.patch_group == "" ? 1 : 0,
1,
),
])
}