0
1

More than 3 years have passed since last update.

Terraformでmoduleから値を取得する

Last updated at Posted at 2021-03-04

すごい謎なんですけど

妙にハマって、触りたくないなーと思いながら1日半放置したので、ここに日本語で残しておきます。

前提なんですけど

こうやって、sources/asg/main.tfにあるモジュールを呼び出しています。

asg.tf
module "my_asg" {
  source = "./sources/asg"
}

sources/asg/main.tfでは、こんな感じでAuto Scaling Groupを定義しています。

sources/asg/main.tf
resource "aws_autoscaling_group" "asg" {
  .......
}

親ファイル内で、このmy_asgで定義されたARNを取得しようとします。

asg.tf
resource "aws_ecs_capacity_provider" "my_cp" {
  auto_scaling_group_provider {
    auto_scaling_group_arn = # ここで定義したARNを使いたい!
  }
}

で、どうしたかと言うと

モジュールで定義しているリソースにアクセスするには、moduleを使う

子モジュールで定義された内容にはmoduleを用いてアクセスします。多分もっと適切なドキュメントあると思うんですけど、僕はここで確認しました。

In a parent module, outputs of child modules are available in expressions as module...

追記:コメントでもっと適切なドキュメントをご教示いただきました!ありがとうございます!

マジで適切だった。

モジュール内で定義されてる内容を利用する時は、outputを使う

Terraform歴が浅いからですかね、普通にresourceはアクセス可能なのかと思ってましたがどうやらそれは叶わず。きちんと、outputブロックで定義してやります。

結果なんですけど

sources/asg/main.tfの方に、outputブロックを定義します。

sources/asg/main.tf
output "arn" {
  value = aws_autoscaling_group.asg.arn
}

親モジュールから、アクセスします。

asg.tf
resource "aws_ecs_capacity_provider" "my_cp" {
  auto_scaling_group_provider {
    auto_scaling_group_arn = module.my_asg.arn # ここで定義したARNを使ってます!!
  }
}

こんな感じです。
依存関係出てくるので、必要に応じてdepends_on使ってやってください。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1