1

Terraform を使用して、定義したカスタム子モジュール内に Fortigate リソースを構築しています。子モジュールの各インスタンスは、fortios_firewall_vipリソースを使用して 12 の一意の VIP を構築します。ルート モジュール内で、 fortios_firewall_vipgrpリソースを使用して VIP グループを定義しようとしています。これには、子モジュールのすべてのインスタンスから構築されたすべての VIPが含まれます。vipgrp リソース内で member{} ブロックを構築する方法に苦労しているようです。

フォルダ構造の内訳は次のとおりです。

root/
| _
    fortinet.tf
    modules/instance
    | _
        main.tf
        outputs.tf

main.tfファイルは、インスタンスごとに 12 の一意の VIP を構築する場所であり、outputs.tfファイルは、 fortinet.tfルート ファイルで参照するすべての VIP 名を保存する場所です。 VIP 名をリストとマップとして保存しようとしましたが、どちらが良い方法かわかりません。

リスト出力の例:

output "vips" {
  value = [
    fortios_firewall_vip.vip1.name,
    fortios_firewall_vip.vip2.name,
    etc...
  ]
}

マップ出力の例:

output "vips" {
  value = {
    name = fortios_firewall_vip.vip1.name
    name = fortios_firewall_vip.vip2.name
    etc...
  }
}

ルートの fortinet.tf ファイルで、メンバー ブロックを使用して 1 つの VIP グループを定義し、そこにすべてのインスタンス VIP を「分割」しようとしています。おそらくマップ出力を使用して、次のようにすべてを 1 つの巨大なブロックに単純にマージできると考えました。

resource "fortios_firewall_vipgrp" "vipgrp" {
  name = "example-vipgrp"
  member = merge(module.instance[*].vips)
}

ただし、次のエラーが表示されます
An argument named "member" is not expected here. Did you mean to define a block of type "member"?

私は Terraform の初心者なので、ここで支援を求めてグーグルで検索する必要がある用語に苦労しています...これは可能ですか?

どんな入力も非常に役に立ちます。ありがとう!

4

1 に答える 1