最近将我的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提供商。对于云供应商在创建资源后更新属性的任何资源,该问题都会发生在许多不同的平台/类型上。
许多资源在创建后会立即报告漂移-通常情况下,您可以通过立即执行apply
或refresh
来更新TF状态来消除报告,只要AWS不更改这些属性,您就不会看到报告的资源再次更改。
云供应商会定期更新其他资源属性(如aws_autoscaling_schedule.start_time
(。这些类型的资源将间歇性地报告";"Terraform"之外的对象已经改变;,无论何时运行plan
。
有一个已锁定的待跟踪问题:https://github.com/hashicorp/terraform/issues/28803.
请注意,这个问题之所以被锁定,是因为Hashicorp厌倦了人们告诉他们这对团队的负面影响。