vm.gowatana.jp

NEOにほんごVMware(仮)

VMware Cloud Director 10.4 を Terraform で操作してみる。Part-05 複数の DNAT ルール設定

ひきつづき、VMware Cloud Director 10.4(VCD)を Terraform で操作してみます。前回は、vApp と仮想マシンを作成と同時に、仮想マシンに払い出された IP アドレスにあわせた DNAT ルールを作成してみました。

今回は、あらかじめ決められた IP アドレスを設定する DNAT ルールを、複数まとめて作成してみます。

 

今回の環境

今回の環境も、前回と同様の VCD 環境を利用しています。

 

また、下記の .tf ファイルも前回と同じものをそのまま利用します。

 

今回用意した .tf ファイル

上記のファイルに加えて、DNAT ルールを作成する Edge Gateway と、DNAT ルールを定義した .tf ファイルを作成しておきます。

 

Edge Gateway の Data 定義

Edge Gateway を取得する data の定義は、下記のように .tf ファイルを作成しておきます。わかりやすくするため、DNAT ルールの定義とは .tf ファイルを分割してあります。

edge-gateway.tf

gist.github.com

 

DNAT の Resource 定義

今回は、2件の DNAT ルールを 2パターンの方法で定義してみます。terraform コマンドを実行する場合は、パターン A / B いずれか 1つのファイルだけ配置しておきます。

 

パターン A: dnat.tf

IP アドレスを記載したルールを 1件づつ記載しておきます。さらに DNAT ルールごとにファイル分割しておくことも可能です。

gist.github.com

 

パターン B: dnat-rules.tf

count によるループで IP アドレスを定義します。IP アドレスが連番になっていて、DNAT ルール数が多い場合に便利です。

gist.github.com

 

DNAT ルールの作成 / 削除

.tf ファイル一式(DNAT ルールはパターン A/B どちらか1つのみ)を配置したら、意図した通り DNAT ルールが作成されることを確認しておきます。

$ terraform plan

 

下記のようにコマンドを実行すると、DNAT ルールが作成できます。

$ terraform apply -auto-approve

 

実行すると、下記のように DNAT ルールが作成されます。(例は パターン B)

$ terraform apply -auto-approve
data.vcd_nsxt_edgegateway.nsxt-edge-01: Reading...
data.vcd_nsxt_edgegateway.nsxt-edge-01: Read complete after 5s [id=urn:vcloud:gateway:da240008-4afd-4731-aa43-9c3e4c3a41b7]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # vcd_nsxt_nat_rule.dnat-rules-1[0] will be created
  + resource "vcd_nsxt_nat_rule" "dnat-rules-1" {
      + description      = "Managed by Terraform"
      + edge_gateway_id  = "urn:vcloud:gateway:da240008-4afd-4731-aa43-9c3e4c3a41b7"
      + enabled          = true
      + external_address = "192.168.31.111"
      + firewall_match   = "BYPASS"
      + id               = (known after apply)
      + internal_address = "10.0.1.111"
      + logging          = false
      + name             = "tf-dnat-192.168.31.111"
      + priority         = (known after apply)
      + rule_type        = "DNAT"
      + vdc              = (known after apply)
    }

  # vcd_nsxt_nat_rule.dnat-rules-1[1] will be created
  + resource "vcd_nsxt_nat_rule" "dnat-rules-1" {
      + description      = "Managed by Terraform"
      + edge_gateway_id  = "urn:vcloud:gateway:da240008-4afd-4731-aa43-9c3e4c3a41b7"
      + enabled          = true
      + external_address = "192.168.31.112"
      + firewall_match   = "BYPASS"
      + id               = (known after apply)
      + internal_address = "10.0.1.112"
      + logging          = false
      + name             = "tf-dnat-192.168.31.112"
      + priority         = (known after apply)
      + rule_type        = "DNAT"
      + vdc              = (known after apply)
    }

Plan: 2 to add, 0 to change, 0 to destroy.
vcd_nsxt_nat_rule.dnat-rules-1[0]: Creating...
vcd_nsxt_nat_rule.dnat-rules-1[1]: Creating...
vcd_nsxt_nat_rule.dnat-rules-1[0]: Still creating... [10s elapsed]
vcd_nsxt_nat_rule.dnat-rules-1[1]: Still creating... [10s elapsed]
vcd_nsxt_nat_rule.dnat-rules-1[0]: Still creating... [20s elapsed]
vcd_nsxt_nat_rule.dnat-rules-1[1]: Still creating... [20s elapsed]
vcd_nsxt_nat_rule.dnat-rules-1[0]: Creation complete after 23s [id=c026488e-67ba-44f4-ba94-f50b63c86a99]
vcd_nsxt_nat_rule.dnat-rules-1[1]: Still creating... [30s elapsed]
vcd_nsxt_nat_rule.dnat-rules-1[1]: Still creating... [40s elapsed]
vcd_nsxt_nat_rule.dnat-rules-1[1]: Creation complete after 46s [id=0ecd825f-e969-4dd9-abc3-ea22a419b333]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

 

どちらの場合も、下記のように 2件の DNAT ルールが作成されます。

 

そして、下記のようにコマンドを実行すると、DNAT ルールを削除できます。

$ terraform destroy -auto-approve

 

続くかもしれない。