未指定provider版本的AWS Terraform环境相关问题咨询
Terraform AWS Provider版本相关问题解答
1. 未固定provider版本的风险及版本约束选择
- 未固定版本存在明确的生产故障风险:AWS provider不同版本间会存在参数废弃、资源结构变更、默认行为调整等破坏性更新,若执行
terraform init时自动拉取到包含不兼容变更的新版本,可能出现terraform plan执行报错,甚至误修改、删除现有线上资源的情况。 - 不建议保持完全动态的版本取值,可根据场景选择约束策略:
- 生产环境建议固定到精确的小版本,例如
version = "= 3.15.0",避免版本迭代引入的未兼容问题 - 测试/开发环境可使用悲观版本约束,例如
version = "~> 3.15",允许自动拉取3.x分支下的最新补丁版本,兼顾兼容性和bug修复
- 生产环境建议固定到精确的小版本,例如
- 注:你使用的Terraform 0.13及以上版本更推荐将provider版本约束声明在根目录的
versions.tf文件的required_providers块中,规范度更高:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.15" } } }
2. 版本约束的指定时机
可以在资源创建完成后补充指定,无需在环境搭建初始就配置。补充配置后只要选择的版本与当前状态文件中已使用的provider版本兼容,不会对现有已创建的资源产生任何影响,仅会限制后续terraform init时拉取的provider版本范围。
3. 固定版本对已有模块的影响
不会直接导致已安装的模块不可用:
- 若你指定的固定版本在所有依赖模块允许的provider版本范围内,
terraform init可以正常执行,所有模块功能不受影响 - 若存在模块的provider版本约束与你指定的固定版本冲突,
terraform init阶段会直接抛出版本依赖冲突的报错,不会损坏已有资源或模块,你可以通过调整固定版本号到兼容范围、升级/替换对应模块、调整自定义模块的provider约束来解决冲突 - 已经写入状态文件的资源不会因provider版本固定操作失效,只要所选版本兼容对应资源的schema定义即可正常管理。
内容的提问来源于stack exchange,提问作者Oguzhan Aygun
相关产品推荐
相关产品推荐

