- 原文链接: https://chowyi.com//terraform-configuration-language-common-usages/
- 版权声明: 文章采用 CC BY-NC-SA 4.0 协议进行授权,转载请注明出处!
近两个月写了不少 Terraform 的 Configuration Language, 从入门到熟悉,用起来也渐渐得心应手。从名字上看这是一种配置语言,但得益于 Terraform Provider 强大的可扩展性,它不仅可以像 Golang 或是 Python (Terraform本来就是使用Golang开发的)一样处理字符串,读写本地文件,甚至还可以发起网络请求!
这篇文章既不是教程(初学者建议先看官方文档学习),也不是进阶的知识分享。我在这里记录一些常用的代码段,希望像我一样的新手可以少走些弯路。
Random Password
场景描述:使用 Terraform 生成随机密码,密码长度为16
, 特殊字符_%@
。
Terraform 官方提供了名为 random
的 provider,文档。
在找到这个 provider 之前,我曾尝试过使用 timestamp
,sha1
,uuid
,replace
等 built-in function 来生成密码,既麻烦又不安全。
1 | # main.tf |
Shuffle
场景描述:从已定义的变量 locals.default_zone
中随机选择一个 zone_id
,然后再随机选择一个该 zone 对应的 vswitch_id
。
使用了random
的 provider 中的 random_shuffle
,文档。
本段代码展示了如何随机选取列表中的项目,并且将第一次随机的输出作为第二次随机的输入。
1 | # main.tf |
1 | # variables.tf |
Generate File
场景描述:需要把一些变量以 json 格式保存在本地文件中。生成文件的同时,还可以指定文件的权限。
这里使用了官方提供的 local
Provider,文档。
1 | # main.tf |
Loop
场景描述:为 AWS ElasticCache 集群的每一个节点创建 CloudWatch Alarm,使用集群的节点数量来控制循环。
1 | # main.tf |
If Statement
场景描述:为生产环境的资源创建阿里云CloudMonitor Alarm,其他环境的资源则不需要。
Terraform 本身没有提供 if 语句,这里使用count
循环指令来控制,count=1
即if true
, count=0
即if false
。
1 | # main.tf |
Built-in Function Example
场景描述:创建 AWS DB Instance 时,只有生产环境且高配置实例开启 performance_insight,small及micro规格实例不开启。
这一语句中使用split
分隔实例规格字符串,使用reverse
翻转列表配合[0]
取最末元素,使用&&
进行逻辑与运算,使用三元表达式计算最终结果。整个表达式写起来很有python的感觉。
Terraform 提供了很多内置函数,文档。
1 |
|
1 | # variables.tf |
Reference
- Terraform 官方文档 https://www.terraform.io/docs/configuration/index.html
- The Gruntwork Blog https://blog.gruntwork.io/terraform-tips-tricks-loops-if-statements-and-gotchas-f739bbae55f9
- 原文链接: https://chowyi.com//terraform-configuration-language-common-usages/
- 版权声明: 文章采用 CC BY-NC-SA 4.0 协议进行授权,转载请注明出处!