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

How to install multiple or two versions of Terraform?

我有很多使用 Terraform 的 gcp-provider 在 Terraform 0.11 中编写的 Terraform 模块,我想将它们升级到 Terraform 0.12。

为此,我需要保留我系统上安装的两个版本,并根据模块编写的版本使用版本。

我将在每个模块中一一进行,并根据 this documentation 使用 terraform 0.12upgrade 升级模块以与 Terraform 0.12 兼容。

如何在一个系统中安全地保留两个版本的 Terraform?

我使用 Ubuntu 18.04,我按照以下步骤安全地实现了这一点。可以按照类似的步骤在任何 Linux 发行版上执行相同的操作(确保您正在下载兼容的二进制文件。确认 here

注意 运行 以 root 或 sudo 用户执行以下命令

创建目录以保存 Terraform 二进制文件

$ mkdir -p /usr/local/tf
$ mkdir -p /usr/local/tf/11
$ mkdir -p /usr/local/tf/12

下载两个版本的二进制文件

  1. 下载 Terraform 0.11 的二进制文件并将其解压缩到单独的目录中:
    $ cd /usr/local/tf/11
    $ wget https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_linux_amd64.zip
    $ unzip terraform_0.11.14_linux_amd64.zip
    $ rm terraform_0.11.14_linux_amd64.zip
    
  2. 下载 Terraform 0.12 的二进制文件并将其解压缩到单独的目录中:
    $ cd /usr/local/tf/12
    $ wget https://releases.hashicorp.com/terraform/0.12.20/terraform_0.12.20_linux_amd64.zip
    $ unzip terraform_0.12.20_linux_amd64.zip
    $ rm terraform_0.12.20_linux_amd64.zip
    
  3. /usr/bin/ 目录中为两个 Terraform 版本创建符号链接:
    ln -s /usr/local/tf/11/terraform /usr/bin/terraform11
    ln -s /usr/local/tf/12/terraform /usr/bin/terraform12
    
    # Make both the symlinks executable
    chmod ugo+x /usr/bin/terraform*
    

调用不同版本

  • 现在,命令 terraform11 调用版本 0.11,terraform12 调用版本 0.12
  • 例子:
    $ terraform11
    $ terraform12
    

注意

  • 将二进制文件保存在单独的目录中有助于在不相互干扰的情况下分离它们的插件。

我强烈推荐 tfenv 工具。它可以理智而轻松地用于管理多个 terraform 安装。如果您曾经使用过 nvm(对于 nodejs)或 rvm(对于 ruby),就会很熟悉。

您甚至可以将 .terraform-version 文件添加到模块中,当您 cd 进入模块时,该工具会自动为您切换 Terraform 版本。

让您的生活更轻松并安装 tfswitch。它负责安装和切换您需要的版本;它就像一个魔法。

如果使用 terraform 的多个环境,tfenv 将是最好的工具。我最初有同样的错误并且能够 运行 tfenv use version-number 并且它解决了我的问题。对于背景,我在同一台计算机上将 terraform 用于个人和工作项目。