升级 terraform 到特定版本
Posted
技术标签:
【中文标题】升级 terraform 到特定版本【英文标题】:Upgrade terraform to specific version 【发布时间】:2019-10-10 12:17:50 【问题描述】:用例
我已经通过自制软件安装了 Terraform v0.11.13,并且按照 terraform 的建议,我想先升级到 v0.11.14 版本,然后再对 v0.12.0 进行重大升级。
问题
当我运行brew upgrade terraform
或从 terraform 网站下载 Mac 包时,我认为它会立即将我的 terraform 版本更新到 v0.12.0。
那么我该如何升级到 v0.11.14 呢?
【问题讨论】:
【参考方案1】:尤其是在玩 Terraform 0.12 测试版时,我学会了爱上tfenv。
安装后(在 MacOS 上通过brew install tfenv
),您可以轻松发现、安装和激活任何 Terraform 版本:
$ tfenv list-remote
0.12.0
0.12.0-rc1
0.12.0-beta2
0.12.0-beta1
0.12.0
0.11.14
...
$ tfenv install 0.11.14
[INFO] Installing Terraform v0.11.14
[INFO] Downloading release tarball from https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_darwin_amd64.zip
...
[INFO] Installation of terraform v0.11.14 successful
[INFO] Switching to v0.11.14
[INFO] Switching completed
如果您想切换到其他版本:
$ tfenv use 0.12.0
[INFO] Switching to v0.12.0
[INFO] Switching completed
【讨论】:
斯蒂芬,你是国王! 添加.terraform-version
文件会使tfenv
自动切换到给定目录的正确版本,如果尚未安装,它甚至会自动安装正确的版本。
我知道:'正在初始化提供程序插件... - 正在查找最新版本的 hashcorp/google... 错误:无法查询可用的提供程序包'
如果已经安装了最新版本。在从 tfenv 安装特定版本之前,您可能需要先取消链接 brew unlink terraform
。安装后,输入tfenv use 0.12.30
以使用新版本。【参考方案2】:
对于希望在不使用自制软件的情况下做同样事情的人:
-
获取源代码
$ wget https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_linux_amd64.zip
$ unzip terraform_0.11.14_linux_amd64.zip
-
授予二进制可执行权限并安装(将覆盖当前版本)
$ chmod +x terraform
$ sudo mv terraform /usr/local/bin/
-
确认版本
$ terraform --version
来源:https://titosoft.github.io/kvm/terraform-and-kvm/#installing-terraform
【讨论】:
我在你的代码中遇到这个错误 -bash: /usr/local/bin/terraform: cannot execute binary file 简单,直接。【参考方案3】:我已经使用了几年的 tfenv 有一个不错的替代品 - tfswitch。
-
简单的安装过程:
# MacOS
brew install warrensbox/tap/tfswitch
# Linux
curl -L https://raw.githubusercontent.com/warrensbox/terraform-switcher/release/install.sh | bash
-
提供 alpha、beta 和候选发布 terraform 版本。
支持多种版本更改选项,例如:
tfswitch VERSION_NUMBER
。
自动检测并切换到version.tf
文件中描述的版本。
自动切换到自定义路径下的自定义二进制文件(对权限有限的用户或服务很有帮助)。
使用.tfswitchrc
、.terrafom-version
自动切换 - 需要最少的设置并支持 bash、zsh 和 fish。
-
可以轻松与 Jenkins 和 CircleCI 集成 - 我还没有测试过,这些功能分别是 10 个月和 5 个月前添加的。
总之它是一个伟大而简单的帮手,会推荐这个。
【讨论】:
【参考方案4】:除了传统的解决方案之外,安装 tfswitch 是解决所需问题的简单方法。它只需一个命令即可更改 terraform 版本。 给定的link 中提供了安装和使用指南。
注意:
脚本初始化后不能降级到以前的版本 (terraform init
)。
【讨论】:
【参考方案5】:简单且最好的方法:-
# MacOS
brew install warrensbox/tap/tfswitch
# Linux
curl -L https://raw.githubusercontent.com/warrensbox/terraform-
switcher/release/install.sh | bash
然后使用任一命令更改版本-
1. tfswitch ==> you will see option to select version.
2. tfswitch 0.14.3 ==> this way
【讨论】:
【参考方案6】:我从 0.6 开始就使用 TF,并且在我的工作站上积极使用许多不同的版本。我用 direnv [https://direnv.net/] 来做这件事,因为它已经存在了很长一段时间,它可以很好地管理目录中的 TF 二进制版本,而且它允许我将每个目录的 env vars 传递到 TF 中。
示例 .envrc:
export AWS_PROFILE=prod
export PATH=/usr/local/terraform/terraform-0.12.20:$PATH
export TF_VAR_dd_api_key=REDACTED
export TF_VAR_dd_app_key=REDACTED
当我 cd 进入包含此 .envrc 的目录时,它不仅将正确的 TF 二进制文件放入我的 PATH 中,还设置了我的 AWS 配置文件,在这种情况下还设置了一些 DataDog API 密钥。
当我想升级 TF 时,我确保将所需的二进制文件放置到正确的位置并编辑 .envrc 使其位于 PATH 中。理想情况下,.envrc 不会被推送到 Github,因为其他人可能有不同的设置,尤其是 API 密钥不应该进入 repo。
我知道这有点过时,但对我来说效果很好。
【讨论】:
【参考方案7】:选择 tfswitch,简单高效。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于升级 terraform 到特定版本的主要内容,如果未能解决你的问题,请参考以下文章
在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源
如何在 terraform 中运行 kubectl apply 命令