すごい謎なんですけど
妙にハマって、触りたくないなーと思いながら1日半放置したので、ここに日本語で残しておきます。
前提なんですけど
こうやって、sources/asg/main.tf
にあるモジュールを呼び出しています。
module "my_asg" {
source = "./sources/asg"
}
sources/asg/main.tf
では、こんな感じでAuto Scaling Groupを定義しています。
resource "aws_autoscaling_group" "asg" {
.......
}
親ファイル内で、このmy_asg
で定義されたARNを取得しようとします。
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
ブロックを定義します。
output "arn" {
value = aws_autoscaling_group.asg.arn
}
親モジュールから、アクセスします。
resource "aws_ecs_capacity_provider" "my_cp" {
auto_scaling_group_provider {
auto_scaling_group_arn = module.my_asg.arn # ここで定義したARNを使ってます!!
}
}
こんな感じです。
依存関係出てくるので、必要に応じてdepends_on
使ってやってください。