伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Terraform,变量详解

来源:本站原创 浏览:99次 时间:2022-07-26
一、定义变量

创建 variables.tf文件,定义变量名为:aws_region。使用default关键字设置默认值:ap-southeast-1。默认值是可选的。如果未设
置默认值,则该变量是必需的。

# variables.tfvariable "aws_region" {  default = "ap-southeast-1"}

注意:该文件可以命名为任何名称,因为Terraform加载目录下以*.tf结尾的所有文件。

二、使用变量

通过使用占位符 ${}和var关键字引用定义的变量名。

provider "aws" {  region     = "${var.aws_region}"}
三、分配变量

分配变量有多种方法。以变量的优先级考虑,从高到底的顺序主要的方法如下:

3.1、命令行

可以直接在命令行中使用 -var 标志设置变量 。在该Terraform检查配置的任何命令接受该标志,如apply 和 plan。

terraform apply \  -var 'aws_region=ap-southeast-1'

注意:以这种方式设置变量不会保存它们,并且在执行命令时必须重复输入它们。

3.2、文件变量

如果想保留变量或者变量是一个固定的值,可以考虑创建后缀为 *.tfvars的文件。文件内容如下:

# terraform.tfvarsaws_region = "ap-southeast-1"

对于当前目录中匹配 terraform.tfvars 或 *.auto.tfvars 存在的所有文件,Terraform会自动加载它们以填充变量。如果文件名为其他名称,则可以-var-file直接使用该标志指定文件。这些文件与Terraform配置文件的语法相同。与Terraform配置文件一样,这些文件也可以是JSON。

terraform apply -var-file="xxx.tfvars"

注意:不建议将用户名和密码保存到版本控制中,但是可以创建一个本地秘钥变量文件用-var-file加载。

-var-file 可以使用多次,指定不同的变量文件。例如:

terraform apply \  -var-file="secret.tfvars" \  -var-file="production.tfvars"
3.3、环境变量

Terraform将读取前缀为TFVAR*的环境变量。例如,TF_VAR_aws_region 可以将变量设置为设置aws_region变量。

注意:环境变量只能填充字符串类型的变量。列表和映射类型变量必须通过其他机制之一进行填充。

3.4、默认值

如果没有使用以上任何方法传入变量值,则会采用默认值。

最后需要注意以下几点:

  • 模块内命名唯一
  • 变量间可以引用
  • 不能循环引用
四、高级类型4.1、列表(Lists)
# 隐式的定义variable "cidrs" { default = [] }# 显示的定义variable "cidrs" { type = list }

terraform.tfvars 文件内容:

cidrs = [ "10.0.0.0/16", "10.1.0.0/16" ]
4.2、字典(Map)

为了合理分配资源,针对不同的运行环境,我们想创建不同类型的服务器实例。例如:dev环境我们只需要用t2.micro,prod环境我们可以配置高一点,使用t2.large。

variable "instance_types" {  type = "map"  default = {    "dev"   = "t2.micro"    "prod"  = "t2.large"  }}variable "env" {  default = "dev"}resource "aws_instance" "example" {  instance_type = "${var.instance_types[var.env]}" }

在命令行中传值:

terraform apply -var 'instance_types={ dev = "t2.micro", prod = "t2.large" }'

在terraform.tfvars 文件定义值:

instance_types = {  "dev"  = "t2.micro"  "prod" = "t2.large"}

完整示例:

provider "aws" {  region = "ap-southeast-1"}variable "instance_types" {  type = "map"  default = {    "dev"   = "t2.micro"    "prod"   = "t2.large"  }}variable "env" {  default = "dev"}resource "aws_instance" "example-instance" {  ami           = "ami-061eb2b23f9f8839c"  instance_type = "${var.instance_types[var.env]}"   tags = {      Name = "Example by ChangSha Union"  }}output "instance_type" {  value = "${aws_instance.example-instance.instance_type}"}

如果您喜欢这篇文章,请考虑关注我。

长沙DevOps联盟 - 关注容器技术,K8S,自动化部署,基础设施架构。

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net