以前は、variables.tfに
variable "project" {
default = {
id = "zuu-infra"
name = "zuu-infra"
region = "asia-northeast1"
description = "create from terraform"
}
}
variable "domain" {
default = {
step = "common-step.zuuonline.com"
zabbix-web = "zbx.zuuonline.com"
relay = "relay.zuuonline.com"
redash = "redash.zuuonline.com"
zabbix = "zbx.zuuonline.com"
grafana = "grafana.zuuonline.com"
vuls = "vuls.zuudev.com"
}
}
と書いて読み込ませていた為、実行する対象が変わる度にvariables.tfファイルを差し替えしていた。
実ファイルを動かすのは宜しくないので、調べたところ
-vars-file=xxxx.tfvars
実行時とオプションで、ファイルを読み込ませられるようだ。
調べて、色々勘違いしていた事もあり勉強になったので書いておく。
ファイルは以下の3つ
vpc.tf
└ 実際のリソース定義
variables.tf
└ -vars-file=c.tfvars で渡された内容を「変数」として定義する。tfファイルと同じ場所に置く
c.tfvars
└ -vars-file=c.tfvars で渡す。 場所はどこでも良い(tfファイルからの相対パスか絶対パス)
variables.tfは、「変数」として定義するだけなので、
variable "credential" {
type = "map"
// c.tfvarsで情報が設定されていない場合のデフォルト値
default = {
"auth_file" = "~/.ssh/dev-project.json",
"project" = "dev-project",
"zones" = "us-east-1a",
"description" = "create from terraform"
}
}
// VPC
variable "vpc" {
type = "map"
}
このような感じで定義する。
c.tfvars は、variables.tf の typeに合うように変数を書く。
書き方は、以下のどちらでも認識した。
// procject
credential = {
"auth_file" = "~/.ssh/hoge.json",
"project" = "stg-project",
"zones" = "us-east-1a",
"description" = "create from terraform"
}
// vpc
vpc = {
vpc_name = "stg-project-network"
network = "172.24.0.0/22"
autoscale_network_cidr = "172.168.0.0/24"
autoscale_network_name = "subnet1"
autoscale_network_region = "us-east1"
none_autoscale_network_cidr = "172.168.2.0/24"
none_autoscale_name = "subnet2"
none_autoscale_region = "us-east1"
}
最後に、a.tf
これはリソースの定義なので、以前から書いている内容から変更は無いが、念の為に残しておく。
resource "google_compute_network" "vpc" {
name = "${lookup(var.vpc, "vpc_name")}"
description = "${lookup(var.credential, "description")}"
auto_create_subnetworks = "false"
}
resource "google_compute_subnetwork" "subnet1" {
depends_on = ["google_compute_network.vpc"]
name = "${lookup(var.vpc, "autoscale_network_name")}"
network = "${lookup(var.vpc, "vpc_name")}"
ip_cidr_range = "${lookup(var.vpc, "autoscale_network_cidr")}"
region = "${lookup(var.vpc, "autoscale_network_region")}"
private_ip_google_access = true
}
resource "google_compute_subnetwork" "subnet2" {
depends_on = ["google_compute_network.vpc"]
name = "${lookup(var.vpc, "none_autoscale_network_name")}"
network = "${lookup(var.vpc, "vpc_name")}"
ip_cidr_range = "${lookup(var.vpc, "none_autoscale_network_cidr")}"
region = "${lookup(var.vpc, "none_autoscale_network_region")}"
private_ip_google_access = true
}