《Terraform 101 从入门到实践》 第二章 Providers插件管理
《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。
不怕出身低,行行出状元。
插件
Terraform可以对多种平台的多种资源进行管理,这个是通过插件来实现的。
这里的插件,在Terraform的世界也叫Providers,也是一个个可执行文件。不同的插件完成不同的功能,对接AWS,就要使用AWS的插件;对接GCP,就要用GCP的插件。
当我们通过terraform init初始化一个项目时,Terraform就会根据配置帮我们下载插件。在我们执行apply的时候,就会调用这些插件实现对应的资源管理。
我们可以到官方仓库( https://registry.terraform.io/browse/providers )去搜有什么插件可用,这里有极其丰富的插件,也有详细的使用说明:

接下来,我们就插件探讨几个问题:
- 怎么指定下载哪些插件和版本号?
- 从哪里下载?
- 下载到什么地方?
- 没有对插件库有访问权限的环境下怎么处理?
- 是否每个项目都要下载相同的插件?
指定下载哪些插件和版本
Terraform是通过解析required_providers知道需要哪些插件,一般习惯是定义一个verion.tf文件,把相关配置都放在这个文件里,比如:
terraform {required_version = "= v1.0.11"required_providers {local = {source = "hashicorp/local"version = "= 2.1.0"}random = {source = "hashicorp/random"version = "3.1.0"}}
}
这个文件定义了Terraform核心组件的版本,还定义了local和random插件及其版本号。上面指定Terraform版本为1.0.11,local版本为2.1.0,random版本为3.1.0。
我们看这里的版本号有两个等于=号,会不会觉得奇怪?其实这是HCL语言的一个特性,除了=号,还可以是>、<=等,这样可以指定版本范围,而不只是某个特定版本。
从哪里下载
可以通过命令terraform providers查看当前项目配置的插件是从哪里下载的。如下:
$ terraform providersProviders required by configuration:
.
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.terraform.io/hashicorp/local] 2.1.0
默认是从官方的公共仓库registry.terraform.io下载的。
如果需要指定其它仓库,代码如下:
terraform {required_version = "= v1.0.11"required_providers {local = {source = "hashicorp/local"version = "= 2.1.0"}random = {source = "hashicorp/random"version = "3.1.0"}pkslowcloud = {source = "registry.pkslow.com/examplecorp/pkslowcloud"version = "0.1.0"}}
}
这里pkslowcloud就是使用自定义的仓库地址,执行providers命令如下:
$ terraform providersProviders required by configuration:
.
├── provider[registry.terraform.io/hashicorp/local] 2.1.0
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.pkslow.com/examplecorp/pkslowcloud] 0.1.0
注意:pkslowcloud实际不存在,大家不必尝试下载使用。
下载到什么地方
执行terraform init进行初始化,就会下载插件:
$ terraform initInitializing the backend...Initializing provider plugins...
- Finding hashicorp/random versions matching "3.1.0"...
- Finding hashicorp/local versions matching "2.1.0"...
- Installing hashicorp/random v3.1.0...
- Installed hashicorp/random v3.1.0 (signed by HashiCorp)
- Installing hashicorp/local v2.1.0...
- Installed hashicorp/local v2.1.0 (signed by HashiCorp)
执行完init命令后,当前工作目录就会有一个.terraform文件夹,这里就放了插件的程序。目录结构如下:
$ tree -a
.
├── .terraform
│ └── providers
│ └── registry.terraform.io
│ └── hashicorp
│ ├── local
│ │ └── 2.1.0
│ │ └── darwin_amd64
│ │ └── terraform-provider-local_v2.1.0_x5
│ └── random
│ └── 3.1.0
│ └── darwin_amd64
│ └── terraform-provider-random_v3.1.0_x5
没有网络环境怎么办
在有些情况下,并不能直接访问Terraform的公共仓库去下载插件,如果可以从其它地方复制一份插件,并可以使用,那岂不是美哉?Terraform已经考虑了这种需求。
首先它支持有网络环境的机器把当前目录的插件复制到特定目录,命令如下:
$ terraform providers mirror /Users/larry/Software/terraform/plugins
- Mirroring hashicorp/local...- Selected v2.1.0 to meet constraints 2.1.0- Downloading package for darwin_amd64...- Package authenticated: signed by HashiCorp
- Mirroring hashicorp/random...- Selected v3.1.0 to meet constraints 3.1.0- Downloading package for darwin_amd64...- Package authenticated: signed by HashiCorp
查看一下目录结构,Terraform会打包好插件为zip文件:
$ tree -a /Users/larry/Software/terraform/plugins
/Users/larry/Software/terraform/plugins-localdisk
└── registry.terraform.io└── hashicorp├── local│ ├── 2.1.0.json│ ├── index.json│ └── terraform-provider-local_2.1.0_darwin_amd64.zip└── random├── 3.1.0.json├── index.json└── terraform-provider-random_3.1.0_darwin_amd64.zip
下次我们可以指定插件目录实现复用:
$ terraform init -plugin-dir=/Users/larry/Software/terraform/pluginsInitializing the backend...Initializing provider plugins...
- Reusing previous version of hashicorp/random from the dependency lock file
- Reusing previous version of hashicorp/local from the dependency lock file
- Using previously-installed hashicorp/random v3.1.0
- Using previously-installed hashicorp/local v2.1.0
看日志可以看到,Terraform不再下载,而是重用插件。
执行完命令init后,再查看terraform version,则会显示插件的版本:
$ terraform version
Terraform v1.0.11
on darwin_amd64
+ provider registry.terraform.io/hashicorp/local v2.1.0
+ provider registry.terraform.io/hashicorp/random v3.1.0
Terraform对于这种插件目录重用的支持,不只是zip包,二进制也是支持的,但对应的目录结果有点不一样。这里不展开介绍了。
相关文章:
《Terraform 101 从入门到实践》 第二章 Providers插件管理
《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。 不怕出身低,行行出状元。 插件 Terraform可以对多种平台的多种资源进行管理,这个是通过…...
03- pandas 数据库可视化 (机器学习)
pandas库的亮点: 一个快速、高效的DataFrame对象,用于数据操作和综合索引;用于在内存数据结构和不同格式之间读写数据的工具:CSV和文本文件、Microsoft Excel、SQL数据库和快速HDF 5格式;智能数据对齐和丢失数据的综合处理&#…...
Spring为什么这么火 之 Bean的6种作用域和Bean的生命周期
1、Bean的作用域 1.1、什么是作用域? 限定程序中变量的可用范围叫做作用域,或者说在源代码中定义变量的某个区域就叫做作用域 1.2、Bean的6种作用域 singleton:单例作用域prototype:原型作用域【多例作用域】request࿱…...
【CSS面试题】2023前端最新版css模块,高频15问
🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:博主收集的CSS面试题 目录 一、CSS必备面试题 1.CSS3新特性 2.CSS实现元素两个盒子垂…...
SpringCloud-Netflix学习笔记10——Hystrix实现服务熔断
一、概述 1、分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败! 2、服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B 和微服务C又…...
精华文稿|迈向统一的点云三维物体检测框架
分享嘉宾 | 杨泽同 文稿整理 | William 嘉宾介绍 Introduction 3D检测是在三维世界中去定位和分类不同的物体,与传统2D检测的区别在于它有一个深度信息。目前,大部分的工作是倾向于用点云去做三维检测,点云实际上是通过传感器去扫描出来的一…...
面试题:Redis网络模型
1 用户空间和内核空间以Centos 7 linux操作系统为例。计算机系统被内核操控, 内核被应用操控。为了避免用户应用导致冲突甚至内核崩溃,用户应用与内核是分离的进程的寻址空间会划分为两部分:内核空间、用户空间。用户空间只能执行受限的命令(Rin3&#x…...
微信小程序开发你可能不知道的开发技巧
1. 页面级data,组件data的查看 页面级data的查看,很多开发者应该都知道;组件级的数据查看我是开发了大半年才发现的; 页面级的data查看: 组件的data查看: 2. 放大模拟器【调整一些UI细节】 效果&#x…...
STM32开发(8)----CubeMX配置串口通讯(中断方式和DMA方式)
CubeMX配置串口通讯(中断方式和DMA方式)前言一、中断方式1.CubeMX配置2.代码实现3.实验结果二、DMA方式1.CubeMX配置2.代码实现3.实验结果总结前言 本章继续介绍使用STM32CubeMX对串口进行配置的方法,串口通讯有三种方式:轮询&am…...
7.1 微服务-SpringCloud(二)
目录 前言 7.1.5 Hystrix 7.1.5.1 什么是Hystrix 7.1.5.2 雪崩问题 7.1.5.3 线程隔离,服务降级 7.1.5.4 搭建 7.1.5.4.1 引入依赖 7.1.5.4.2 开启熔断 7.1.5.4.3 编写降级逻辑 1.局部降级逻辑 2.全局降级逻辑 7.1.5.4.4 设置超时 7.1.5.5 服务熔断 7.…...
Spring的AOP开发-基于xml配置的AOP
Spring的AOP开发-基于xml配置的AOP xml方式AOP快速入门 通过配置文件的方式解决以下问题 配置哪些包、哪些类、哪些方法需要被增强配置目标方法要被哪些通知方法所增强,在目标方法执行之前还是之后执行增强 配置方式的设计、配置文件(注解),Spring已…...
JAVA的垃圾收集器与内存分配策略【一篇文章直接看懂】
内存动态分配和垃圾收集技术是JAVA和C之间最大的区别之一 垃圾收集(Garbage Collection,GC)只办三件事: 哪些内存需要回收什么时候回收如何回收 对于对象回收的方法 引用计数法: 每处引用时1,引用失效…...
NLP学习——信息抽取
信息抽取 自动从半结构或无结构的文本中抽取出结构化信息的任务。常见的信息抽取任务有三类:实体抽取、关系抽取、事件抽取。 1、实体抽取 从一段文本中抽取出文本内容并识别为预定义的类别。 实体抽取任务中的复杂问题: 重复嵌套,原文中…...
【深度学习基础7】预训练、激活函数、权重初始化、块归一化
一、Unsupervised Pre-training 得益于 Hinton and Salakhutdinov 在 2006 年的开创性工作— 无监督预训(unsupervised pre-training);在《Reducing the dimensionality of data with neural networks.》这篇论文中,他们在 RBMs 中引入无监督预训练,下面我们将在Autoenco…...
MetaMQ
文章目录MetaMQMetaMQ 的优势在于:MetaMQ 的劣势也有:MetaMQ MetaMQ 是一个基于以太坊的可扩展分布式消息队列(MQ)系统,它可以支持大规模的分布式应用程序。MetaMQ 是一个开放源代码项目,它支持企业级应用程…...
热门盘点 | 10款评分最高的项目管理工具
项目管理软件可以让项目经理及时掌握项目进展可把复杂的任务分解简单帮助项目经理及时了解整个团队进展随着现代项目需求日趋复杂和个性选一个好的项目管理软件还是很有必要的① PingCode国内研发项目管理软件PingCode,它是国内软件研发项目榜单中评分最高的项目管理…...
若依框架---分页功能
继前几天我们学习若依管理系统中的代码生成工具,我们发现若依系统中还要很多值得学习的地方。今天我们来学习若依管理系统中的分页工具。 若依管理系统是前后端分离的(准确的说,若依有前后端分离版本)。 前端 若依前端的分页没…...
CHAPTER 3 Jenkins SVN GItlab
Jenkins SVN GItlab3.1 JenkinsSVN3.1.1 搭建SVN服务器1. 安装svn server2. 查看svn安装位置3. 创建版本库目录4. 创建svn版本库5. 配置修改6. 防火墙开启3690端口7. 启动SVN-server8. 客户端访问svn服务器3.1.2 测试脚本提交3.1.3 jenkins下载代码配置1. 安装Subversion插件2.…...
为什么Redis集群的最大槽数是16384个?
对于客户端请求的key,根据公式HASH_SLOTCRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作! 为什么有16384个槽? Redis集群并没有使用一致性hash而是引入了哈希槽的概念。Redis 集群有16…...
餐饮企业数据可视化大屏(智慧餐饮)
随着信息技术的深入发展,数据大屏的适用场景日益广泛,集工作汇报、实时监控和预测分析等功能于一身。 数据可视化的本质是视觉对话,数据可视化将数据分析技术与图形技术结合,清晰有效地将分析结果信息进行解读和传达。 当前很多餐…...
基于策略模式与智能编排的抖音批量下载系统架构设计与实现
基于策略模式与智能编排的抖音批量下载系统架构设计与实现 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在当今内容驱动的互联网时代,抖音平台汇聚了海量的短视频内容。对于内容创作者、研究者…...
注CO2驱替煤层气THM耦合模型与自定义PDE耦合固体力学
注co2驱替煤层气THM耦合模型 自定义pde耦合固体力学今天,我来分享一下关于CO2驱替煤层气的THM(热-水-力学)耦合模型的构建过程。这个模型听起来有点复杂,但其实拆开来理解,每一步都还挺有意思的。尤其是其中涉及的自定…...
5步解锁d2s-editor:暗黑2玩家的单机存档定制工具
5步解锁d2s-editor:暗黑2玩家的单机存档定制工具 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款基于Vue.js构建的暗黑破坏神2存档编辑工具,专为单机玩家设计,提供角色属性修…...
PP-DocLayoutV3快速调用:10行Python代码实现文档解析
PP-DocLayoutV3快速调用:10行Python代码实现文档解析 你是不是经常遇到一堆扫描的PDF或者图片文档,想快速提取里面的文字、表格和图片,却不知道从何下手?手动整理不仅费时费力,还容易出错。今天,我就来分享…...
Python实战:温度转换小工具开发(附GESP考试真题解析)
Python实战:温度转换小工具开发与GESP考试技巧精讲 温度转换是编程入门阶段的经典案例,也是GESP考试中常见的题型。本文将从零开始构建一个功能完整的温度转换工具,同时深入解析GESP考试中可能遇到的类似题型,帮助初学者掌握Pytho…...
工业协议通信开发实战:lib60870开源库完全指南
工业协议通信开发实战:lib60870开源库完全指南 【免费下载链接】lib60870 Official repository for lib60870 an implementation of the IEC 60870-5-101/104 protocol 项目地址: https://gitcode.com/gh_mirrors/li/lib60870 在工业自动化领域,设…...
【ERPNext部署】:企业用户的开源ERP系统快速搭建方案
【ERPNext部署】:企业用户的开源ERP系统快速搭建方案 【免费下载链接】erpnext_quick_install Unattended install script for ERPNext Versions, 13, 14 and 15 项目地址: https://gitcode.com/gh_mirrors/er/erpnext_quick_install 在数字化转型浪潮中&…...
Realistic Vision V5.1 为SolidWorks模型渲染宣传图:工业设计可视化新流程
Realistic Vision V5.1 为SolidWorks模型渲染宣传图:工业设计可视化新流程 你是不是也遇到过这种情况?在SolidWorks里精心设计了一个产品模型,到了要出宣传图、给客户展示或者做方案汇报的时候,就头疼了。要么得花大半天甚至几天…...
嵌入式系统的实时性能优化详解
嵌入式系统的实时性能优化详解 实时系统概述 实时系统是指能够在规定的时间内完成特定任务的系统,其正确性不仅取决于计算结果的正确性,还取决于结果产生的时间。在嵌入式系统中,实时性能优化至关重要。 实时系统分类 硬实时系统…...
Phi-4-Reasoning-Vision多场景落地:法律合同截图关键条款识别与逻辑校验
Phi-4-Reasoning-Vision多场景落地:法律合同截图关键条款识别与逻辑校验 1. 项目背景与价值 在法律服务领域,合同审核是耗时且容易出错的关键环节。传统人工审核方式面临两大挑战: 效率瓶颈:律师平均需要30分钟审核一份10页合同…...
