一、什么是Module

Module 是 Terraform 为了管理单元化资源而设计的,是子节点,子资源,子架构模板的整合和抽象。在实际复杂的技术架构中,涉及到的资源多种多样,资源与资源之间的关系错综复杂,资源模版的编写,扩展,维护等多个问题的成本都会不断增加。将多种可以复用的资源定义为一个module,通过对 module 的管理简化模板的架构,降低模板管理的复杂度,这就是module的作用。

除此之外,对开发者和用户而言,只需关心 module 的 input 参数即可,无需关心module中资源的定义,参数,语法等细节问题,抽出更多的时间和精力投入到架构设计和资源关系整合上。

二、Module的标准结构

官方建议Module标准结构包含:main.tf,variables.tf,outputs.tf,README.md。这些是最小模块的建议文件名,即使它们为空。

1、main.tf:资源的定义模板
2、variables.tf:模板所依赖的参数定义和参数值
3、outputs.tf:资源的输出值
4、README.md:模板的简单介绍和使用说明以及该模块可用的许可证

对于一个简单的模块,main.tf 是主要入口点。包含了创建资源的主要内容。对于复杂的模块,可以将资源创建分为多个文件,但是任何嵌套的模块调用都应位于主文件中。variables.tf 并且outputs.tf应分别包含变量和输出的声明。

# 简单的模块$ basic-module/.├── README.md├── main.tf├── variables.tf├── outputs.tf# 复杂的模块$ 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/│   ├── .../

三、如何使用Module

3.1、调用子Module

module "my_vpc" {  source = "./module/vpc"  # ...}

3.2、访问Module的输出值

output "vpc_id" {  value = "${module.my_vpc.vpc_id}"  # ...}

3.3、Module 的版本

module "vpc" {  source  = "terraform-aws-modules/vpc/aws"  version = "0.0.1"}

该version属性值可以是单个显式版本,也可以是版本约束表达式。约束表达式使用以下语法来指定可接受的版本范围:

  • >= 1.2.0:版本1.2.0或更高版本
  • <= 1.2.0:1.2.0或更旧的版本
  • ~> 1.2.0:任何非beta版本>= 1.2.0和< 1.3.0,例如1.2.X
  • ~> 1.2:任何非beta版本>= 1.2.0和< 2.0.0,例如1.X.Y
  • >= 1.0.0, <= 2.0.0:介于1.0.0和2.0.0之间的任何版本

四、开源Module

上文中,虽然已经实现了module,但是这个module只能在自己本地机器上实现,无法实现与他人的实时分享,无法实现团队内部的及时共享。

Terraform 提供了 Module 的注册地址(https://registry.terraform.io/),将自己的module上传到Github,并注册为一个Terraform Module后,即可将远端的Module应用到我们自己的模板中。

Module 让资源模板架构更清楚,模板管理更简单;开源 Module 让资源模板更便捷,更分享。除此之外,开源 Module 可实现对模板的版本控制,基于不同的版本,实现不同架构不断升级的控制和完善。

我们可以在网址:https://registry.terraform.io/browse/modules 找到我们所使用的云服务商的各种terraform module。

# AWS Moduleshttps://github.com/terraform-aws-modules# Alicloud Moduleshttps://github.com/terraform-alicloud-modules

如果您喜欢这篇文章,请考虑关注我。

长沙DevOps联盟 - 关注容器技术,K8S,自动化部署,基础设施架构。

©著作权归作者所有:来自51CTO博客作者mob604756e9ab63的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. httpd,tomcat,tomcat-connector下载地址
  2. Nginx动静分离 - 配置笔记
  3. Nginx版本平滑升级
  4. Git简单部署
  5. 闲聊Kubernetes Pod垂直自动伸缩(VPA)
  6. OpenKruise v0.8.0 版本发布:K8s 社区首个规模化镜像预热能力
  7. IDEA2019.2版本最新破解到2089年,亲测可用
  8. 从某人的公众号学到一个网上学习资源搜索技巧
  9. 基于SSH框架的人力资源管理系统设计与实现

随机推荐

  1. 如何区分重载和重写?
  2. windows系统上安装与使用Android(安卓)ND
  3. Android(安卓)Studio 必备技巧:TODO 用法
  4. 用户画像分析与场景应用
  5. HashMap(基于jdk1.8源码分析,最新整理版)
  6. 超炫的android 3d ui,目前正在内测中 期待
  7. 给女朋友讲解什么是代理模式
  8. Android使用ShareSDK集成第三方登录和分
  9. android EditText软键盘隐藏总结
  10. Android(安卓)Activity跳转出现白屏但不