首页 > 解决方案 > terraform init 注册表服务无法访问

问题描述

我正在尝试使用办公网络中的 terraform 构建 VM,但由于服务器无法访问 Internet,因此出现以下错误。无论如何我可以离线下载插件吗?

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

标签: terraform

解决方案


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

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

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


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

为此,首先找到您希望使用的提供程序插件可执行文件。在撰写本文时,这些都在release.hashicorp.com上,尽管该位置将来可能会改变。

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

terraform-provider-aws_v2.0.0
terraform-provider-null_v1.0.0
terraform-provider-template_v2.0.0

一旦你填充了这个插件目录,你可以terraform init使用额外的选项运行-plugin-dir,将路径传递给你刚刚填充的目录。例如:

terraform init -plugin-dir=/opt/terraform/plugins

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

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

Terraform 有一个命令terraform providers可以打印出当前配置的提供者要求,作为提示帮助您决定下载哪些版本。


推荐阅读