Terraform の Nutanix Provider v2 で、VPC 環境と仮想マシンの作成、Floating IP アドレスの割り当てをまとめて実施してみます。今回は、あえて Terraform の構成ファイルを1つにまとめてみます。
今回の内容です。
今回の内容
これまで実施した下記の内容を、あえて1つの tf ファイルにまとめてみます。
- Terraform で FVN の NAT VPC を構成してみる。Part-01:NAT VPC 環境の作成
- Terraform で FVN の NAT VPC を構成してみる。Part-02:仮想マシンと Floating IP の作成
ちなみに、ラボ環境のホスト配置は下記のようになっています。
1. tf ファイルの作成
新規ディレクトリを用意して、Terraform の .tf ファイルを一式を作成します。今回は VPC と 仮想マシンを同時に作成してるため、これまでとはリソースの参照指定が少し異なります。
今回のファイル構成
ディレクトリには、下記のように main.tf ファイルのみを作成します。cloud-init の YAML ファイル(cloud-init_ol-web.yml)も配置してありますが、このファイルの内容も main.tf に含めてあるので、今回は読み込みません。
$ tree --charset=ascii ./ ./ |-- cloud-init_ol-web.yml `-- main.tf
main.tf の内容
この tf ファイルには、Nutanix Provider のバージョンと、Nutanix クラスタへの接続情報もまとめて記載しています。あえて変数を使用していないので、これまでの variable.tf ファイルでの変数定義は不要です。
- L11:Prism Central に接続するユーザーは admin
- L12:Prism Central 接続ユーザーのパスワードを実際のものに書き換える
- L13:Prism Central のアドレスは、lab-nxpc-01.go-lab.jp
リソースは、下記を作成します。
- L28~:VLAN サブネットを作成(nw-vlan-21-extnat)
- L52~:VPC を作成(vpc1)
- L63~:VPC のデフォルト ルートを設定
- L81~:Overlay サブネットを作成(overlay-11)
- L116~:仮想マシンを作成(web-01)
- L158~:Cloud-init スクリプト(この後で説明する cloud-init_ol-web.yml)を Base64 エンコードしたものを指定
- L187~:Floating IP アドレスを作成して、仮想マシン(web-01)の NIC に割り当てる
IP アドレス プールから払い出されたアドレスを、output で出力しています。
- L198~:仮想マシン(web-01)に設定された IP アドレス
- L202~:Floating IP アドレス
cloud-init_ol-web.yml(Cloud-init スクリプト)
Cloud-init のスクリプトとして、下記を用意しました。
今回は、Python による簡易的に Web サーバーを、Systemd で起動しています。(これから作成する VPC の構成によっては、インターネット接続性がなく dnf で httpd などのインストールができないため)
- L18~L29:Python Web サーバーを起動する Systemd Unit ファイルを作成(Web サーバーのポート番号は 8080)
- L32-L33:Web ページ(index.html)を作成
- L33-34:Systemd で Python Web サーバーのサービスを有効化
- L35-36:firewall-cmd で8080版ポートを開放
このスクリプトを base64 コマンドでエンコードしたものを、main.tf ファイル(L158~L171)に記述しています。
$ cat cloud-init_ol-web.yml | base64 I2Nsb3VkLWNvbmZpZwoKZGlzYWJsZV9yb290OiB0cnVlCnNzaF9wd2F1dGg6IHRydWUKcGFja2Fn ZV91cGdyYWRlOiBmYWxzZQoKdXNlcnM6Ci0gbmFtZTogbnV0YW5peAogIHNoZWxsOiAvYmluL2Jh c2gKICBsb2NrLXBhc3N3ZDogZmFsc2UKICBzdWRvOiBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCgpj aHBhc3N3ZDoKICBsaXN0OiB8CiAgICBudXRhbml4Om51dGFuaXgvNHUKICBleHBpcmU6IGZhbHNl Cgp3cml0ZV9maWxlczoKLSBwYXRoOiAvZXRjL3N5c3RlbWQvc3lzdGVtL2RlbW8td2ViLnNlcnZp Y2UKICBjb250ZW50OiB8CiAgICBbVW5pdF0KICAgIERlc2NyaXB0aW9uPURlbW8gV2ViIFNlcnZl cgogICAgQWZ0ZXI9bmV0d29yay50YXJnZXQKICAgIFtTZXJ2aWNlXQogICAgRXhlY1N0YXJ0PS91 c3IvYmluL3B5dGhvbjMgLW0gaHR0cC5zZXJ2ZXIgODA4MCAtLWRpcmVjdG9yeSAvdG1wL3d3dwog ICAgUmVzdGFydD1hbHdheXMKICAgIFVzZXI9cm9vdAogICAgW0luc3RhbGxdCiAgICBXYW50ZWRC eT1tdWx0aS11c2VyLnRhcmdldAoKcnVuY21kOgogIC0gbWtkaXIgLXAgL3RtcC93d3cKICAtIGVj aG8gIldlYiAkKGhvc3RuYW1lIC1JIHwgYXdrICd7cHJpbnQgJDF9JykiID4gL3RtcC93d3cvaW5k ZXguaHRtbAogIC0gc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKICAtIHN5c3RlbWN0bCBlbmFibGUg LS1ub3cgZGVtby13ZWIKICAtIGZpcmV3YWxsLWNtZCAtLXBlcm1hbmVudCAtLWFkZC1wb3J0PTgw ODAvdGNwCiAgLSBmaXJld2FsbC1jbWQgLS1yZWxvYWQKCg==
2. terraform コマンドの実行
新規フォルダで terraform コマンドを実行するので、「teraform init」を実行します。
$ terraform init
これまでと同様に、「terraform plan」→「terraform apply」でリソースを作成します。
$ terraform plan $ terraform apply -auto-approve
下記のように、仮想マシンの IP アドレスと、Floating IP アドレスが表示されます。
output は、あとから下記のコマンドでも確認できます。
$ terraform output vm_fip = "192.168.21.17" vm_ip = "10.0.11.12"
リソースが作成され、下記のように State が登録されます。
$ terraform state list data.nutanix_clusters_v2.cluster1 data.nutanix_images_v2.ol95 data.nutanix_route_tables_v2.table1 nutanix_floating_ip_v2.fip1 nutanix_routes_v2.route1 nutanix_subnet_v2.ext-subnet1 nutanix_subnet_v2.overlay1 nutanix_virtual_machine_v2.vm1 nutanix_vpc_v2.vpc1
Prism Central で、リソースが作成されたことが確認できます。
仮想マシン「web-01」の IP アドレスは「10.0.11.12」です。
そして、Floating IP アドレス「192.168.21.17」が仮想マシン「web-01」に割り当てられています。
3. 仮想マシンへのアクセス確認
curl を使用して、web-01 による「192.168.21.17」の 8080 番ポートにアクセスしてみると、Web ページが取得できました。
$ curl 192.168.21.17:8080 Web 10.0.11.12
そして、SSH ログイン(nutanix / nutanix4u)すると、仮想マシンの NIC には「10.0.11.12」が設定されてます。そして、Cloud-init で指定したとおり Web ページの index.html ファイルが作成されています。
4. リソースの削除
作成したリソース一式を、「terraform destroy」で削除しておきます。
$ terraform destroy -auto-approve
つづく。