terraform相关
参考文档
- terraform开始文档 https://learn.hashicorp.com/tutorials/terraform/install-cli?in=terraform/aws-get-started
- yum安装 https://www.terraform.io/docs/cli/install/yum.html
- terraform CLI https://www.terraform.io/docs/cli/index.html
- terraform target说明 https://learn.hashicorp.com/tutorials/terraform/resource-targeting
- 腾讯云整合 https://github.com/tencentyun/terraform-provider-tencentcloud/blob/master/website/docs/index.html.markdown
- 常见云厂商支持providers列表 https://registry.terraform.io/browse/providers
- 腾讯云provider官方 https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest
- 阿里云provider官方 https://registry.terraform.io/providers/aliyun/alicloud/latest
- best practice https://www.terraform.io/docs/cloud/guides/recommended-practices/index.html
- tencent instance参数 https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/instance
- 镜像管理工具 https://learn.hashicorp.com/packer
- packer官方文档 https://www.packer.io/docs
- packer腾讯云相关 https://www.packer.io/docs/builders/tencentcloud
安装
下载二进制方法
|
|
用unzip解压并挪到/usr/local/bin下面即可
debian安装
|
|
配置自动补全
[root@VM-1-13-centos terraform]# terraform -install-autocomplete [root@VM-1-13-centos terraform]# source .bashrc 就有补全了
使用和官方文档
terraform是什么
是一种云的编排工具,用代码描述基础设施
terraform能干啥
文档列出了一些场景https://www.terraform.io/intro/use-cases.html, 不再赘述
CLI
有哪些CLI
|
|
terraform apply
terraform正常的workflow是
- terraform init(项目初始化和更新模块,一旦引入新的模块都会提示)
- 编写.tf文件(包含main.tf, vars.tf…) 默认会读取所有.tf文件
- terraform validate(语法检查) 也可以不做,执行时候会自动检查
- terraform plan (-target resource, 可以省略) 这一步也可以省略,直接apply,这一步是告诉我们有啥变化
- terraform apply (-target resource,可以省略) 这一步不可省略,相当于代码执行
- terraform destory (-target resource) 销毁之前的infrastructure(基础设施)(包含所有新建的资源)
官网例子
mac下可以正常执行
|
|
|
|
然后访问localhost:8000会显示Welcome to nginx! docker ps能查看到
|
|
可以用terraform destroy销毁创建的容器
|
|
和腾讯云集成
可参考文档 https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs
安装
需要注意的是可能会卡住,因为和registry可能会不通,所以我建议下载一份到处copy即可,具体可以看下面的隐藏目录 .terraform
|
|
使用token创建一个腾讯云机器
具体请看我的目录 /root/terraform
|
|
然后执行terraform init && terraform plan && terraform apply
|
|
和阿里云集成
terraform language
block
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
<IDENTIFIER> = <EXPRESSION> # Argument }
variable
variable "availability_zones" { description = "A list of availability zones in which to create subnets" type = list(string) }
count
https://www.terraform.io/docs/language/meta-arguments/count.html count可以用在资源需要多次创建情况 获取count的第几次是count.index
for_each
https://www.terraform.io/docs/language/meta-arguments/for_each.html for_each可以是map或者是string list 使用是each.key each.value ${each.value} or each.value
output
toset toset(["a","b"])
map(object({a = b}))
lifecycle
刚开始是要3个,后来改成了2个处理
- create before destroy
干掉1个
- prevent destroy
不干掉
packer(镜像管理工具)
https://learn.hashicorp.com/packer https://learn.hashicorp.com/tutorials/packer/hcl2-upgrade?in=packer/configuration-language https://www.packer.io/docs https://www.packer.io/docs/builders/tencentcloud https://www.packer.io/downloads
download
可参考官方文档https://www.packer.io/downloads
|
|
cli
补全
|
|
json to hcl
注意默认json形式是需要转换成pkr.hcl后缀的 ./packer hcl2_upgrade xxx.json ./packer init xxx.json.pcr.hcl ./packer build xxx.json.pcr.hcl 然后就可以进行build build的逻辑是创建一个临时instance并进行额外的操作,这里请参考一个demo的配置
|
|
build
注意一点./packer build -machine-readable xxx.pkr.hpcl 这样就不用确认了哈