NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Terraform で FVN の NAT VPC を構成してみる。Part-03:VPC と仮想マシンの作成(tf ファイル集約)

Terraform の Nutanix Provider v2 で、VPC 環境と仮想マシンの作成、Floating IP アドレスの割り当てをまとめて実施してみます。今回は、あえて Terraform の構成ファイルを1つにまとめてみます。

今回の内容です。

今回の内容

これまで実施した下記の内容を、あえて1つの tf ファイルにまとめてみます。

 

ちなみに、ラボ環境のホスト配置は下記のようになっています。

 

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 アドレス

gist.github.com

 

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版ポートを開放

gist.github.com

 

このスクリプトを 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

 

つづく。

 

©2024 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。