升级 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。
    可以轻松与 JenkinsCircleCI 集成 - 我还没有测试过,这些功能分别是 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 到特定版本的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 在“计数”中设置多个变量

在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源

如何在 terraform 中运行 kubectl apply 命令

如何安装多个或两个版本的 Terraform?

如何使用 terraform 将 aws ec2 私有 ips 传递给模板文件

terraform 将云作曲家从 1.0 升级到 2.0?