TerraformでProxmox上にVMを作成してみた
インフラエンジニア志望なのにIaCツール触ったことないのはどうなのよ?ってことで、Terraformをさわさわしてみました。
AWSにインスタンスをプロビジョニングしても良かったんですが、インスタンスを止め忘れてえげつない請求が飛んでくるのが怖かったので、とりあえず手元のProxmox環境にVMを立てることから始めてみました。
大まかな手順
Terraform用ユーザの作成
https://registry.terraform.io/providers/Telmate/proxmox/latest/docs
公式ドキュメントに沿ってユーザと権限を設定していきます。
pveum role add TerraformProv -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Monitor VM.Audit VM.PowerMgmt Datastore.AllocateSpace Datastore.Audit" pveum user add terraform-prov@pve --password <password> pveum aclmod / -user terraform-prov@pve -role TerraformProv
VMのテンプレート作成
テンプレート作成の手順に関しては、こちらの記事を参考にさせていただきました。
blog.nishi.network
ここで作成したテンプレートをもとにVMを作成していきます。
HCLの記述
先ほど作成したテンプレートをクローンして新たにVMを立てていくため、各種構成を記述したtfファイルを作成します。
はじめに、Proxmoxサーバに接続するための情報をmain.tf
に定義していきます。
provider "proxmox"{ pm_api_url = var.api_url pm_user = var.user pm_tls_insecure =true }
さらに、公開したくない情報を別のファイルに定義しておくこともできるため、var.tf
にいくつかの値を定義しておきました。
variable "api_url"{ default = "ProxmoxサーバのURL" } variable "user"{ default = "Proxmoxサーバにログインするユーザ" }
また、今回はProxmoxプロバイダを使用するため、プラグイン関連の設定をversion.tf
に記述しました。
terraform { required_providers { proxmox = { source = "Telmate/proxmox" version = "2.9.0" } } }
最後に、作成するVMの構成をVMs.tf
にまとめていきます。今回は3台のVMでKubernetesクラスタを作成することを見込んだ設定としました。
resource "proxmox_vm_qemu" "UbuntuCP"{ name = "ubuntucp" target_node = "atras" clone = "UbuntuServerTemplate" memory = 2048 os_type = "cloud-init" disk{ type = "scsi" storage = "VMStore" size = "20G" } } resource "proxmox_vm_qemu" "UbuntuWN1"{ name = "ubuntuwn1" target_node = "atras" clone = "UbuntuServerTemplate" memory = 2048 os_type = "cloud-init" disk{ type = "scsi" storage = "VMStore" size = "20G" } } resource "proxmox_vm_qemu" "UbuntuWN2"{ name = "ubuntuwn2" target_node = "atras" clone = "UbuntuServerTemplate" memory = 2048 os_type = "cloud-init" disk{ type = "scsi" storage = "VMStore" size = "20G" } }
VMの作成
さて、必要なファイルをあらかた定義し終えたので、さっそくProxmoxサーバにVMを作成していきます。
$export PM_PASS="PASSWORD"
でProxmoxユーザのパスワードを環境変数に登録し、 $terraform plan
で、エラーチェックと作成されるVMの構成の確認を行います。
ここで表示された構成で問題がなければ、$terraform apply
で実際にVMを作成します。
Apply complete!
と表示されれば無事作成が終了していますので、実際にProxmox上で確認してみると、
こんな風に作成できていることがわかります。