Ash*_*des 2 amazon-web-services amazon-ecs terraform terraform-provider-aws
我原本计划通过 Terraform 配置Amazon ECS 容量提供程序,但我看到了一些问题,其中讨论了无法通过 Terraform 更新 Amazon ECS 容量提供程序。该功能现在可以安全使用吗?
截至 2021 年 6 月 21 日,Terraform 的 AWS 提供商目前无法更新 ECS 容量提供商。
当 ECS 容量提供程序在v2.42.0中首次引入时,您无法更新它们,甚至无法通过 API 或控制台删除它们,因此将ECS 容量提供程序添加到 Terraform AWS 提供程序的初始支持无法处理删除容量提供程序或允许更新标签以外的任何内容。在后来的v2.67.0 版本中添加了删除支持。
有一个开放的合并请求,增加了对更新 ECS 容量提供程序的支持,但尚未合并和发布。
目前,当您尝试更新 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,
]
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要运行terraform apply两次才能获得它,然后在第一次运行将其分离、删除并创建新的容量提供程序后重新附加新的容量提供程序。
当添加对就地更新的支持的拉取请求被合并并发布时,您可以删除销毁时间配置程序,它将按预期工作,避免需要运行terraform apply两次。
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |