Terraform导入S3桶后执行plan显示默认值相关无实际变更修改提示
变更出现的原因
这两项变更的出现属于Terraform导入现有资源时的常见现象,核心原因是Terraform侧参数默认值和状态文件导入后的字段缺失:
- 关于
acl = "private":
你使用的v1.0.5版本S3模块依赖的是旧版AWS Provider(3.x系列),该版本中aws_s3_bucket资源的acl参数默认值为private。导入现有存储桶时,因为你没有在模块调用中显式声明acl参数,且导入过程不会自动将云上对应属性的默认值同步填充到状态文件中,Plan阶段就会判定需要新增该参数并赋值为默认值。 - 关于
force_destroy = false:
这个参数是Terraform侧纯逻辑控制参数,根本不会同步到AWS云端,作用仅为控制执行terraform destroy时,是否允许先自动清空桶内对象再删除存储桶。该参数在AWS侧没有对应配置项,导入时状态文件中该字段为空,Plan阶段就会自动补充默认值false。
是否可以安全执行apply
绝大多数情况下可以安全执行,执行前只需做一个简单校验即可:
- 执行AWS CLI命令确认当前生产桶的ACL确实为
private,且权限和你代码中grant配置的一致:
aws s3api get-bucket-acl --bucket mycompany-log-bucket-myenvironment-myregion
只要返回结果和你的grant配置匹配,新增acl = "private"不会修改任何线上权限配置。
2. force_destroy = false完全不会修改云端存储桶的任何配置,不会对现有业务产生任何影响。
如果你不想执行本次无实际意义的apply操作,也可以手动修改状态文件补全这两个字段,或者在模块调用中显式添加以下两个参数,重新Plan就不会出现变更:
module "bucket" { # 原有参数保持不变 acl = "private" force_destroy = false }
内容的提问来源于stack exchange,提问作者Dimi
相关产品推荐
相关产品推荐

