Use map of terraform

terraformで変数を条件によって使い分けたい場合、マップという仕組みを使うとうまく出来ることを知った。

例えば、awsでサブネットのCIDRを切りたい場合。

ap-northeast-1aの場合は10.0.0.0/24を、
ap-northeast-1cの場合は10.0.1.0/24としたい場合、以下のように変数をマップする。(って言い方で合ってるのかな?)

variables.tf

variable "subnets_cidr_block" {  
    description = "subnets cidr block"
    default     = {
        ap-northeast-1a = "10.0.0.0/24"
        ap-northeast-1c = "10.0.1.0/24"
    }
}

main.tfでは以下のように呼び出す。

main.tf

resource "aws_subnet" "1a" {  
    vpc_id            = "${aws_vpc.main.id}"
    cidr_block        = "${var.subnets_cidr_block.ap-northeast-1a}"
    availability_zone = "ap-northeast-1a"
}

resource "aws_subnet" "1c" {  
    vpc_id            = "${aws_vpc.main.id}"
    cidr_block        = "${var.subnets_cidr_block.ap-northeast-1c}"
    availability_zone = "ap-northeast-1c"
}

結果

+ aws_subnet.1a
    availability_zone:       "" => "ap-northeast-1a"
    cidr_block:              "" => "10.0.0.0/24"
    vpc_id:                  "" => "${aws_vpc.main.id}"

+ aws_subnet.1c
    availability_zone:       "" => "ap-northeast-1c"
    cidr_block:              "" => "10.0.1.0/24"
    vpc_id:                  "" => "${aws_vpc.main.id}"

これは便利ですぞ!

参考

VARIABLE CONFIGURATION