terraform init 注册表服务无法访问

ash*_*ddy 3 terraform

我正在尝试使用办公室网络中的 terraform 构建虚拟机。我收到以下错误,因为服务器无法访问互联网。无论如何,我可以离线下载插件吗?

Initializing provider plugins...
- Checking for available provider plugins...

Registry service unreachable.

This may indicate a network issue, or an issue with the requested Terraform Registry.


Error: registry service is unreachable, check https://status.hashicorp.com/ for status updates
Run Code Online (Sandbox Code Playgroud)

Mar*_*ins 6

注意:当我最初编写该评论时,该评论中的说明是正确的,但情况从 Terraform v0.13 及更高版本开始略有变化,因为 Terraform 现在支持从多个注册表中的多个命名空间进行自动安装。

您可以在CLI 配置文档中找到有关为现代 Terraform 配置自动插件安装的更多信息,特别是在提供程序安装部分

我保留了下面的内容,对于现代 Terraform 来说大致如此,因为 Terraform 仍然支持-plugin-dir作为设置的遗留替代方案provider_installation,但下面的内容主要仅对 Terraform v0.12 及更早版本有用。


默认情况下,Terraform 会发出请求来registry.terraform.io查找提供程序插件。如果您在无法直接通过互联网访问服务的环境中运行 Terraform ,那么您确实可以要求 Terraform 在插件方面以仅本地模式运行。

为此,首先找到您想要使用的提供程序插件可执行文件。在撰写本文时,这些内容位于releases.hashicorp.com上,尽管该位置将来可能会发生变化。

将您下载的 zip 文件解压缩到一个目录中,因此您最终会得到一个平面目录,其中仅包含可执行文件,名称如下:

terraform-provider-aws_v2.0.0
terraform-provider-null_v1.0.0
terraform-provider-template_v2.0.0
Run Code Online (Sandbox Code Playgroud)

填充此插件目录后,您可以terraform init使用额外的选项运行-plugin-dir,将路径传递到刚刚填充的目录。例如:

terraform init -plugin-dir=/opt/terraform/plugins
Run Code Online (Sandbox Code Playgroud)

当您使用 时,这会禁用 Terraform 的自动发现和下载功能,并指示它-plugin-dir在此本地目录中查找。如果该目录中没有任何必要的插件,将返回错误,在这种情况下,您可以将这些额外的插件下载到您的目录中来修复该问题。terraform init

请注意,Terraform 插件是有版本控制的,Terraform 只接受与配置中给出的版本约束匹配的插件。通常自动安装行为可以自动选择合适的版本,但是当您自己手动下载插件时,您将需要选择合适的版本。

Terraform 有一个命令terraform providers,它将打印出当前配置的提供程序要求,作为提示来帮助您决定下载哪个版本。