当前位置: 首页 > news >正文

执行 terraform init 命令时 timeout 的解决方法

terrafrom 是一款常用来实现 IaC(基础设施即代码)的工具。通常的第一个命令往往是 terrafrom init。在执行此命令时,terrafrom 会根据已经配置好的 provdier 信息去下载安装对应云厂商的 provider。比如下面是一个腾讯云的 provider:

provider "tencentcloud" {secret_id  = "your-secret-id"secret_key = "your-secret-key"region     = "your-region"
}terraform {required_providers {tencentcloud = {source = "tencentcloudstack/tencentcloud"version = "1.81.70"}}
}

接着执行 terraform init

terraform initInitializing the backend...Initializing provider plugins...
- Finding tencentcloudstack/tencentcloud versions matching "1.81.70"...
╷
│ Error: Failed to install provider
│
│ Error while installing tencentcloudstack/tencentcloud v1.81.70: could not query provider registry for registry.terraform.io/tencentcloudstack/tencentcloud: failed to
│ retrieve authentication checksums for provider: the request failed after 2 attempts, please try again later: Get
│ "https://github.com/tencentcloudstack/terraform-provider-tencentcloud/releases/download/v1.81.70/terraform-provider-tencentcloud_1.81.70_SHA256SUMS": net/http: request
│ canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

可以看到,由于要连接 github 去下载对应版本的 plugin。但是 github 在国内访问有网络问题,所以就发生了 timeout 的错误。

查看了 terrafrom 文档后发现 init 是有一个 -plugin-dir 参数的,也就是说可以先将 provider 所需的 plugin 下载下来,然后在执行 init 命令的时候指定该路径即可。但是在尝试之后,会报错:

terraform init -plugin-dir=/root/.terraform.d/pluginsInitializing the backend...Initializing provider plugins...
- Finding tencentcloudstack/tencentcloud versions matching "1.81.70"...
╷
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider tencentcloudstack/tencentcloud: provider registry.terraform.io/tencentcloudstack/tencentcloud was not
│ found in any of the search locations
│
│   - /root/.terraform.d/plugins

最后在腾讯云官方找到了一劳永逸的解决方案。

具体来说,就是设置国内能够访问的 terrafrom registry 源。terraform 默认的 registry 源是 registry.terraform.io。只需要把这个源换成国内可访问的即可。

在用户目录下创建一个 .terrafromrc 文件,写入如下内容:

provider_installation {network_mirror {url = "https://mirrors.tencent.com/terraform/"// 限制只有腾讯云相关Provider, 从url中指定镜像源下载include = ["registry.terraform.io/tencentcloudstack/*"]}direct {// 声明除了腾讯云相关Provider, 其它Provider依然从默认官方源下载exclude = ["registry.terraform.io/tencentcloudstack/*"]}
}

接着重新执行 init 命令即可:

terraform initInitializing the backend...Initializing provider plugins...
- Finding tencentcloudstack/tencentcloud versions matching "1.81.70"...
- Installing tencentcloudstack/tencentcloud v1.81.70...
- Installed tencentcloudstack/tencentcloud v1.81.70 (verified checksum)Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.╷
│ Warning: Incomplete lock file information for providers
│
│ Due to your customized provider installation methods, Terraform was forced to calculate lock file checksums locally for the following providers:
│   - tencentcloudstack/tencentcloud
│
│ The current .terraform.lock.hcl file only includes checksums for linux_amd64, so Terraform running on another platform will fail to install these providers.
│
│ To calculate additional checksums for another platform, run:
│   terraform providers lock -platform=linux_amd64
│ (where linux_amd64 is the platform to generate)
╵Terraform has been successfully initialized!You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

timeout 的问题就此得到解决。

http://www.lryc.cn/news/295280.html

相关文章:

  • Docker Arthas 实战指南
  • freertos 源码分析四 任务创建的简单分析
  • 二叉树的锯齿形遍历,力扣
  • 避免Arrays.asList陷阱:优雅处理结构性修改的方法
  • 微信小程序(三十六)事件传参
  • 编译原理与技术(三)——语法分析(二)自顶向下-递归下降
  • okhttp 的 拦截器
  • Android:多线程下载网络图片
  • 跟着GPT学设计模式之原型模式
  • 博客|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)
  • 【gcc】webrtc发送侧计算 丢包率
  • elementui上传文件不允许重名
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Video媒体组件
  • Linux操作系统运维-Docker的基础知识梳理总结
  • PMP考试成绩如何查询?
  • 【Scala】 2. 函数
  • 14.0 Zookeeper环球锁实现原理
  • 课时16:本地变量_普通变量
  • 阿里云服务器centos_7_9_x64位,3台,搭建k8s集群
  • 代码随想录第二十八天
  • 【python】绘制爱心图案
  • 在 Elastic Agent 中为 Logstash 输出配置 SSL/TLS
  • Vue中对虚拟DOM的理解
  • golang通用后台管理项目——Go+Vue通用后台管理项目实战
  • 推动海外云手机发展的几个因素
  • python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和
  • 2020年通信工程师初级 综合能力 真题
  • 12.0 Zookeeper 数据同步流程
  • 作业2.6
  • Qt应用软件【协议篇】TCP示例