amazon-web-services - Terraform Destroy 在触发钩子之前先删除 Terminate Lifecyclehook
问题描述
预期行为
当使用具有终止生命周期挂钩设置的自动缩放组部署资源时,Terraform destroy 命令应调用/触发终止生命周期挂钩并等待实例终止,然后终止生命周期挂钩被销毁。
实际行为
当使用带有终止生命周期挂钩设置的自动缩放组部署资源时,Terraform destroy 命令不会触发终止生命周期挂钩,而是注意到生命周期资源在自动缩放组/实例终止/销毁之前首先被销毁。
重现问题的步骤
下面的代码用于部署自动缩放组,具有初始生命周期挂钩和用于终止的单独生命周期资源。
resource "aws_autoscaling_group" "asg_group" {
count = var.autoscaling ? 1 : 0
name = var.asg_name
max_size = var.asg_max_size
min_size = var.asg_min_size
wait_for_capacity_timeout = "0"
health_check_grace_period = var.asg_health_check_grace_period
desired_capacity = var.asg_desired_capacity
launch_configuration = var.operating_system == "rhel" ?
aws_launch_configuration.launch_cf[0].name :
aws_launch_configuration.launch_cf_windows[0].name
vpc_zone_identifier = local.subnet_ids
tags = concat(local.asg_tags,local.custom_tags_format)
timeouts {
delete = var.asg_timeouts
}
initial_lifecycle_hook {
name = "${var.asg_name}-launching"
default_result = "CONTINUE"
heartbeat_timeout = 600
lifecycle_transition = "autoscaling:EC2_INSTANCE_LAUNCHING"
}
resource "aws_autoscaling_lifecycle_hook" "terminating" {
count = var.autoscaling ? 1 : 0
name = "${var.asg_name}-terminating"
depends_on = [aws_autoscaling_group.asg_group]
autoscaling_group_name = aws_autoscaling_group.asg_group[0].name
default_result = "CONTINUE"
heartbeat_timeout = 900
lifecycle_transition = "autoscaling:EC2_INSTANCE_TERMINATING"
lifecycle {
create_before_destroy = true
}
}
尝试过的解决方案:
尝试在 aws_autoscaling_lifecycle_hook 中添加depends_on,但没有帮助。
depends_on = [aws_autoscaling_group.asg_group]
解决方案
推荐阅读
- python - ModuleNotFoundError:在 Jupyter Notebook 中安装后没有名为“sqlalchemy”的模块
- bash - 通过 fxxd -p 管道传输的 openssl sha256 二进制摘要在多行上输出
- json - JSON路径组合
- html - 是否可以使用 bootstrap 4 网格以这种特定方式更改我的移动页面布局?
- apache-kafka - Flink kafka - 消息优先级
- r - 要因子的虚拟变量
- javascript - 如何操作 SVG 的 Z-index
- kotlin - 如果 channel.send() 没有接收到任何值,channel 会保持我的协程运行吗?
- python - 无法检索爬取信息
- jquery - 如何在将来使用 column().search() 过滤带有日期的行