我最近注意到Terraform或AWS对EC2用户数据进行了更改,这样更改就不会触发Terraform中的"替换"。引用Terraform aws_instance docs:对此字段的更新将触发EC2实例的停止/启动
我们的自动化部署依赖于用户数据的更改来触发替换,因此每次都会运行新的用户数据。
有没有一种方法可以告诉Terraform在注意到新的用户数据时替换实例?Lambda也有类似的问题,可以通过"source_code_hash"解决这里有类似的东西我可以用吗?
谢谢。
好消息是,terraform提供商aws有一个公开的问题通知单,许多人都在报告这个问题。已经报告了依赖user_data对其EC2实例发起替换的个人的反馈。这包括现在已断开的CI/CD管道。
jaredholgate提到他们计划添加一个名为user_data_replace_on_change的参数,默认情况下为false。
同时,您可以使用-replaceflag来针对您的ec2实例。例如:
terraform plan -replace aws_instance.my_ec2_instance
terraform apply -replace aws_instance.my_ec2_instance
出于引用目的,本期报道于:https://github.com/hashicorp/terraform-provider-aws/issues/23315
更改来自新的Terraform AWS提供商版本
如果您使用cloudinit运行userdata,一个简单的解决方案是使用cloudinit类型x-shellscript-per-boot而不是x-shellscript。
这意味着任何用户数据更新都将在每次停止/启动时运行。