使用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}。

注值的方法

有四种指定值的方法。

    1. 在执行时进行指定

 

    1. 通过命令参数进行指定

 

    1. 通过环境变量进行指定

 

    通过配置文件进行指定

在运行时指定

在声明变量之后,执行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
bannerAds