0.12のフォーマット
値の受け渡し
terraformにて、variableを使って変数を表現するが、
moduleをまたいでの受け渡しをどうするか
フォルダ構成の例
├── main.tf ├── modules │ ├── ec2 │ │ ├── ec2.tf │ │ └── variables.tf │ └── network │ ├── network.tf │ ├── outputs.tf │ └── variables.tf
こんな風になっているとして
networkディレクトリとec2ディレクトリでデータを渡したいということ
vpcで作ったvpcのidをec2に渡したいというのが目的
渡し方
modules/network/network.tfにてvpcを定義
# aws_vpc
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
}
modules/network/outputs.tfにてoutputsを定義(ファイルは分ける必要はないけど、ベストプラクティスとしてよくファイルは別に書かれている)
output "vpc_main" {
value = aws_vpc.main
}
このようにvpcのresourceを返すことができる
これを、main.tfで受け渡す
module "network" {
source = "./modules/network"
}
module "ec2" {
source = "./modules/ec2"
vpc_main = module.network.vpc_main
}
vpc_main = module.network.vpc_mainこれがキモで、module.<module名>.<output名>で取得可能
そしてこれをec2モジュールで受ける
modules/ec2/variables.tf
# vpc information.
variable "vpc_main" {}
modules/ec2/ec2.tf
# aws_instance
resource "aws_instance" "app" {
ami = "ami id"
instance_type = "t2.micro"
subnet_id = var.subnet_for_ec2.id
}
これで値が渡せる