如何避免"Objects have changed outside of Terraform"?



最近将我的Terraform项目升级到AWS提供商3.74.0和TF 1.1.4(从旧得多的版本(。

我突然得到了这个自动缩放时间表报告外部变化:

resource "aws_autoscaling_schedule" "api-svc-tst-down-schedule" {
scheduled_action_name = "api-svc-tst-down-schedule"
min_size              = 0
max_size              = 1
desired_capacity      = 0
// Minute Hour DayOfMonth Month DayOfWeek
recurrence             = "0 13 * * *" 
autoscaling_group_name = aws_autoscaling_group.api-svc-tst-asg.name
lifecycle {
ignore_changes = [start_time]
}
}

plan命令现在正在报告:

Note: Objects have changed outside of Terraform
Terraform detected the following changes made outside of Terraform since the
last "terraform apply":
# aws_autoscaling_schedule.api-svc-tst-down-schedule has changed
~ resource "aws_autoscaling_schedule" "api-svc-tst-down-schedule" {
id                     = "api-svc-tst-down-schedule"
~ start_time             = "2022-01-31T13:00:00Z" -> "2022-02-01T13:00:00Z"
# (7 unchanged attributes hidden)
}

如果我apply计划,那么TF似乎不会更改ASG(我假设它只是更新其状态文件(,并且通知会一直持续到第二天。

我注意到,AWS控制台确实显示Scheduled action有一个Start time,它似乎是由AWS设置的。

我尝试将start_time添加到ignored_changes中,但似乎没有什么不同,仍然报告为外部更改。

这是Terraform的已知问题吗(我没有通过谷歌搜索看到任何东西(
如何防止TF被标记为外部更改?

编辑:我还尝试按照注释中的建议设置start_time属性。但第二天,检测到的变化警告又回来了。

编辑2:我也尝试通过Terraform删除和重新添加资源,但第二天它仍然被标记为已更改。

这种不受欢迎的行为是Terraform 0.15.4版本中引入的故意更改。

目前无法避免。唯一的解决方法是必须教育所有团队成员(和工具(忽略";预期漂移";。

注意,这个";预期漂移";行为不仅限于aws_autoscaling_schedule资源,甚至不仅仅限于AWS提供商。对于云供应商在创建资源后更新属性的任何资源,该问题都会发生在许多不同的平台/类型上。

许多资源在创建后会立即报告漂移-通常情况下,您可以通过立即执行applyrefresh来更新TF状态来消除报告,只要AWS不更改这些属性,您就不会看到报告的资源再次更改。

云供应商会定期更新其他资源属性(如aws_autoscaling_schedule.start_time(。这些类型的资源将间歇性地报告";"Terraform"之外的对象已经改变;,无论何时运行plan

有一个已锁定的待跟踪问题:https://github.com/hashicorp/terraform/issues/28803.

请注意,这个问题之所以被锁定,是因为Hashicorp厌倦了人们告诉他们这对团队的负面影响。

相关内容

  • 没有找到相关文章

最新更新