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

Posted

技术标签:

【中文标题】如何安装多个或两个版本的 Terraform?【英文标题】:How to install multiple or two versions of Terraform? 【发布时间】:2020-05-23 14:37:35 【问题描述】:

我有很多使用 Terraform 的 gcp-provider 在 Terraform 0.11 中编写的 Terraform 模块,并希望将其升级到 Terraform 0.12。

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

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

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

【问题讨论】:

【参考方案1】:

我使用 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

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

    下载并解压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
    
    下载并解压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
    
    /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

注意

将二进制文件保存在单独的目录中也有助于将它们的插件分开,而不会相互干扰。

【讨论】:

【参考方案2】:

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

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

【讨论】:

对于那些怀疑者来说,这真的有效!一个简单的brew install tfenv 可以让您执行tfenv install min-required && tfenv use 0.15.4 之类的操作。非常适合在项目之间轻松切换!【参考方案3】:

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

【讨论】:

以上是关于如何安装多个或两个版本的 Terraform?的主要内容,如果未能解决你的问题,请参考以下文章

Terraform:如何在单个资源块中提供多个 lambda 函数 zip 文件

Terraform - 为变量指定多个可能的值

使用 terraform 创建多个 GCP 存储桶

如何在 Windows 上使用多个版本的 Julia

如何发现现有的 Terraform 版本

使用terraform“数据”时如何重新转动多个对象?