terraform学习
2022-06-01 18:57:30 17 举报
AI智能生成
terraform学习记录
作者其他创作
大纲/内容
1.1introduction
1.2terraform初体验
安装
体验
terraform init
terraform apply
1.3terraform基础概念
provider
下载
搜索
声明provider
内建provider
多provider实例
状态管理
初探状态文件
terraform.tfstate
用来基础设施保存状态,第二次apply如果没有修改不会发生改变
如果第二次修改后,第一次的文件将会备份
tfstate是明文的
生产环境tfstate管理方案-backend
为了解决存储和一致性问题
引入远程状态存储机制-backend
分类
标准
支持远程状态存储和状态锁
状态锁解决一致性问题,如事务
consul backend
s3 backend
etcdv2 backend
etcdv3 backend
增强
在标准基础上增加远程操作
consul简介及安装
consul backend 锁
.lock
.lockinfo
发生死锁后,执行terraform force-unlock。强行删锁
backend配置写错
解决办法
删除本地tfsate文件
状态迁移
当原来没使用consul,自动配置到consul
如果原先有状态文件,则提示需要人工比对是否合并
backend配置的动态赋值
在tf文件中不给出具体backend的配置,而使用额外的配置文件
额外配置文件backend.hcl
写好配置文件后,执行terraform init -backend-config=backend.hcl
backend权限控制和版本控制
状态的隔离存储
不同产品不同部门分为不同的文件夹
workspace可以放相同配置文件
执行terraform workspace new feature1
创建出workspace
workspace命令使用
隔离方式选择
1.4terraform代码的书写
类型
原始类型
string
number
bool
复杂类型
集合类型
列表list
map
集合
结构化类型
object对象
tuple元组
any相当于go中借口
null
配置语法
参数
块
顶级块
data
source
output
variable
标识符
注释
编码及换行
输入变量
variable块名
类型
默认值
描述
断言
condition确保输入正确
在命令行输出中隐藏值
sensitive可以设置是否输出
暴露敏感变量情况
禁止输入变量为空
nullable为true时可以为null,为false是不允许
对输入变量赋值
在命令行以参数形式复制
terraform apply -var="image_id=ami-abc123"
参数文件方式
.tfvars文件
terraform apply -var-file="testing.tfvars"
当前模块有.tfvars和.auto.tfvars后缀的自动导入
环境变量
适合敏感数据,密钥之类
交互界面传值
输入变量优先值赋值
环境变量,文件,命令行参数
复杂类型传值
输出值
输出值声明
output块
描述
sensitive
depends on
显示声明依赖关系
precondition
用于检查输出
局部值
locals块定义
局部值只能在同一代码块中使用
资源
资源语法
recourse+资源类型+资源名字
资源参数
资源类型文档
资源的行为
访问资源输出属性
敏感的资源属性
资源依赖关系
元参数
depends on
不到万不得已时候不使用
count
创建count个对象,每个对象对应一个基础设施
有索引,通过count.index获取
参数的表达式不可以引用其他资源的输出属性
可以引用data返回的输出属性,只要该data不依赖其他任何resource进行查询
for each
不可与count同时声明
参数可以是map或者set,可以为集合中的每一个创建一个独立的基础设施对象
使用each来访问每个迭代器对象
由于Terraform没有用以声明set的字面量,所以我们有时需要使用toset函数把list(string)转换为set(string)
count和for each的选择
如果资源实例之间相差不多,使用count,如果资源实例相差比较多使用for each
传统count结合length方法会导致,移除一个实例,会导致后续实例无法使用
provider
lifecycle
create_before_destroy (bool)
使用前提前了解每个资源
由于某种限制导致资源无法升级,默认情况下先删除旧资源,再使用新参数创建新的资源
使用这个参数会先创建新的资源,旧资源依然存在,新资源创建好销毁旧资源
prevent_destroy (bool)
是一个保险措施
防止删除一个实例资源
ignore_changes (list(string))
在一些比较罕见的情况下,基础设施对象会被流程之外的东西改变,设置该属性可以让资源某些属性不会发生改变
忽略map某些键,前提是需要键已经存在
replace_triggered_by
意思是包含资源引用列表
强制terraform引用资源或资源属性发生改变时替换该块的父资源
使用场景
如果表达式指向多实例,比如有包含count和for each的任何实例发生变更或替换,都将引发该属性资源替换
如果表达式指向单实例,该实例资源发生变化,则也发生变化
如果表达式指向单实例单属性,那么该资源属性发生变化时也会发生变化
注:引用托管资源
配置影响了terraform如何构建并遍历依赖图
1.5terraform module
有点类似单体架构mvc方式和微服务方式
有点像go中的包管理
variables更像是一个类,或者说是借口
而main中module中更像是创建出一个对象
0 条评论
下一页