🪐

TerraformのModule間で値をやり取りする

2023/05/20に公開

前置き

TerraformのModuleを複数使用する場合、Module間での値の受け渡しにはoutputを用いる必要があります。
今回はEC2を題材に練習してみました。

https://developer.hashicorp.com/terraform/language/values/outputs#accessing-child-module-outputs

リポジトリ

コードは以下です。
https://github.com/not75743/terraform-module-output

説明

EC2で使用するパラメータ

  • VPCID
    • セキュリティグループのため
  • SubnetID
    • EC2のため
  • IAMロール名
    • インスタンスプロファイルのため

これらをEC2モジュールで使用するために、network、IAMモジュールでoutputします。

output

以下のように必要な情報をoutputします

network/output.tf
output "VPCID" {
  value = aws_vpc.vpc.id
}

output "public1ID" {
  value = aws_subnet.public1.id
}

IAM/output.tf
output "iam_role" {
  value = aws_iam_role.test_role.name
}

outputを受け取る

outputした情報をmoduleブロックで受け取ります。
今回はEC2のモジュールを使う際に受け取っています。

main.tf
module "ec2" {
  source        = "./modules/ec2"
  vpcid         = module.network.VPCID
  role_name     = module.IAM.iam_role
  subnet        = module.network.public1ID
}

あとは設定した変数を使うだけです。

参考

https://developer.hashicorp.com/terraform/language/values/outputs#accessing-child-module-outputs
https://dev.classmethod.jp/articles/terraform_module_coordination/

Discussion