上一篇《玩转阿里云 Terraform(二):Terraform 的几个关键概念》介绍了 Terraform 运行的几个关键概念,掌握了这些名词后,本文将详细介绍如何安装Terraform,为后续的动手实践最准备。
由于Terraform是用Golang语言编写的,并且是一个面向客户端的工具,因此对Terraform的安装等同于安装一个可执行的二进制文件,过程非常简单。本文以Mac OS为例,详细介绍如何在本地安装Terraform,并在文章最后介绍一种可以加速Terraform安装的方法。
1 Terraform 的安装
Terraform 的安装包含Terraform运行主体的安装,Provider和Provisioner等插件的安装。
1.1 Terraform 主体的安装
本文以Mac OS为例,通过三步完成对Terraform的安装:
第一步:下载Terraform版本到本地特定目录并解压
访问Terraform Release页面,点击想要下载的版本(强烈建议下载0.12.x版本,其对Terraform命令和语法规则做了很大的升级)目录,找到Mac系统的 darwin_amd64
包,点击直接下载到特定目录,如 workspace
,或者右键“复制链接地址”手动下载和解压:
$ mkdir workspace && cd workspace
$ wget https://releases.hashicorp.com/terraform/0.12.13/terraform_0.12.13_darwin_amd64.zip
$ unzip terraform_0.12.13_darwin_amd64.zip
第二步:配置安装目录到PATH,以便系统可以识别
$ export PATH=$(PWD):$PATH
# 如果想要永久生效,可以将其配置到Profile变量文件 ~/.bash_profile
$ echo export PATH=$(PWD):$PATH >> ~/.bash_profile
$ source ~/.bash_profile # 执行 source 命令使其生效
第三步:验证是否安装成功
$ terraform version
Terraform v0.12.13
如果想要在其他操作系统上安装Terraform,可以参考官方展示的安装步骤:https://learn.hashicorp.com/terraform/getting-started/install.html#installing-terraform
1.2 插件的安装
插件的安装包括对Provider和Provisioner的安装。插件的安装有两种方式:自动安装和手动安装。
init命令自动安装插件
编写了Terraform模板之后,在模板所在的目录下执行 terraform init
, terraform 将会根据模板中指定的Provider和Provisioner的类型或者Provider中的资源类型,自动加载最新的或者指定的Provider版本:
provider "alicloud" {
profile = "terraform"
region = "eu-central-1"
version = "1.60.0"
}
显示指定Provider及其版本,init
命令将自动下载阿里云Provider 1.60.0 版本:
$ terraform version
Terraform v0.12.8
+ provider.alicloud v1.60.0
如果在模板中不指定Provider,那么定义跟Provider版本相关的resource或者data source, init
命令同样可以完成对应Provider最新版本的下载:
resource "alicloud_vpc" "default" {
cidr_block = "172.16.0.0/16"
...
}
下载插件Package,手动安装插件
除了 init
命令自动下载外,还可以手动完成插件的安装。具体的操作步骤跟安装Terraform主体的方法一样,即访问Provider的下载页面:https://releases.hashicorp.com/terraform-provider-alicloud/ 下载特定版本的Package,并将其解压到Terraform主体所在的目录即可。感兴趣的同学可以尝试以下,本文不再赘述。
值得注意的是,如果模板中定义的Provider的版本与本地安装版本不一致,那么再次运行 init
命令时,将以模板优先。
2 Terraform 安装加速
相信大部分同学在上述的下载和安装过程中,经常会遇到下载失败的问题。这因为Terraform及其Provider等插件的所有发布的Release都存放在海外服务上,国内网络访问时会遇到下载速度慢甚至无法访问的情况。面对在这种情况,Hashicorp目前并未给出好的解决方案。
阿里云为了不影响大家对Terraform以及阿里云Provider的使用,在一款在线工具 CloudShell 上对Terraform进行了预安装,同时对 terraform init
做了加速处理,支持对包括阿里云Provider alicloud
在内的更多Provider,如 docker
, helm
, kubernetes
, local
, null
, random
等20多种。CloudShell的加速过程可以详见云栖博客《加速Terraform init》。
加速后的CloudShell将 terraform init
初始化的时间从 3min+ 降低到 3-6s ,大大降低了Terraform Provider安装和使用的成本,欢迎大家使用。