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

Terraform创建模块

模块就是包含一组Terraform代码的文件夹,可以通过模块直接使用别人编写好的Terraform代码来创建资源。
Terraform模块是编写高质量Terraform代码,提升代码复用性的重要手段,可以说,一个成熟的生产环境应该是由数个可信成熟的模块组装而成的。

实际上所有包含Terraform代码文件的文件夹都是一个Terraform模块,如果直接在一个文件夹内执行terraform apply或者terraform plan命令,那么当前所在的文件夹就被称为根模块,也可以在执行Terraform命令时通过命令行参数指定根模块的路径。

模块结构

编写被重用的模块时,应该遵循相应的Terraform代码风格。
在一个可被重用的Terraform模块中,通常会包含如下文件列表:

  • 一个README文件,用来描述模块的用途。可以考虑在README中用可视化的图形来描绘创建的基础设施资源以及它们之间的关系。README中不需要描述模块的输入输出,因为工具会自动收集相关信息。如果在README中引用了外部文件或图片,请确保使用的是带有特定版本号的绝对URL路径以防止未来指向错误的版本。
  • 一个LICENSE文件描述模块使用的许可协议,如果想要公开发布一个模块,最好考虑包含一个明确的许可证协议文件,许多组织不会使用没有明确许可证协议的模块。
  • 一个variables.tf文件,包含模块所有的输入变量,输入变量应该有明确的描述说明用途。
  • 一个outputs.tf文件,包含模块所有的输出值,输出值应该有明确的描述说明用途。
  • 一个main.tf文件,它是模块主要的入口点。对于一个简单的模块来说,可以把所有资源都定义在里面;如果是一个比较复杂的模块,可以把创建的资源分布到不同的代码文件中,但引用嵌入模块的代码还是应保留在main.tf里。
  • 一个examples文件夹用来给出一个调用样例(可选),关于示例文件夹可以参考hashicorp官方examples。
  • 一个modules作为嵌入模块文件夹,出于封装复杂性或是复用代码的目的,可以在该目录下建立一些嵌入模块。所有包含README文件的嵌入模块都可以被外部用户使用;不含README文件的模块被认为是仅在当前模块内使用的(可选)。
  • 其他定义了各种基础设施对象的代码文件(可选)。

如果模块含有多个嵌入模块,应避免它们彼此之间的引用,由根模块负责组合它们。
由于examples中的代码经常会被拷贝到其他项目中进行修改,所有在examples代码中引用本模块时使用的引用路径应使用外部调用者可以使用的路径,而非相对路径。

一个最小化模块推荐的结构是这样的:

$ tree minimal-module/
.
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf

一个更完整一些的模块结构可以是这样的:

$ tree complete-module/
.
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf
├── ...
├── modules/
│   ├── nestedA/
│   │   ├── README.md
│   │   ├── variables.tf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   ├── nestedB/
│   ├── .../
├── examples/
│   ├── exampleA/
│   │   ├── main.tf
│   ├── exampleB/
│   ├── .../

特别注意:Terraform倡导”扁平”的模块结构,只应保持一层嵌入模块,防止在嵌入模块中继续创建嵌入模块。应将嵌入模块设计成易于组合的结构,使得在根模块中可以通过组合各个嵌入模块创建复杂的基础设施。

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

相关文章:

  • 《华为鸿蒙:从备胎到主角的崛起之路》
  • FPGA学习笔记(2)——Verilog语法及ModelSim使用
  • 2024年十大AI工具,让你的工作学习效率飞跃
  • linux之NAMP
  • uniapp 禁止截屏(应用内,保护隐私)插件 Ba-ScreenShot
  • 数字电路-5路呼叫显示电路和8路抢答器电路
  • C++中的函数签名
  • Mac brew安装Redis之后更新配置文件的方法
  • 安卓应用开发(一):工具与环境
  • 基于springboot+vue+Mysql的在线动漫信息平台
  • C++设计模式-结构型设计模式
  • open-webui+ollama本地部署Llama3
  • 个人对行为型设计模式的理解 @by_TWJ
  • 苹果挖走大量谷歌人才,建立神秘人工智能实验室;李飞飞创业成立「空间智能」公司丨 RTE 开发者日报 Vol.197
  • 行业唯一!易保全牵头编制的《区块链数据访问安全技术通则》发布
  • Rust Rocket创建第一个hello world的Web程序 Rust Rocket开发常用网址和Rust常用命令
  • 第G9周:ACGAN理论与实战
  • Linux网络部分——DNS域名解析服务
  • 预处理详解
  • Python的创建和使用自定义模块
  • Python根据预设txt生成“你画我猜”题目PPT(素拓活动小工具)
  • 小程序地理位置接口权限直接抄作业
  • 【Osek网络管理测试】[TG3_TC6]等待总线睡眠状态_2
  • BEV下统一的多传感器融合框架 - FUTR3D
  • c#和python的flask接口的交互
  • Python测试框架Pytest的参数化详解
  • KernelSU 如何不通过模块,直接修改系统分区
  • 红日靶场ATTCK 1通关攻略
  • CellMarker | 人骨骼肌组织细胞Marker大全!~(强烈建议火速收藏!)
  • 游戏名台词大赏