【问题标题】:Understanding lifecycle_rules and ignore_changes了解生命周期规则和忽略更改
【发布时间】:2021-03-09 05:13:51
【问题描述】:

我将尝试提供一些背景信息,我们正在通过 Terraform 和 GitLab CI/CD Pipelines 部署一个 Grafana 实例。

管道第一次运行实例加载完美,我们可以在网络浏览器中访问 grafana UI。但是,如果我们随后重新运行带有更改的管道,我们将在尝试再次在 Web 浏览器中点击 grafana UI 时收到 HTTP 500 错误,每个“偶数”数字都会运行(2、4、6、8 等)。 ) 将导致此问题,但“奇数”运行正常。

我发现解决方法是将 ignore_changes 块添加到 ASG,忽略对 load_balancerstarget_group_arns 的更改 - 按照 Terraform (https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_group) 的建议

但是我很难理解这种变化的实际含义,为什么这能解决问题?我有一个谷歌试图找到一些解释,但我不能说我理解我读过的任何内容。

谁能帮助解释将这些生命周期规则添加到 ASG 的实际作用?

【问题讨论】:

    标签: amazon-web-services terraform devops autoscaling


    【解决方案1】:

    ignore_changes 导致 terraform 仅在忽略属性更改时不考虑需要更新的资源,并且在实际执行更新时不考虑属性更改。典型情况是与自动缩放相关的任何事情:

    • 您使用 terraform 部署服务并指定需要 2 个实例
    • 自动缩放负责升级到 X 个实例
    • 下一次部署将出现并再次降级到 2 个实例 - 不理想!

    这就是为什么你真的告诉 terraform 忽略与某些属性相关的更改(例如desired_count),以便 terraform 不会回滚在实际应用程序生命周期中发生的一些缩放更改。


    另一个例子是:如果您有一个指定 KMS SSE 的存储桶,然后使用 terraform 将一个对象上传到该存储桶,但没有为该对象指定 KMS 密钥,则该对象将继承该存储桶的 KMS 密钥。但是在 terraform 代码中,您没有指定密钥,这意味着在下一次部署期间,terraform 将尝试更改/删除对象上的加密。这就是为什么在这种情况下我们经常设置ignore_changes 来设置kms_key_id


    如果您想弄清楚为什么在您的情况下需要/推荐ignore_changes,我建议您查看没有ignore_changes 的terraform 生成的计划。尝试了解哪些属性发生了变化,并尝试推断这些属性指向哪些资源,以及为什么它们的更改可能是预期/意外的。我对autoscaling_group 不够熟悉,无法对此进行推理。

    【讨论】:

    • 我认为这是有用的建议和宝贵的知识。然而,OP 对“为什么会发生”的答案还不清楚,对吧?
    • @GrzegorzOledzki 是的,绝对。我对autoscaling_group 资源和所涉及的负载均衡器不够熟悉,无法详细解释每个属性在给定情况下可能发生变化的原因。
    • 这是一个非常好的回应,非常感谢@luk2302!
    猜你喜欢
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多