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 }
これで値が渡せる