2017-08-23 8 views
1

モジュール内のリソースIDに依存して、そのモジュールの出力として最初に定義することはできますか?terraformモジュール内のリソースへの依存関係を表現するには "出力"が必要ですか?

私は現在、トップレベルで定義された要素の束を持つテラフォームプロジェクトを持っています。私はかなり冗長なので(aws_security_group_ruleを使用すると)セキュリティグループをモジュールに入れました。実際には、プロジェクト内の他の場所にIDが必要なためです。

resource "aws_instance" "example_instance" { 
    # instance config goes here 
    vpc_security_group_ids = [ 
     "${reference}", 
    ] 
} 

などsecurity_groupsモジュール内の設定:

resource "aws_security_group" "example_group" { 
    # security group config goes here 
} 

最初のファイル内の参照は何もすることができ

だから、私は私のようなトップレベルのテラフォームファイルを持っている想像します"$ {module.security_groups.example_group.id}"のようなものですか?私が言うことができるように近く、答えはノー、私のようなエラーが取得されています

* module root: 
    resource 'aws_instance.example_instance' config: 
    aws_security_group.example_group.id is not a valid output for 
    module security_groups 

をしかし、私はこれを明示的にどこにも文書化さ見つけていないので、私は私の理解を確認しようとしています。作品私は見つけることができる唯一の方法は、モジュールファイルにこのような何かを行うことです。

output "example_group_id" { 
    value = "${aws_security_group.example_group.id}" 
} 

そして、参照はこのように書きます:${module.security_groups.example_group_id}

だから、誰でも確認することができます(とドキュメントへの理想的なポイントそれは確かです)それは正しい方法で、出力を伴っていますか?または、代わりに出力なしでそれを行う方法を教えてください。

+1

はい、それは明らかである、あなたは、それ以外の場合は、参照することができない、モジュールの設定出力を必要としています。 – BMW

+0

はい。このモジュールは、呼び出し側のブラックボックスのようなものです。呼び出し元は出力変数のみを参照できます。 – fishi

+0

@BMWそれはあなたには明らかです。私には分かりませんでした。私が見つけることができる唯一の場所は、「モジュールは独自の出力を指定することもできます。これらの出力は、たとえば設定の他の場所で参照することができます:」と書かれています。あなたは出力が必要ですが、私が実際に見つけることはできません。とにかく、あなたのどちらも答えを出していないのに、両方のあなたを確認してくれてありがとう、私はそれを受け入れることができません。 ;) –

答えて

2

はい、そのモジュールの出力を設定する必要があります。そうでない場合は、参照できません。

Terraformはオープンソースプロジェクトです(企業版もありますが、オープンソースではありません)。 output文書が十分でないと思われる場合は、プルリクエストを発行して更新してください。

関連値下げ文書はここにある:

https://github.com/hashicorp/terraform/blob/master/website/docs/configuration/outputs.html.md

+1

ちなみに、私はこの話し合いの後、この点についての説明を少し丁寧に寄稿しました: https://github.com/hashicorp/terraform/pull/15930 これは小さいですが、将来他の人に役立つかもしれません。 –

+0

ニースジョブ、@ GeoffreyWiseman – BMW

関連する問題