Terraform の Nutanix Provider v2 で、Flow Virtual Networking(FVN)の NAT VPC に Overlay サブネットと仮想マシンを作成してみます。今回は、Overlay サブネットと仮想マシンの tf ファイルをモジュール化してみます。
今回の内容です。
- 今回の環境
- 今回の tf ファイル構成
- 1. tf ファイルの作成(1_vpc ディレクトリ)
- 2. tf ファイルの作成(2_overlay-vm ディレクトリ)
- 3. VPC の作成
- 4. Overlay サブネットと仮想マシンの作成
- リソースの削除
今回の環境
下記の投稿と同様の VPC 環境を、Terraform で作成してみます。
前回の投稿では、tf ファイルをリソースごとの分割して作成してみました。
今回は、Overlay サブネットと仮想マシンを作成する tf ファイルを、モジュールとして分離してみます。
今回の tf ファイル構成
ディレクトリには、下記のようにファイルを作成します。tf ファイルを 2つのディレクトリ(1_vpc と 2_overlay-vm)に分割してあるので、Terraform の State も分割されます。
$ tree --charset=ascii ./ ./ |-- 1_vpc | |-- data_cluster_v2.tf | |-- data_route-table_v2.tf | |-- output.tf | |-- prism.auto.tfvars | |-- provider.tf | |-- route_v2.tf | |-- subnet-ext_v2.tf | |-- variable.tf | `-- vpc_v2.tf `-- 2_overlay-vm |-- cloud-init_ol-web.yml |-- modules | `-- overlay | |-- data_cluster_v2.tf | |-- data_image_v2.tf | |-- data_vpc_v2.tf | |-- output.tf | |-- provider.tf | |-- subnet-overlay_v2.tf | |-- variables.tf | `-- vm_v2.tf |-- overlay-11_vm.tf |-- overlay-12_vm.tf |-- prism.auto.tfvars |-- provider.tf `-- variable.tf
1. tf ファイルの作成(1_vpc ディレクトリ)
1_vpc ディレクトリには、External Subnet と VPC を作成する tf ファイルを格納します。このディレクトリに配置するファイルは、以前の投稿 で作成したものと同じ内容で作成しておきます。
- provider.tf
- variable.tf
- prism.auto.tfvars
- data_cluster_v2.tf
- subnet-ext_v2.tf
- vpc_v2.tf
- data_route-table_v2.tf
- route_v2.tf
おまけとして、VPC の External IP アドレス(今回は自動採番)を出力する Output を追加します。
output.tf
2. tf ファイルの作成(2_overlay-vm ディレクトリ)
2_overlay-vm ディレクトリには、Overlay サブネットと仮想マシンを作成する tf ファイルを、モジュール化して格納してあります。
以前の投稿の tf ファイル
2_overlay-vm ディレクトリでも、以前の投稿 で作成した下記のファイル一式をそのままの内容で作成します。
- prism.auto.tfvars
- provider.tf
- variable.tf
Cloud-init も、以前の投稿と同様のものを使用します。
modules ディレクトリ
modules ディレクトリ配下に、モジュール化した tf ファイルを格納します。
modules/overlay/provider.tf
modules/overlay/variables.tf
modules/overlay/data_cluster_v2.tf
modules/overlay/data_vpc_v2.tf
modules/overlay/subnet-overlay_v2.tf
modules/overlay/data_image_v2.tf
modules/overlay/vm_v2.tf
modules/overlay/output.tf
overlay-11_vm.tf と overlay-12_vm.tf
モジュールを利用する tf ファイルを、Overlay サブネット単位で作成します。
overlay-11_vm.tf
overlay-12_vm.tf
3. VPC の作成
External Subnet と VPC を作成するため、1_vpc ディレクトリで terraform コマンドを実行します。
$ cd ./1_vpc/
新規フォルダで terraform コマンドを実行するので、初回のみ「teraform init」を実行します。
$ terraform init
「terraform plan」→「terraform apply」でリソースを作成します。
$ terraform plan $ terraform apply -auto-approve
Terraform の State は下記のように登録されます。
$ terraform state list data.nutanix_clusters_v2.cluster1 data.nutanix_route_tables_v2.table1 nutanix_routes_v2.route1 nutanix_subnet_v2.ext-subnet1 nutanix_vpc_v2.vpc1
VPC に設定されてた External IP アドレスは、下記のように確認できます。
$ terraform output vpc_external_ip = [ "192.168.21.27", "192.168.21.28", ]
4. Overlay サブネットと仮想マシンの作成
Overlay サブネットと仮想マシンを作成するため、2_overlay-vm ディレクトリで terraform コマンドを実行します。
$ cd ../2_overlay-vm/
新規フォルダで terraform コマンドを実行するので、初回のみ「teraform init」を実行します。
$ terraform init
「terraform plan」→「terraform apply」でリソースを作成します。
$ terraform plan $ terraform apply -auto-approve
Terraform の State は下記のように登録されます。
$ terraform state list module.overlay1.data.nutanix_clusters_v2.cluster1 module.overlay1.data.nutanix_images_v2.image1 module.overlay1.data.nutanix_vpcs_v2.vpc1 module.overlay1.nutanix_subnet_v2.overlay1 module.overlay1.nutanix_virtual_machine_v2.vms[0] module.overlay2.data.nutanix_clusters_v2.cluster1 module.overlay2.data.nutanix_images_v2.image1 module.overlay2.data.nutanix_vpcs_v2.vpc1 module.overlay2.nutanix_subnet_v2.overlay1 module.overlay2.nutanix_virtual_machine_v2.vms[0]
仮想マシンに設定されてた IP アドレスは、下記のように確認できます。
$ terraform output overlay1_vm_ip = { "vm11-01" = "10.0.11.12" } overlay2_vm_ip = { "vm12-01" = "10.0.12.15" }
リソースの削除
今回作成したリソースの削除は、2_overlay-vm ディレクトリ → 1_vpc ディレクトリの順で「terraform destroy」を実行します。
2_overlay-vm ディレクトリに移動します。
$ cd ../2_overlay-vm/
terraform destroy で、Overlay サブネットと仮想マシンを削除します。
$ terraform destroy -auto-approve
1_vpc ディレクトリに移動します。
$ cd ../1_vpc/
VPC と External Subnet を削除します。
$ terraform destroy -auto-approve
つづく。