簡體   English   中英

可以使用 Terraform 更新 AWS ECS 容量提供程序嗎?

[英]Can AWS ECS capacity provider be updated using Terraform?

我計划通過 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. )。

要解決此問題,您可以使用destroy-time provisioner將容量提供程序與 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兩次,然后在第一次運行將其分離、刪除並創建新的容量提供程序后重新附加新的容量提供程序。

當添加對就地更新支持的拉取請求被合並並發布時,您可以刪除 destroy-time provisioner,它將按預期工作,避免運行terraform apply兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM