AWS ECS容量提供商是否可以使用Terraform进行更新



我本来打算通过Terraform提供亚马逊云服务器容量提供商,但我看到一些问题,这些问题都是关于通过Terraform更新亚马逊云服务器能力提供商是不可能的。现在使用该功能安全吗?

截至2021年6月21日,Terraform的AWS提供商目前无法更新ECS容量提供商。

当云服务器容量提供商首次在v2.42.0中引入时,您无法通过API或控制台更新它们,甚至无法删除它们,因此最初将云服务器容量供应商添加到Terraform AWS提供商的支持不处理删除容量提供商的问题,也不允许更新除标签之外的任何内容。在更高版本v2.67.0中添加了删除支持。

有一个开放的合并请求,增加了对更新云服务器容量提供商的支持,但还没有合并发布。

目前,当您尝试更新ECS容量提供程序时,Terraform会像处理所有不可变资源一样处理它,并销毁资源并重新创建它。这可能会导致Terraform出现问题,因为您无法删除ECS集群正在使用的容量提供程序(它会在The capacity provider cannot be deleted because it is associated with cluster: $CAPACITY_PROVIDER_NAME. Remove the capacity provider from the cluster and try again.中出错(。

为了解决这个问题,您可以使用销毁时间设置器将容量提供程序从ECS集群中分离出来,然后Terraform可以删除容量提供程序并创建一个新的容量提供程序。

resource "aws_autoscaling_group" "test" {
# ... other configuration, including potentially other tags ...
tag {
key                 = "AmazonECSManaged"
value               = ""
propagate_at_launch = true
}
}
resource "aws_ecs_capacity_provider" "capacity_provider" {
name = var.cluster_name
auto_scaling_group_provider {
auto_scaling_group_arn         = aws_autoscaling_group.test.arn
managed_termination_protection = "ENABLED"
managed_scaling {
maximum_scaling_step_size = 1000
minimum_scaling_step_size = 1
status                    = "ENABLED"
target_capacity           = 10
}
}
provisioner "local-exec" {
when = destroy
command = "aws ecs put-cluster-capacity-providers --cluster ${self.name} --capacity-providers [] --default-capacity-provider-strategy []"
}
}
resource "aws_ecs_cluster" "cluster" {
name = var.cluster_name
capacity_providers = [
aws_ecs_capacity_provider.capacity_provider.name,
]
}

然后,您需要运行terraform apply两次,使其重新连接新的容量提供程序,然后在第一次运行后将其分离、删除,然后创建新的容量提供方。

当添加对就地更新的支持的请求被合并并发布时,您可以删除销毁时间设置器,它将按预期工作,从而避免运行terraform apply两次。

最新更新