terraform学习
2022-06-01 18:57:30
登录查看完整内容
terraform学习记录
举报
猜你喜欢
大纲/内容
1.1introduction
安装
terraform init
terraform apply
体验
1.2terraform初体验
下载
搜索
声明provider
内建provider
多provider实例
provider
用来基础设施保存状态,第二次apply如果没有修改不会发生改变
如果第二次修改后,第一次的文件将会备份
terraform.tfstate
tfstate是明文的
为了解决存储和一致性问题
引入远程状态存储机制-backend
状态锁解决一致性问题,如事务
consul backend
s3 backend
etcdv2 backend
etcdv3 backend
支持远程状态存储和状态锁
标准
在标准基础上增加远程操作
增强
分类
生产环境tfstate管理方案-backend
.lock
.lockinfo
发生死锁后,执行terraform force-unlock。强行删锁
consul backend 锁
consul简介及安装
删除本地tfsate文件
解决办法
backend配置写错
当原来没使用consul,自动配置到consul
如果原先有状态文件,则提示需要人工比对是否合并
状态迁移
在tf文件中不给出具体backend的配置,而使用额外的配置文件
额外配置文件backend.hcl
写好配置文件后,执行terraform init -backend-config=backend.hcl
backend配置的动态赋值
backend权限控制和版本控制
不同产品不同部门分为不同的文件夹
创建出workspace
执行terraform workspace new feature1
workspace可以放相同配置文件
workspace命令使用
状态的隔离存储
隔离方式选择
初探状态文件
状态管理
1.3terraform基础概念
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+资源类型+资源名字
资源语法
资源参数
资源类型文档
资源的行为
访问资源输出属性
敏感的资源属性
资源依赖关系
不到万不得已时候不使用
创建count个对象,每个对象对应一个基础设施
有索引,通过count.index获取
参数的表达式不可以引用其他资源的输出属性
可以引用data返回的输出属性,只要该data不依赖其他任何resource进行查询
count
不可与count同时声明
参数可以是map或者set,可以为集合中的每一个创建一个独立的基础设施对象
使用each来访问每个迭代器对象
由于Terraform没有用以声明set的字面量,所以我们有时需要使用toset函数把list(string)转换为set(string)
for each
如果资源实例之间相差不多,使用count,如果资源实例相差比较多使用for each
传统count结合length方法会导致,移除一个实例,会导致后续实例无法使用
count和for each的选择
使用前提前了解每个资源
由于某种限制导致资源无法升级,默认情况下先删除旧资源,再使用新参数创建新的资源
使用这个参数会先创建新的资源,旧资源依然存在,新资源创建好销毁旧资源
create_before_destroy (bool)
是一个保险措施
防止删除一个实例资源
prevent_destroy (bool)
在一些比较罕见的情况下,基础设施对象会被流程之外的东西改变,设置该属性可以让资源某些属性不会发生改变
忽略map某些键,前提是需要键已经存在
ignore_changes (list(string))
意思是包含资源引用列表
强制terraform引用资源或资源属性发生改变时替换该块的父资源
如果表达式指向多实例,比如有包含count和for each的任何实例发生变更或替换,都将引发该属性资源替换
如果表达式指向单实例,该实例资源发生变化,则也发生变化
如果表达式指向单实例单属性,那么该资源属性发生变化时也会发生变化
注:引用托管资源
使用场景
replace_triggered_by
配置影响了terraform如何构建并遍历依赖图
lifecycle
元参数
资源
1.4terraform代码的书写
有点类似单体架构mvc方式和微服务方式
有点像go中的包管理
variables更像是一个类,或者说是借口
而main中module中更像是创建出一个对象
1.5terraform module
terraform入门
0 条评论
回复 删除
下一页
职业:暂无
作者其他创作:
terraform学习
262 2022-06-01
区块链租房微服务思想
453 2022-04-24
go微服务开发环境与版本
294 2022-04-24
区块链租房项目系统架构图
943 2022-04-24
基于区块链的租房系统架构图
1168 2022-04-12
基于区块链的房屋租赁信任需求说明图
529 2021-05-07