如何避免“对象已在 Terraform 之外发生更改”?

Sho*_*orn 4 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]
  }
}

Run Code Online (Sandbox Code Playgroud)

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)
    }
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试添加start_timeignored_changes但似乎没有什么区别,仍然报告为外部更改。

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

编辑start_time:我还尝试按照评论中的建议设置属性。但第二天又出现了检测到的更改警告。

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

Sho*_*orn 8

这种不良行为是 Terraform版本 0.15.4中引入的有意更改。

目前无法避免。唯一的解决方法是所有团队成员(和工具)必须接受教育以忽略“预期偏差”。

请注意,这种“预期偏差”行为不仅限于aws_autoscaling_schedule资源,甚至不仅仅限于 AWS 提供商。对于云供应商在创建资源后更新属性的任何资源,许多不同的平台/类型都会发生此问题。

apply许多资源在创建后会立即报告偏差 - 通常您可以通过立即执行或来更新 TF 状态来摆脱该报告refresh,并且只要 AWS 不对这些属性进行更改,您就不会看到报告的资源又变了。

其他资源属性(如aws_autoscaling_schedule.start_time)由云供应商定期更新。每当您运行plan.

有一个锁定的未解决问题需要跟踪:https://github.com/hashicorp/terraform/issues/28803

请注意,该问题已被锁定,因为 Hashicorp 厌倦了人们告诉他们这对他们的团队有多么负面的影响。