input
Terraform 支持我们统一管理我们所有的变量,然后在使用的时候按照规则使用即可
看一下例子:
我们要额外创建一个新的文件variables.tf(此处注意Terraform 会加载所有的.tf文件),
1 2 3 4 |
$cat variables.tf variable "region" { default = "us-east-1" } |
这样配置以后我们可以如何使用(这是同一个文件)
1 2 3 |
provider "aws" { region = var.region } |
除了上边的这种方式,我们还可以通过命令行传递参数 -var
1 2 3 |
$ terraform apply \ -var 'region=us-east-2' # ... |
我们也可以统一把所有的变量写到命名为:terraform.tfvars 或者 *.auto.tfvars ,所有符合此命名规则的文件会自动加载,如果不符合命名规则则不会自动加载,我们需要使用-var-file 来加载
1 2 3 |
$ terraform apply \ -var-file="secret.tfvars" \ -var-file="production.tfvars" |
另外一种方式我们可以通过设置环境变量的形式来传递参数,对应规则为TF_VAR_region(环境变量) ==region (terraform code)
我们可以使用负责的数据结构map 和 list
list:
1 |
cidrs = [ "10.0.0.0/16", "10.1.0.0/16" ] |
Map:
1 2 3 4 5 6 7 |
variable "amis" { type = "map" default = { "us-east-1" = "ami-b374d5a5" "us-west-2" = "ami-4b32be2b" } } |
output
Terraform给我们的输出很多,但是很多时候我们只需要特殊的输出,直接看例子:
在我们直接的tf文件中加入如下内容
1 2 3 |
output "ip" { value = aws_eip.ip.public_ip } |
上面的代码表示我们定义了一个输出变量叫ip,它的值是aws_eip.ip.public_ip
这个时候我们如果再次的apply(ec2已经创建,eip也已经创建)
1 2 3 4 5 6 7 8 |
$ terraform apply ... Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: ip = 50.17.232.209 |
注意此处没有任何的add,因为之前我们已经创建成功了
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021