Terraform 初始化慢~配置本地离线源

news2025/7/22 6:45:51

解决Terraform初始化慢~配置本地离线源 - 知乎 

这里不再介绍Terraform是啥了,可以参考最近上线的课程。直奔主题,配置一个离线的源。

需要手动或者terraform init一次下载, 然后缓存。后续直接使用缓存。

本次实践使用的是Linux/Mac 系统,如果是windows系统有两点不同的配置。

  • CLI配置文件的名称为terraform.rc
  • plugin_cache_dir: D:/xxx/xxx

这个你在windows下面是哪个目录下载的provider,那么在Linux上面也是对应的目录。

这个registry.terraform.io目录就是provider下载目录,将这个目录拷贝到你的terraform-plugin-cache目录下,那么就可以使用缓存了。

[root@jenkins terraform-plugin-cache]# pwd
/root/.terraform.d/terraform-plugin-cache
[root@jenkins terraform-plugin-cache]# ls
registry.terraform.io
[root@jenkins dev]# pwd
/root/terraform-huawei-test/environments/dev
[root@jenkins dev]# ls -a
.                 huawei-terraform.groovy  providers.tf         terraform.tfstate         variables.tf
..                main.tf                  .terraform           terraform.tfstate.backup  versions.tf
credentials .csv  params                   .terraform.lock.hcl  terraform.tfvars
[root@jenkins dev]# ls .terraform/
modules/     plugin_path  providers/   
[root@jenkins dev]# ls .terraform/providers/
registry.terraform.io

 

 

Terraform配置缓存


【摘要】 Terraform配置缓存 一 背景需要手动或者terraform init一次下载, 然后缓存。后续直接使用缓存。本次实践使用的是Linux/Mac 系统,如果是windows系统有两点不同的配置。Terraform使用预填充插件(防止通过init命令从web下载)。配置文件使用与 .tf 文件相同的 HCL 语法,但具有不同的属性和块。以下示例说明了一般语法;有关每个设置的含义的信息,...

 

 

 

Terraform配置缓存


一 背景

需要手动或者terraform init一次下载, 然后缓存。后续直接使用缓存。

本次实践使用的是Linux/Mac 系统,如果是windows系统有两点不同的配置。

Terraform使用预填充插件(防止通过init命令从web下载)。

配置文件使用与 .tf 文件相同的 HCL 语法,但具有不同的属性和块。以下示例说明了一般语法;有关每个设置的含义的信息,请参阅以下部分:

  • credentials :配置用于 Terraform Cloud 或 Terraform Enterprise 的凭据。有关详细信息,请参阅下面的凭据Credentials。
  • credentials_helper:为 Terraform Cloud 或 Terraform Enterprise 配置用于存储和检索凭据的外部帮助程序。有关详细信息,请参阅下面的凭据助手。
  • disable_checkpoint :设置为 true 时,禁用需要联系 HashiCorp 提供的网络服务的升级和安全公告检查。
  • disable_checkpoint_signature :当设置为 true 时,允许上述升级和安全公告检查,但禁止使用匿名 id 来删除重复警告消息。
  • plugin_cache_dir :启用插件缓存并以字符串形式指定插件缓存目录的位置。
  • provider_installation :自定义 terraform init 在安装提供程序插件时使用的安装方法。有关详细信息,请参阅下面的提供程序安装。

 

 

二 配置


# 创建缓存目录
mkdir -pv $HOME/.terraform.d/terraform-plugin-cache 

# 写入配置文件
cat > $HOME/.terraform.d/.terraformrc <<EOF
plugin_cache_dir  = "$HOME/.terraform.d/terraform-plugin-cache" 
disable_checkpoint = true
EOF

# 全局生效配置文件路径
export TF_CLI_CONFIG_FILE=$HOME/.terraform.d/.terraformrc

---------------------------------------------------------------------------------------------------------------------------------

1. 创建配置文件

.terraformrc是Terraform CLI的配置文件

plugin_cache_dir  = "$HOME/.terraform.d/terraform-plugin-cache" 
disable_checkpoint = true
  • plugin_cache_dir 是插件的缓存目录(此目录需要提前创建不然init报错)
  • disable_checkpoint 禁用 需要连接HashiCorp 提供的网络服务的升级和安全公告检查
mkdir -p $HOME/.terraform.d/terraform-plugin-cache

文件创建好了之后, 要通过配置TF_CLI_CONFIG_FILE变量,让TerraformCLI可以加载到配置文件。这个变量的值没有固定配置,而是取决于.terraformrc文件路径。

export TF_CLI_CONFIG_FILE=$HOME/Desktop/terraform/terraform-module-example/.terrafo
rmrc

 --------------------------------------------------------------------------------------------------------------------------------

2. 进行初始化 

插件下载方式有两种:

  1. 通过 terraform init 自动下载provider 插件;
  2. 登入registry.terraform.io手动到GitHub下载,并按照目录结构存放到plugin_cache_dir;

本次演示先使用terraform init进行操作, 如果手动到registry下载,需要按照目录结构存放;

terraform init
Initializing modules...
- mydns in ../../modules/dns
- myecs in ../../modules/ecs
- myssecgroup in ../../modules/secgroup
- myvpc in ../../modules/vpc

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/alicloud versions matching "1.164.0"...
- Installing hashicorp/alicloud v1.164.0...
- Installed hashicorp/alicloud v1.164.0 (signed by HashiCorp)

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.

初始化之后, 查看plugin_cache_dir中的内容:
$HOME/.terraform.d/terraform-plugin-cache/registry.terraform.io/hashicorp/alicloud/1.164.0/darwin_arm64

➜  .terraform.d pwd
/Users/lizeyang/.terraform.d

➜  .terraform.d tree
.
|____checkpoint_cache
|____checkpoint_signature
|____terraform-plugin-cache
| |____registry.terraform.io
| | |____hashicorp
| | | |____alicloud
| | | | |____1.164.0
| | | | | |____darwin_arm64
| | | | | | |____terraform-provider-alicloud_v1.164.0

 

 

 

三 初始化


terraform init进行联网下载,或者可以进入到registry.terraform.io 手动通过github下载

可以看到在缓存目录下已经成功缓存

3. 模拟断网,离线初始化

方法1:初始化时指定plugin-dir
terraform init --plugin-dir $HOME/.terraform.d/terraform-plugin-cache/

terraform init  --plugin-dir $HOME/.terraform.d/terraform-plugin-cache/
Initializing modules...
- mydns in ../../modules/dns
- myecs in ../../modules/ecs
- myssecgroup in ../../modules/secgroup
- myvpc in ../../modules/vpc

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/alicloud versions matching "1.164.0"...
- Using hashicorp/alicloud v1.164.0 from the shared cache directory

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.

Terraform has been successfully initialized!

方法2:定义Terraform插件使用本地mirror

provider_installation {
  filesystem_mirror {
    path    = "/Users/lizeyang/.terraform.d/terraform-plugin-cache"
    include = ["registry.terraform.io/*/*"]
  }
}

➜  dev terraform init
Initializing modules...

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/alicloud versions matching "1.164.0"...
- Using hashicorp/alicloud v1.164.0 from the shared cache directory

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.

Terraform has been successfully initialized!

到此就完成了terraform离线本地源的配置了, 除了这种方式外其实也可以基于terraform开放的HTTP API协议,使用Python Flask写一个registry server。

 

 

 

四 离线测试


4.1 制定plugin-dir

terraform init  --plugin-dir $HOME/.terraform.d/terraform-plugin-cache/

4.2 定义Terraform插件使用本地mirror

在.terraformrc 中添加filesystem_mirror

provider_installation {
  filesystem_mirror {
    path    = "/Users/xuel/.terraform.d/terraform-plugin-cache"
    include = ["registry.terraform.io/*/*"]
  }
}

$ terraform providers mirror /Users/larry/Software/terraform/plugins
terraform init -plugin-dir=/Users/larry/Software/terraform/plugins

4.3 两者的练习与区别

4.3.1 联系

前两个是相互联系的,因为它们都共享相同的底层机制:“文件系统镜像”插件安装方法。

4.3.2 区别

  • 使用terraform init -plugin-dir使Terraform实际上构造了一个one-offprovider_installation块,其中只包含一个引用给定目录的filesystem_mirror块。它允许您仅在一次安装操作中获得这种效果,而不是在中心位置为将来的所有命令配置它。具体而言,如果运行terraform init -plugin-dir=/example,则在功能上等同于以下CLI配置:
provider_installation {
  filesystem_mirror {
    path    = "/Users/xuel/.terraform.d/terraform-plugin-cache"
    include = ["registry.terraform.io/*/*"]
  }
}
  • 插件缓存目录不同,因为Terraform仍将访问配置的安装方法(默认情况下,每个提供商的原始注册表),但如果插件包文件已经在缓存中,则将跳过下载插件包文件(该文件实际上包含插件代码,而不是关于发布的元数据)。同样,它会将下载的任何新插件包保存到缓存中,以备将来使用。

    因此,这不会阻止Terraform尝试通过网络访问原始注册表来安装任何新插件。这只是一个避免重复使用re-downloading相同包的优化。

 

 

 

注意事项


  • 注意环境变量TF_CLI_CONFIG_FILE,全局生效添加之.bashrc中。
  • 到此就完成了terraform离线本地源的配置了, 除了这种方式外其实也可以基于terraform开放的HTTP API协议,使用Python Flask写一个registry server。
  • 如果想要自己手动下载,可以到这个网址:https://releases.hashicorp.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【App自动化测试】(十二)App异常弹框处理

目录1. app弹框异常处理——递归方式1.1 黑名单弹框异常处理逻辑1.2 实现代码1.3 方法缺点2. app弹框异常处理——装饰器版本2.1 装饰器的优势2.2 实现代码前言&#xff1a; 本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家&#xff0c;希望有志同道合的小伙伴…

计算机毕业设计之java+ssm交通信息网上查询系统

项目介绍 随着交通交通管理需求和在线交通管理渗透率的提升&#xff0c;中国交通管理在线市场将释放巨大潜力&#xff0c;交通管理系统的建设和发展成为业界广泛关注的重点&#xff0c;本文将对此进行分析&#xff0c;以期为我国交通管理电子商务的发展提供参考。交通管理业对…

石化能源行业工业互联网智能工厂解决方案

随着时代的发展&#xff0c;中国的工业企业逐渐进入了一个“新常态”&#xff1a;生产效率提升&#xff0c;非计划停运或检修造成的生产损失更为昂贵&#xff1b;高盈利的要求&#xff0c;需要更加关注能源使用效率&#xff1b;法律法规对于人员安全及环保合规要求更为严格&…

基于ffmpeg开发的多音频文件音量均衡程序

前言 audio_balance ✨ 基于ffmpeg开发的多音频文件音量均衡程序 ✨ 项目地址 GitHub&#xff1a;https://github.com/Ikaros-521/audio_balance gitee&#xff1a;https://gitee.com/ikaros-521/audio_balance 使用说明 Python&#xff1a;3.9 程序依赖 ffmpeg实现。请先安…

Centernet 生成高斯热图

写在前面的话 最近学校阳了&#xff0c;宿舍给封了&#xff0c;宿舍网络不好远程跑不了实验&#xff0c;随缘写一下对CenterNet源码的一个解读&#xff0c;之前写论文的那段时间留下来的工作&#xff0c;respect&#xff01; 这个文章主要是对CenterNet中生成高斯核的部分代码…

皕杰报表之语义层

1 语义层定义 语义层——是处于数据源与报表之间的一个概念&#xff0c;是用户和数据库之间的一个代码翻译层&#xff0c;通俗的讲是将数据库中的比较凌乱、复杂的数据对象&#xff08;例如&#xff1a;存储在table中的各个字段的记录&#xff09;按预先定义好的规则&#xff…

权限管理框架Shiro renren-security权限管理结构

权限管理框架Shiro&#xff1a; 一直在做项目&#xff0c;由于是二次开发的项目&#xff0c;今天才发现自己连权限控制都没有搞懂。二次开发的是基于renren开源的一个项目。 链接&#xff1a;https://gitee.com/renrenio/renren-security 这个项目主要使用shiro权限管理框架来…

31、Java高级特性——Math类、Random类、String类、StringBuffer类、StringBuilder类

目录 一、Math类 1、Math类中的方法 1.1 圆周率&#xff1a;PI 1.2 绝对值&#xff1a;abs() 1.3 返回最小近似值:ceil() 1.4 返回最大近似值 1.5 四舍五入&#xff1a;round() 1.6 最大值和最小值&#xff1a;max()/min() 1.7 求指定次幂 &#xff1a;po…

Java面向对象16:接口的定义与实现

普通类&#xff1a;只有具体的实现 抽象类&#xff1a;具体的实现和规范&#xff08;抽象方法&#xff09;都有 接口&#xff1a;只有规范&#xff01;自己无法写方法&#xff0c;专业的约束&#xff0c;约束和实现分离&#xff1a;面向接口编写&#xff08;大佬把接口定义好…

vue3 响应式 API 之 ref

ref 是最常用的一个响应式 API&#xff0c;它可以用来定义所有类型的数据&#xff0c;包括 Node 节点和组件。 没错&#xff0c;在 Vue 2 常用的 this.$refs.xxx 来取代 document.querySelector(‘.xxx’) 获取 Node 节点的方式&#xff0c;也是使用这个 API 来取代。 类型声明…

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

我为什么将机器学习主力语言从Python转到Rust

我为什么将机器学习主力语言从Python转到Rust 文章目录写在前面Python的痛点猴子补丁(Monkey Patch)缺乏参数类型校验允许跨作用域访问运行缓慢太多隐含规则Rust之剑猴子补丁参数类型作用域运行速度隐含规则结论写在前面 首先要声明一下&#xff1a;Python依然是我最喜欢的编程…

S5PV210的启动过程

一、内存 SRAM 静态内存 特点就是容量小、价格高&#xff0c;优点是不需要软件初始化直接上电就能用。DRAM 动态内存 特点就是容量大、价格低&#xff0c;缺点就是上电后不能直接使用&#xff0c;需要软件初始化后才可以使用。 单片机中&#xff1a;内存需求量小&#xff0c;而…

SpringBoot SpringBoot 开发实用篇 6 监控 6.7 自定义端点

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.7 自定义端点6.7.1 问题引入6.7.2 自定义端点6.7.3 小结6.7.…

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕 2022/11/25 19:07 01 obs.png obs studio &#xff08;64bit&#xff09; 02 obs 设置.png 03 obs 输出.png 04 obs默认为MKV.png 05 obs改mkv为MP4.png 警告&#xff1a;如果文件无法完成&#xff08;例如&…

供应Alkyne-PEG-Biotin,Alk-PEG-Biotin,炔烃-聚乙二醇-生物素

炔烃-聚乙二醇-生物素是一种化学PEG试剂其英文名为Alkyne-PEG-Biotin&#xff08;Alk-PEG-Biotin&#xff09;&#xff0c;它所属分类为Alkyne PEG Biotin PEG。 peg试剂的分子量均可定制&#xff0c;有&#xff1a;生物素-聚乙二醇5-炔烃、生物素-PEG 20-炔烃 、Biotin-PEG 2…

【kafka】九、kafka消费者分区分配策略

消费者分区分配策略 分区分配策略 一个consumer group中有个多个topic&#xff0c;一个topic有多个partition&#xff0c;所以必然会涉及到partition的分配问题&#xff0c;即确定哪个partition由哪个消费者进行消费。 kafka有两种分配策略&#xff0c;RoundRobin和Range Ro…

JAVA实训第三天

目录 方法引用 示例 接口 类 测试类 Stream ​编辑 Stream 的操作三个步骤 创建 Stream 的 4 种方法 常见Stream接口的继承关系 Stream的中间操作 中间操作常用方法 Stream的终止操作 Stream的终止操作-collect() 示例代码演示 作业 方法引用 在Lamda新特性的支持下&…

电商商家速看 这些TikTok选品玩法你知道多少?

调查报告显示&#xff0c;有3成的商家在TiTok平台上运营电商&#xff0c;谋求TikTok变现增长。在海内外文化习惯、市场环境存在较大差异的情况下&#xff0c;如何 TikTok选品是他们的主要困难。李先生是具有丰富经验的TikTok电商商家&#xff0c;他表示想要实现TikTok变现增长&…

【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析

文章目录前言参考目录关于 XSS 攻击框架集成配置说明测试方法一&#xff1a;通过过滤器测试方法二&#xff1a;通过 Xss 注解功能调用流程分析XSS 过滤器启动初始化Form 表单请求过滤JSON 对象请求过滤Xss 注解校验前言 之前在对接口进行传参时发现富文本包含的标签全部被过滤…