Terraformが便利という話

クラウドや仮想基盤で使えるTerraformというツールがある

たとえばこんな感じ

variable name {}
variable target_node {}

terraform {
  required_providers {
    proxmox = {
      source = "Telmate/proxmox"
      version = "3.0.1-rc6"
    }
  }
}

provider "proxmox" {
  pm_api_token_id = "terrauser@pve!hogehoge"
  pm_api_token_secret = "************************"
  pm_api_url = "https://172.16.XXX.XXX:8006/api2/json"
  pm_tls_insecure = true
}




# Create the wef VM
resource "proxmox_vm_qemu" "wef" {

  name        = var.name
  target_node = var.target_node

  clone = "ubuntu24-temp-pve"
  os_type = "cloud-init"

  cores   = 4
  memory  = 4096
  numa = "true"

  nameserver = "1.1.1.1 8.8.8.8"
  ipconfig0  = "ip=172.16.XXX.XXX/24,gw=172.16.XXX.XXX,ip6=dhcp"

#  vm_state               = "stopped"
  vm_state               = "running"

  network {
    id     = 0
    bridge = "vmbr23"
    model  = "virtio"
  }

  disks {
    virtio {
      virtio0 {
        # We have to specify the disk from our template, else Terraform will think it's not supposed to be there
        disk {
          storage = "nvme"
          # The size of the disk should be at least as big as the disk in the template. If it's smaller, the disk will be recreated
          size    = "100G" 
        }
      }
    }
    ide {
      # Some images require a cloud-init disk on the IDE controller, others on the SCSI or SATA controller
      ide1 {
        cloudinit {
          storage = "hdd"
        }
      }
    }
  }



} # end proxmox_vm_qemu wef resource declaration

こんな感じでパラメーターを書くだけでテンプレートからコピーしてvCPUやメモリを設定して起動までしてくれる

cloud-initなのでIPアドレスやホスト名の設定までやってくれる

これとAnsibleを組み合わせることで管理用のVMで数コマンド実行するだけでサーバーが立てれてしまう
なんせTerraformを実行してVMを作成して、Ansibleで自動的にパッケージをインストールしてconfigの転送までしちゃえばそれだけで構築が完了してしまう

ここまで簡単に構築ができてしまうならまじでProxy程度のサーバーならVMのバックアップが必要なくなってくる

SquidのconfigとTerraformとAnsibleのplaybookだけ用意しておけばSlave機も検証機もホスト名とIPだけ変えて実行しちゃえばそれだけで構築できる

ただし難しいこともあってTerraformもAnsibleも重要なのは冪等性とコードの品質ということなのはとても感じる

TerraformもAnsibleもスクリプト的に処理を書くのではなくて「このサーバーはこうあるべき」というように書かないとコードを実行していい状況と実行してはいけない状況が発生してしまう
この状況はだるい

何がだるいってこのコードを実行するための手順書を作成してめんどくさい前提条件を作成しないといけない

でもちゃんと冪等性を確保する書き方をすればコードの内容が正しければ何度実行しても変なことにならない
host.iniに[new]を用意するような変な手順なんて必要ないということ

VMは起動と停止もここから操作できるからTerraformだけで基盤を操作する必要がなくなってしまう

かなり便利なのでこれ習得してバックアップが不要になればストレージの容量も減るからHDDの買い替え費用が減るから次からはバックアップ用HDDが壊れたら小さい容量で良くなりそう
しかもTerratarmとAnsibleとサーバーのconfigだけでいいから容量の低いクラウドに預ければロストするリスクも下がるからかなり良さそう

今後の課題は他のシステムをクラウド化するかどうか
電気代かかるし1Gbpsを8本まとめてLACPするのもなんか早くなっている感もないし、かといって10Gbps導入はお金かかりすぎる上にクライアント端末に恩恵なさすぎるからどうするか悩み中

コメント

タイトルとURLをコピーしました