terraform - 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 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
可以打印出当前配置的提供者要求,作为提示帮助您决定下载哪些版本。
推荐阅读
- c# - 具有最小值最大值的属性
- javascript - 在类中使用 bind()
- c - 如何使用 C 应用程序访问 FreeDOS 中的全部内存空间
- node.js - 我将如何根据 req.param 更改 MongoDB 活动数据库?
- c# - 无论健康状况如何,如何使 Healthbar 的宽度相同?
- c# - 如何使用 C# 获取文件夹中捕获的每个图像的日期
- java - 如何使用 Maven 设置构建脚本?
- kubernetes - Aws EKS:如何根据 SQS 指标扩展 pod?
- .net - 如何配置 Cosmos DB .NET 3.0 SDK 以使用驼峰式案例进行序列化?
- r - R中多个符号之前的gsub字符串