【发布时间】:2021-06-24 23:20:05
【问题描述】:
我在 AWS 中管理一个自动缩放的云基础设施。
每次我运行 Terraform 时,它都想覆盖 desired_count,即运行实例的数量。
我不希望这种情况发生。我该怎么做?
约束:我管理多个不同的微服务,每个微服务都使用共享模块设置它们的运行实例,其中指定了desired_count。我不想更改共享模块,以使 all 我的微服务忽略 desired_count。相反,我希望能够逐个服务(即逐个调用者)覆盖或不覆盖。
这排除了直接使用lifecycle { ignore_changes = ... }。据我所知,要忽略的更改列表不能作为参数给出(当我尝试时,我的 Terraform 会抱怨;请随时告诉我你是如何成功的)。
我的下一个想法(如果可能的话)是从存储状态中读取值(如果存在),并要求desired_count 等于其当前值,或者我选择的初始值(如果它没有当前值)。如果没有并发的 Terraform 运行(即没有比赛),这应该完成同样的事情。这可能吗?
我不是专业的 terraformer。如果您给出非常详细的答案,我将不胜感激。
【问题讨论】:
-
是否不可能将变量/局部变量传递给
ignore_changes,并且该变量是[]或[desired_count],具体取决于should_ignore_desired_count之类的外部变量!? -
@luk2302:如果是这样,您必须为我拼出确切的语法
-
将变量
variable "should_ignore_desired_count" {default=false}添加到您的模块,然后在您的资源上指定lifecycle { ignore_changes = var.should_ignore_desired_count ? [desired_count] : [] }- 不确定这是否有效。 -
您能否展示一个您现在拥有的示例,然后解释您希望如何让某些计数由 Terraform 管理,而另一些则单独管理(例如,带外缩放或应用程序自动缩放) 以及您如何区分这些?理想情况下,这应该是minimal reproducible example 的形式,如果你可以简化它但获得足够的上下文。
-
@ydaetskcoR:这是一个非常合理的要求。以我目前的地球化技能,我认为我的老板不会让我执行那个简化过程,即使是在我们的测试环境中,也不会给我预算让我在一个新帐户上运行足够的实验。即使那里可能没有任何神奇的调味料,我也不乐意在 SO 上分享公司财产。此外,我认为如果我的问题完全可以解决,那么它可以以一种适用于多种上下文的方式在高度通用性上解决,那么你真的需要我的吗?
标签: amazon-web-services terraform terraform-provider-aws