![](/img/trans.png)
[英]Terraform | AWS ECS service | desired count value changes for every tf apply
[英]How to not override AWS desired_count with Terraform?
我正在 AWS 中管理一個自動擴展的雲基礎設施。
每次我運行 Terraform 時,它都想覆蓋desired_count
,即正在運行的實例數。
我希望這不會發生。 我怎么做?
約束:我管理多個不同的微服務,每個微服務都使用共享模塊設置其正在運行的實例,其中指定了desired_count
。 我不想更改共享模塊,這樣我的所有微服務都忽略了desired_count
。 相反,我希望能夠在逐個服務(即逐個調用者)的基礎上覆蓋或不覆蓋。
這排除了lifecycle { ignore_changes = ... }
的直接使用。 據我所知,要忽略的更改列表不能作為參數給出(當我嘗試時,我的 Terraform 會抱怨;請隨時告訴我您是如何成功做到這一點的)。
我的下一個想法(如果可能的話)是從存儲狀態中讀取值(如果存在),並要求一個desired_count
等於其當前值,或者我選擇的初始值(如果它沒有當前值)。 如果沒有並發 Terraform 運行(即沒有比賽),這應該完成同樣的事情。 這可能嗎?
我不是專家。 如果您提供非常詳細的答案,我將不勝感激。
生命周期參數會影響圖形的構建方式,因此無法對其進行參數化。 terraform 團隊並沒有排除可以實現這一點,但他們還沒有解決幾年來報告的問題。
您可以做的是創建兩個aws_ecs_service
資源,並在它們之間切換:
resource "aws_ecs_service" "service" {
count = var.use_lifecycle ? 0 : 1
...
}
resource "aws_ecs_service" "service_with_lifecycle" {
count = var.use_lifecycle ? 1 : 0
...
lifecycle {
ignore_changes = ["desired_count"]
}
}
鑒於此,您需要一種方法來引用您創建的服務。 你可以用本地來做到這一點:
locals {
service = var.use_lifecycle ? aws_ecs_service.service_with_lifecycle[0] : aws_ecs_service.service[0]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.