使用Terraform时使用变量
在Terraform中,可以使用变量来定义和注入值。
以下是一个最简单的示例。
provider "aws" {
region = "ap-northeast-1"
}
variable "foo" {}
resource "aws_s3_bucket" "s3_bucket" {
bucket = "${var.foo}"
acl = "private"
}
用变量声明了foo,并在S3桶中使用了${var.foo}。
注值的方法
有四种指定值的方法。
-
- 在执行时进行指定
-
- 通过命令参数进行指定
-
- 通过环境变量进行指定
- 通过配置文件进行指定
在运行时指定
在声明变量之后,执行terraform plan等命令时,控制台会询问您要指定什么值,在那里进行指定。
❯ terraform plan
var.foo
Enter a value: bar
...
+ aws_s3_bucket.s3_bucket
...
arn: "<computed>"
bucket: "bar"
force_destroy: "false"
...
Plan: 1 to add, 0 to change, 0 to destroy.
通过命令行参数进行指定。
执行命令时,使用“-var”选项来指定值。
尝试执行 terraform plan -var ‘foo=test-bucket’,可以确认已正确注入。
使用环境变量进行指定
如果在环境变量中添加 TF_VAR_ 的前缀,并将其设置为特定值,那么该值将加载到变量中。
执行 TF_VAR_foo=’env-test’ terraform plan 可以获得相同的结果。
使用設定檔進行指定
可以创建一个设定文件来指定变量的值,并且可以使用“-var-file”来实现相同的功能。
vars.tfvars 可以在中文中翻译为”变量.tfvars”。
foo = "tfvars-file"
执行terraform plan -var-file=vars.tfvars会得到相同的结果。
变量战略/设计
Terraform会读取所有的 *.tf 文件,因此建议将变量定义写在 variables.tf 等文件中,然后在执行时使用 -var-file 参数指定值文件来切换环境等。
-
- terrafrom plan -var-file=dev.tfvars
- terrafrom plan -var-file=prod.tfvars
我觉得如果把目录和文件设置成这样,可以更好地把握氛围。
主.tf
provider "aws" { region = "ap-northeast-1" }
resource "aws_s3_bucket" "s3_bucket" {
bucket = "${var.foo}"
acl = "private"
}
变量.tf
variable "foo" {}
dev.tfvars – 开发环境的tfvars文件
foo="dev-var"
prod.tfvars
生产环境配置文件
foo="prod-var"
其他提示 (qí tā tips)
如果设定为”default”,即使没有指定文件,它也会起作用。
此外,还可以通过”type”等指定数据类型。
由于可以在”description”中写上变量的说明,建议写上。
variable "foo" {
type = "string"
default = "default-var"
description = "Sample Variable"
}
参考文献
-
- Input Variables – Terraform by HashiCorp
-
- Terraformでmappingをmoduleに渡す方法 | Developers.IO
-
- Terraform 0.7でterraform_remote_stateはdeprecated扱い – kikumotoのメモ帳
-
- Terraformの出力を別のTerraformで利用する – Qiita
-
- オレオレterraformディレクトリ構成ベストプラクティス – Qiita
- terraform使い方(超基礎編) – Qiita