簡體   English   中英

如何不使用 Terraform 覆蓋 AWS desired_count?

[英]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.

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