如何将Terraform降级到以前的版本?

时间:2020-05-19 21:51:59

标签: terraform

我已经安装了Terraform的版本(0.12.24),它比我们的配置中指定的所需版本(0.12.17)高。如何降级到较早的版本?我的系统是Linux Ubuntu 18.04。

5 个答案:

答案 0 :(得分:6)

只要您在Linux中,请在终端中执行以下操作:

rm -r $(which terraform)

安装新版本:

wget https://releases.hashicorp.com/terraform/0.12.17/terraform_0.12.17_linux_amd64.zip 

unzip terraform_0.12.17_linux_amd64.zip

mv terraform /usr/local/bin/terraform

terraform --version

就是我的朋友。

答案 1 :(得分:3)

您还可以签出Terraform Switcher-这将使您可以轻松地在不同版本之间进行切换。

答案 2 :(得分:1)

这里还有其他有效答案。如果您遇到类似我这样的情况,在从旧版本迁移到新版本的过程中需要多个Terraform版本的情况,这可能会很有用。

我为此使用tfenv: https://github.com/tfutils/tfenv

它提供了经过修改的terraform脚本,该脚本基于默认值或基于目录或父目录中最接近的.terraform-version文件来查找正确的terraform可执行文件。这样,我们就可以将Terraform 0.12版本用于已迁移的内容,而将Terraform 0.11用作我们的旧内容。

答案 3 :(得分:1)

删除现有版本-<form> <input oninput="checkDate(this)" required> <input type="submit"> </form>

显示可用版本列表-sudo apt remove terraform

sudo apt list -a terraform

安装所需版本

terraform/xenial 0.13.5 amd64 terraform/xenial 0.13.4-2 amd64 ... etc

答案 4 :(得分:0)

您不应该再在ubuntu中安装terraform。一般而言,该行业现在已经转移到docker。您可以这样安装docker:

sudo apt install -y curl
curl -LSs get.docker.com | sh
sudo groupadd docker
sudo usermod -aG docker $USER

安装后,您可以像这样运行terraform:

docker run -v $PWD:/work -w /work -v ~/.aws:/root/.aws hashicorp/terraform:0.12.17 init

假设您的.aws目录包含您的aws凭据。如果没有,您可以将该安装绑定(-v ~/.aws:/root/.aws)排除在命令之外,并且它将与您选择使用的任何方案一起使用。您可以轻松更改正在使用的terraform的版本,而无需安装任何软件。


与公认的答案相比,这种方法具有明显的优势。首先是易于版本控制。如果您已经使用软件包管理器安装了terraform,则可以将其卸载并安装所需的版本,或者可以使用Linux替代软件(如果发行版支持它们,或者您正在使用Linux,或者使用某种软件包管理器- -您可能正在使用Windows,并已下载并运行安装程序)。当然,这可能是一次性的事情,在这种情况下,您只需要执行一次就可以了,但是永远都可以,但是根据我的经验,由于安全性控制,大多数团队都需要更新版本,所以情况并不常见,而那些不需要定期更新软件的团队可能应该这样做。

如果这不是一次性的事情,或者您不想过多地使用版本控制,则可以下载二进制文件,正如对此帖子的评论所指出的那样。为每个版本提出一个目录方案很容易,或者只是删除您正在使用的目录并完全替换它。这可能非常适合您的用例。转到相应的网站(我已经忘记了哪个网站-Hashicorp或GitHub repo的发行页面,您始终可以搜索它,尽管这也需要时间-这是我的观点),然后找到正确的版本并下载。

或者,您只需键入docker run hashicorp/terraform:0.12.17,就会从预先配置的在线受信任存储库中自动为您自动提取正确的版本。

因此,安装新版本更加容易,并且Docker当然会为您运行校验和,并且还将扫描映像中的漏洞并将结果报告给开发人员。当然,您可以自己完成所有这些操作,因为正如对该答案的评论所指出的那样,它只是一个静态编译的二进制文件,因此,只需安装并运行即可。

只有它仍然不是那么容易。另一个好处是可以轻松地将容器化版本合并到docker-compose配置中,或在K8S中运行它。同样,您可能不需要此功能,但是鉴于行业正在朝这个方向发展,您现在可以学习使用标准化工具来做到这一点并将其应用于所有领域,也可以学习另一种技术来安装您使用的每个工具现在(从GitHub版本中获取一些并复制二进制文件,其他应使用软件包管理器,其他应下载,解压缩并安装,还有一些应使用安装程序从供应商网站安装,等等)等等。 。或者,您可以仅学习如何使用docker并将其应用于所有内容。现在,大量的现代工具和软件都以这种“标准”方式打包。这就是容器的真正意义所在-标准化。单一方法或多或少适合所有情况。

因此,您将获得适合大多数现代软件,额外的安全性和更轻松的版本控制的标准化方法,并且无论您在哪种操作系统上运行,这一切都几乎完全相同(几乎-它确实涵盖了Linux) ,Windows,OSX,Raspbian等)。

除了此处特别提到的安全性以外,安全性还具有其他好处,这些好处适用于企业环境,但是我没有时间在这里进行详细介绍,但是如果您有兴趣,可以看看以下内容: Aqua和Prisma Cloud Compute。当然,您也可以扩展基本的hashicorp / terraform容器并添加您喜欢的默认值。

就个人而言,除了运行Windows(没有wsl)外,我别无选择,但是我可以运行docker,所以我有一个带有别名的“瑞士军刀”容器,可以通过共享的docker套接字运行其他容器。这意味着在运行Windows时,我尽可能接近真实的Linux环境。我会定期处理我的工作容器,并且每当我更改使用的工具的版本时都不想重建它,因此我对那些工具的最新版本使用别名,并且新版本会自动提取到我的工作区。如果在执行过程中遇到问题,可以在别名中指定一个版本,然后继续工作直到准备升级。如果在处理其他人的代码时需要降级工具,则​​只需再次更改别名即可,所有内容都可以与旧版本一起使用。在我看来,这种工作流程是我使用过的最简单的方法,并且我已经这样做了35年。

我认为docker及其这种工程方法比之前的任何方法都更简单,更干净,更安全。我强烈建议大家尝试一下。