系列文章

Terraform 系列文章

典型文件布局

- modules/
- services/
- webserver-cluster/
- examples/
- main.tf
- outputs.tf
- vars.tf
- user-data.sh
- README.md
- [ ] versions.tf
- stage/
- vpc/
- services/
- frontend-app/
- backend-app/
- main.tf
- outputs.tf
- vars.tf
- user-data.sh
- README.md
- [ ] provider.tf
- [ ] versions.tf
- [ ] terraform.tfvars(or `*.auto.tfvars`)
- [ ] main.tfvars
- data-storage/
- mysql/
- redis/
- prod/
- vpc/
- services/
- frontend-app/
- backend-app/
- data-storage/
- mysql/
- redis/
- mgmt/
- vpc/
- services/
- bastion-host/
- jenkins/
- global/
- iam/
- s3/
- main.tf
- outputs.tf
- vars.tf
- user-data.sh
- README.md
- [ ] provider.tf
- [ ] versions.tf

提示

  • - [ ] 表示该项为可选内容
  • 示例如 examples/ 表示该项为文件夹

详细说明

顶层文件夹

用于隔离环境

  • modules:Terraform (可复用)模块文件夹
  • stage:预发布 Env
  • prod:生产 env
  • mgmt:管理/DevOps 环境(如:堡垒机、Jenkins 等)
  • global:用于运行各种环境下都要共享的资源(如:Terraform backend - S3、IAM)

二级文件夹

用于环境中的组件

  • vpc:网络拓扑
  • services:此环境中运行的应用环境或微服务,例如 NGINX 前端或 Java 后端。每个应用程序甚至都应该驻留在单独的文件夹中,与其他应用程序隔离
  • data-storage:在此环境中运行的数据存储,例如 MySQL 或 Redis。每个数据存储应该驻留在它自己的文件夹中,与其他数据存储隔离。

文件

每一个组件中,都会有相应的 Terraform 的配置文件,其命名规则如下:

  • vars.tf: 输入变量
  • outputs.tf: 输出变量
  • main.tf: 资源定义
  • user-data.sh:(可选),用户自定义脚本
  • README.md:说明文档
  • provider.tf:(可选),provider 信息,典型如:provider、region。不同环境,甚至同一环境的不同组件的 provider 可能不同。
  • versions.tf:(可选),Terraform version、provider version、Terraform backend 信息。
  • terraform.tfvars(or *.auto.tfvars): (可选),terraform plan 及 apply 默认会传入该文件中的变量值
  • main.tfvars:(可选),terraform plan 及 apply可以通过 -var-file=filename 来手动指定。

变量赋值

可以通过如下 3 种方式指定变量:

  -var 'foo=bar'      Set a value for one of the input variables in the root
module of the configuration. Use this option more than
once to set more than one variable. -var-file=filename Load variable values from the given file, in addition
to the default files terraform.tfvars and *.auto.tfvars.
Use this option more than once to include more than one
variables file.
  1. 命令行参数:-var 'foo=bar'

  2. 参数文件:默认读取 terraform.tfvars(or *.auto.tfvars) 或通过命令行 -var-file=filename 指定

  3. 环境变量:可以通过设置名为TF_VAR_<NAME>的环境变量为输入变量赋值,例如:

    $ export TF_VAR_image_id=ami-abc123
    $ terraform plan
    ...

    环境变量传值非常适合在自动化流水线中使用,尤其适合用来传递敏感数据,类似密码、访问密钥等

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Terraform 系列-Terraform 项目的典型文件布局的更多相关文章

  1. Asp.Net Core 轻松学系列-3项目目录和文件作用介绍

    目录 前言 结语 前言     上一章介绍了 Asp.Net Core 的前世今生,并创建了一个控制台项目编译并运行成功,本章的内容介绍 .NETCore 的各种常用命令.Asp.Net Core M ...

  2. 多War项目中静态文件的共享方案

    [原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源] 在互联网产品中,一般会有多个项目(Jar.WAR)组成一个产品线.这些WAR项目,因为使用相同的前端架构(jQuery.easyui等) ...

  3. 对Android项目中的文件夹进行解释

    对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...

  4. webpack4 系列教程(十一):字体文件处理

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十一):字体文件处理>原文地址.或者来我的小站看更多内容:godbmw.com 0. 课程介 ...

  5. [Web Chart系列之六] canvas Chart 导出图文件

    前言 博主正在参加CSDN2013年度博客之星评选,如果这篇文章对您有用,请投他一票: 投票地址:http://vote.blog.csdn.net/blogstaritem/blogstar2013 ...

  6. 【MM系列】SAP技巧之更改布局

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP技巧之更改布局   前言部分 ...

  7. almost最好的Vue + Typescript系列02 项目结构篇

    基于vue-cli 3.x,配合typescript的环境构建的新vue项目,跟以前的结构相比,有了一些变化,下面我们来简单的了解一下 基本结构: node_modules: 项目中安装的依赖模块 p ...

  8. ES6系列之项目中常用的新特性

    ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...

  9. [转载]将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,解决办法

    eclipse 代码中文注释乱码 求解决 将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的IDE编码格式和自己的Eclips ...

  10. C#项目打开/保存文件夹/指定类型文件,获取路径

    C#项目打开/保存文件夹/指定类型文件,获取路径 转:http://q1q2q363.xiaoxiang.blog.163.com/blog/static/1106963682011722424325 ...

随机推荐

  1. Liunx mosquitto卸载

    1.查询文件: whereis mosquitto whereis mosquitto_sub 2.删除查询到的文件,命令: rm -rf /etc/mosquitto rm -f /usr/loca ...

  2. python代码抛出异常

    from traceback import format_exc except Exception: print(format_exc())

  3. Markdown基础使用学习

    Mark Down学习 标题:#+标题名字 二级标题:## +标题名字 三级... 字体 两个*+字+两个=加粗 一个=斜体 引用 一个大于号+内容 图片 ![图片名字](路径) 符号全部小写 超链接 ...

  4. LeetCode LCP 2. 分式化简

    从最后一项依次叠加 1 class Solution(object): 2 def fraction(self, cont): 3 """ 4 :type cont: L ...

  5. Restful Fast Request 添加前置脚本,实现不同环境免设置token 直接请求

    idea安装Restful Fast Request插件后,进行如下设置,并打开 项目全局参数 对话框 进入前置脚本 tab 编写如下groovy脚本代码(插件脚本语言默认支持groovy,该语言被称 ...

  6. (一).JavaScript的简介,变量,数据类型,运算符和表达式

    1. JavaScript的简介 1.1 JavaScript概念 JavaScript是一门:动态的 弱类型的 解释型 的脚本语言 1. 动态: 程序执行的时候才确定数据类型 2. 弱类型:数据类型 ...

  7. TRACE()宏的使用

    TRACE()宏一般是用在mfc中的,用于将调试信息输出到vs的输出窗口中(这是关键), 这在使用vs作为开发工具的时候,是非常方便的. 然而在开发一般c++程序时,却貌似无法获得这样的便利,其实只要 ...

  8. webpack逆向之报错Cannot read properties of undefined (reading 'call')

    经典报错 记录一下: 1: 缺少模块    补上 2.主模块无法调用子模块   有可能网站用的数组形式的模块包,你用的是对象,调用方法就要改变. 改写过程中 用的是对象方式: 那么3号包调用的4号包 ...

  9. 磊磊零基础打卡算法:day16 c++ Trie树

    5.19 Trie树: 用处:快速的查找和高效存储字符串集合的数据结构. 类似如此的查找,存储 其简单的两个操作:插入和删除 插入: void insert(char str[]) { int p; ...

  10. create_generated_clock 的用法

    本文转载自:create_generated_clock_亓磊的博客-CSDN博客_create_generated_clock 文章目录 参数source和master_clock区别 create ...