2017-12-07 19 views
0

私は、別々のテラフォームテンプレートの一部としてサブネットを作成し、IDを次のようにエクスポートしています。Terraform動的変数

output "subnet-aza-dev" { 
    value = "${aws_subnet.subnet-aza-dev.id}" 
} 
output "subnet-azb-dev" { 
    value = "${aws_subnet.subnet-azb-dev.id}" 
} 
output "subnet-aza-test" { 
    value = "${aws_subnet.subnet-aza-test.id}" 
} 
output "subnet-azb-test" { 
    value = "${aws_subnet.subnet-azb-test.id}" 
} 
... 

次に、複数の環境をプロビジョニングするために再利用される別のテンプレートでこれらのIDを参照しようとしています。以下の例は、2番目のテンプレートがEC2インスタンスをプロビジョニングするモジュールを呼び出していて、subnet_idを通過していることを示しています。

variable "environment" { 
    description = "Environment name" 
    default  = "dev" 
} 

module "sql-1-ec2" { 
    source  = "../modules/ec2winserver_sql" 
    ... 
    subnet_id = "${data.terraform_remote_state.env-shared.subnet-aza-dev}" 
} 

私がしたいのは、環境変数をsubnet_idのルックアップの一部として渡すことです。

ただし、可変補間はサポートされていません。私は、最初のテラフォームテンプレートの中のマップを使ってそれらをすべてサブネットにエクスポートしようとしました。そして、それを第2のテンプレートから検索することができました。マップ内に変数を出力できなかったため、これは機能しませんでした。

このようなデザインパターンは以前CloudFormationで使用していたものですが、私はterraformの方がはるかに新しいものです。私はここで何かを見逃していますか?

+0

'$ {}'に 'var.environment'をラップせずに試しましたか?残念なことに、 'subnet_id =" $として指定すると、あなたが望むことができるかどうかわからないですが、補間を使うと一度だけ必要です - それはすでに親の '$ {} '' ' –

+0

@TJBiddleの中にあります{data.terraform_remote_state.env-shared.subnet-aza-var.environment} "変数を展開せず、代わりに' subnet-aza-var.environment'属性を読み込もうとしますenv-sharedリソース – PhilH

答えて

0

は、データソースこの一方で

variable "environment" { 
    description = "Environment name" 
    default  = "dev" 
} 

module "sql-1-ec2" { 
    source  = "../modules/ec2winserver_sql" 
    ... 
    subnet_id = "${data.aws_subnet.subnet-aza.id}" 
} 

data "aws_subnet" "subnet-aza" { 
    filter { 
    name = "tag:Name" 
    values = ["${var.product}-${var.environment}-${var.environmentno}-subnet-aza"] 
    } 
} 
data "aws_subnet" "subnet-azb" { 
    filter { 
    name = "tag:Name" 
    values = ["${var.product}-${var.environment}-${var.environmentno}-subnet-azb"] 
    } 
} 

を使用してこれを行う方法を働い動作し、私の元の必要性を満たし、私はそのようにモジュール内にdataブロックを移動することで、この上で改善したいのですが繰り返しは少ないです。しかし、まだそれに取り組んでいます...