引言
Terraform 是一个安全和高效的用来构建、更改和管理基础架构的工具,其实现了基础设施即代码(Infrastructure-as-Code,IaC),即通过代码来描述基础设施,可以通过代码来管理例如 AWS、阿里云等公有云资源或其他基础设施。Terraform 有很强大的扩展能力,通过 Provider 可对接各种类型的基础设施,如公有云(AWS、阿里云、华为云等)、Kubernetes、数据库、云服务接口等,有官方提供的 Provider,也有第三方提供的,同时官方也提供了 Terraform Registry,作为 Provider 的仓库。
但是官方的 Terraform Registry 在境外,和其他境外的仓库一样,有时下载非常慢。这对于使用体验非常不好,不过官方也提供了一些方式来加速下载,接下来我们来看看如何加速 Provider 的使用。
使用
首先确保已安装 Terraform Cli,Terraform Cli 支持使用配置文件或环境变量来配置。
环境变量
环境变量比较多,可参考官方文档,但是推荐优先使用配置文件。
配置文件
默认用户配置文件的位置取决于操作系统:
- Windows 系统:文件名为
terraform.rc
,在用户%APPDATA%
环境变量所指的目录下,不同的 Windows 版本的值不同。Win 10 的位置在C:\Users\用户名\AppData\Roaming
- Mac/Linux 系统:文件名为
.terraformrc
,在用户目录下,~/.terraformrc
也可以使用环境变量 TF_CLI_CONFIG_FILE
来指定自定义配置文件。
配置文件的内容为:
// 插件缓存路径
plugin_cache_dir = "/Users/wwt/.terraform.d/plugin-cache"
// 关闭内置的更新和安全检查
disable_checkpoint = true
// provider 安装配置
provider_installation {// 文件系统镜像filesystem_mirror {path = "/Users/user/.terraform.d/mirror"}// 网络镜像,仅针对阿里云 Provider 使用阿里云源network_mirror {url = "https://mirrors.aliyun.com/terraform/"// 限制只有阿里云相关 Provider 从国内镜像源下载include = ["registry.terraform.io/aliyun/alicloud","registry.terraform.io/hashicorp/alicloud",]}// 其他则从官方源获取direct {// 声明除了阿里云相关 Provider, 其它 Provider 保持原有的下载链路exclude = ["registry.terraform.io/aliyun/alicloud","registry.terraform.io/hashicorp/alicloud",]}
}
上面配置了一个阿里云镜像,针对阿里云的 Provider 可以从阿里云的源快速下载。其他国内的公有云也有类似的配置,可查看公有云的官方文档。
另一个配置项 filesystem_mirror
配置了本地镜像,由于每个 Terraform 项目 init 时会下载 Provider 到项目目录下,使用本地镜像可先将 Provider 下载到本地缓存,需要时先从本地下载,可大大加快 init 的速度。
最后 direct
的配置,找不到的从官方源下载 Provider。
配置完成后,可在任意项目目录下执行如下命令:
terraform providers mirror /Users/user/.terraform.d/mirror
先将项目的 Provider 下载的本地镜像源下,下一次其他项目 init 时就会先从本地镜像源优先查找。