You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Terraform执行init操作时自动升级provider版本?

问题根因
  1. 你使用的-get=false参数仅用于禁止Terraform下载、更新Terraform模块,完全不控制provider的拉取逻辑,所以无法阻止provider升级。
  2. 你挂载的本地main.tf未添加aws provider的严格版本约束,Terraform默认会匹配符合兼容性要求的最新可用版本,即便本地存在旧版provider也会尝试拉取最新版。
  3. 你虽然将provider二进制放到了/bin目录,但未显式告知Terraform优先从该路径查找插件,Terraform默认会先查询远端registry的版本信息。
解决方法
  • 方案1:添加严格版本约束
    在挂载的main.tf(或同目录新增versions.tf)中添加如下配置,严格锁死aws provider版本:

    terraform {
      required_providers {
        aws = {
          source  = "hashicorp/aws"
          version = "=3.55.0"
        }
      }
    }
    

    版本号前的=表示必须严格匹配该版本,不允许使用更高版本。

  • 方案2:指定插件查找目录
    执行init命令时添加-plugin-dir参数,强制Terraform仅从你预存provider的/bin目录查找插件,完全不会请求远端registry:

    terraform init -get=false -plugin-dir=/bin
    
  • 方案3:镜像全局配置(一劳永逸)
    构建镜像时新增如下配置,后续运行容器无需额外加参数、修改挂载的tf文件:

    1. 设置全局环境变量:TF_PLUGIN_CACHE_DIR=/bin
    2. 预生成对应版本的.terraform.lock.hcl依赖锁文件,放到镜像的默认工作目录
    3. 可选开启TF_CLI_ARGS_init="-plugin-dir=/bin",给init命令设置默认参数
注意事项
  • 执行init命令时不要加-upgrade参数,该参数会强制忽略本地已有版本和锁文件配置,直接拉取符合版本约束的最新版provider。
  • 如果本地项目目录已存在.terraform.lock.hcl文件,需确保文件内记录的aws provider版本为v3.55.0,且哈希校验值和你预装的二进制匹配,否则Terraform会判定本地插件不合法,重新拉取远端版本。

内容的提问来源于stack exchange,提问作者grayaii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:00:01