在Terraform中关联AWS Auto Scaling组至ELB目标组:选哪种方式?
在Terraform中关联Auto Scaling Group与负载均衡目标组的两种方式对比
两种实现方式
1. 直接在aws_autoscaling_group中配置target_group_arns参数
这种方式把关联关系作为ASG资源的内置属性,示例代码:
resource "aws_autoscaling_group" "example" { name = "example-asg" min_size = 1 max_size = 3 desired_capacity = 2 vpc_zone_identifier = aws_subnet.example.*.id target_group_arns = [aws_lb_target_group.example.arn] # 其他ASG配置项... }
2. 使用独立的aws_autoscaling_attachment资源
通过单独的资源实例管理ASG与目标组的关联,示例代码:
resource "aws_autoscaling_group" "example" { name = "example-asg" min_size = 1 max_size = 3 desired_capacity = 2 vpc_zone_identifier = aws_subnet.example.*.id # 其他ASG配置项... } resource "aws_autoscaling_attachment" "example" { autoscaling_group_name = aws_autoscaling_group.example.name target_group_arn = aws_lb_target_group.example.arn }
核心区别
- 生命周期绑定关系:
target_group_arns的关联属于ASG的一部分,销毁ASG时会自动移除该关联,无需额外操作。aws_autoscaling_attachment是独立资源,销毁ASG不会自动清理这个关联,需要手动销毁attachment资源,否则可能残留无效的关联记录。
- 变更灵活性:
- 修改
target_group_arns列表会触发ASG的整体更新,可能触发实例的重新分配(取决于ASG的更新策略配置)。 - 使用独立attachment时,添加/移除关联只需修改attachment资源,不会影响ASG的其他配置,变更粒度更细。
- 修改
- 状态管理逻辑:
- Terraform会将
target_group_arns的关联状态纳入ASG的资源状态中,而独立attachment是单独的状态条目,排查关联问题时需要分别查看两类资源的状态。
- Terraform会将
选择建议
- 如果关联关系与ASG生命周期完全绑定(ASG销毁时关联必须同步销毁),优先使用
target_group_arns,逻辑更简洁,减少资源冗余。 - 如果需要单独管理关联的生命周期(比如临时关联测试目标组后移除),或者需要给同一个ASG关联来自不同模块的多个目标组,使用
aws_autoscaling_attachment更灵活。
内容的提问来源于stack exchange,提问作者Mykoliux
相关产品推荐
相关产品推荐

