#2 Terraformを使用して仮想マシンを作成する

IIJ GIOインフラストラクチャーP2 Gen.2

前回の投稿では、Terraformの概要とIIJ GIOインフラストラクチャーP2 Gen.2 フレキシブルサーバリソース(以下 Gen.2 FSR)のAPIについて紹介しました。

第2回である本記事では、実際にコードを用いて仮想マシンを作成する方法についてご説明します。

Terraformを使用して仮想マシンを作成する
#1 Terraformの概要とGen.2 FSRのAPIについて
#2 Terraformを使用した仮想マシン作成(前半)
#3 Terraformを使用した仮想マシン作成(後半)

Terraformの準備

Terraformの公式サイトから、利用しているOSに対応した実行ファイルをダウンロードします。

ダウンロードしたファイルを任意のディレクトリに保存し、環境変数にPathを通します。

Terraformの定義ファイルを作成する

以下の仮想マシンを例に、Terraformの定義ファイルの書き方についてご紹介します。

定義ファイルに設定できる項目は仮想マシンの詳細画面と同じ内容です。

  • OS:Windows Server 2022
  • CPU:2core
  • メモリ:8GB
  • Disk:100GB
  • IP:192.168.1.10
  1. 前回ご紹介したProviderや、APIの接続先、認証トークンを指定します。
    ※今回は認証情報を定義ファイルに直接記載していますが、セキュリティ上好ましくない方法です。次回の投稿では環境変数などで代替する方法をご説明します。

    terraform {
      required_providers {
        vcd = {
          source = "vmware/vcd" // VMware Cloud Director Terraform Providerを指定
        }
      }
    }
    
    provider "vcd" {
      auth_type = "api_token" // 認証方式を指定(固定値)
      api_token = "XXXXXXXX" // 事前に作成したAPIトークン
      org = "svrssa-XXXXXXXX" // 組織名。「API情報」タブに記載
      vdc = "svrssa-XXXXXXXX" // 組織VDC名。「API情報」タブに記載
      url = "https://vcd14.gen2.p2.iijgio.jp/api" // APIエンドポイント。「API情報」タブに記載
      max_retry_timeout = 3 // リトライ回数
    }
    
  2. 使用するOSテンプレートを定義します。今回はWindows Server 2022を指定しています。

    // OSライブラリ
    data "vcd_catalog" "win_lib" {
      org  = "os-library" // 組織名(固定値)
      name = "OSライセンス:Windows" // カタログ名(固定値)
    }
    
    // OSテンプレートの例
    data "vcd_catalog_vapp_template" "win2022" {
      catalog_id = data.vcd_catalog.win_lib.id // vcd_catalogのIDを参照
      name       = "Windows Server 2022 (1.2)" // 実在のOSテンプレートの名前
    }
    
  3. 仮想マシンに割り当てるリソースを定義します。

    // 作成する仮想マシンの定義
    resource "vcd_vm" "SampleVM" {
      name                   = "SampleVM" // 仮想マシン名
      computer_name          = "SampleVM" // コンピュータ名
      vapp_template_id       = data.vcd_catalog_vapp_template.win2022.id //項番2で定義したOSテンプレートのIDを参照
      cpus                   = 2 // 仮想CPUの数
      cpu_cores              = 2 // ソケットあたりのコア数
      cpu_hot_add_enabled    = false // CPUホットアドの有効・無効
      memory                 = 8192 // メモリのサイズ(MB単位)
      memory_hot_add_enabled = false // メモリホットアドの有効・無効
      power_on               = false // 電源の状態
      accept_all_eulas       = true // EULAに同意する(固定値)
    
  4. ディスク容量の指定と、仮想マシンに割り当てるIPアドレスを定義します。

    // システムディスクの定義
      override_template_disk {        
        bus_type        = "paravirtual"         
        size_in_mb      = "102400" // ディスク容量(MB単位)
        bus_number      = 0          
        unit_number     = 0         
        storage_profile = "basic" // ブロックストレージプールの品目を「basic」 or 「standard」で指定
      }
    
    // NICの定義
      network {                                       
        name               = "プライベートネットワーク" // 仮想マシンが接続するプライベートネットワークセグメントの名称を記載
        type               = "org"
        ip_allocation_mode = "MANUAL"                 
        ip                 = "192.168.1.10"                 
        is_primary         = true
      }
    
  5. 仮想マシンのカスタマイズ設定を定義します。admin_passwordの項目に指定した内容が仮想マシンの初期パスワードになります。

    // ゲストOSのカスタマイズを定義
      customization {
        enabled    = true
        change_sid = true
        auto_generate_password = false        
        admin_password         = "xxxxxxxx" // OSパスワードを指定
    
  6. Terraformの定義ファイルは拡張子に「.tf」を用います。項番1~5で記載した内容を以下のように1つにまとめ、SampleVM.tfなどの名前で定義ファイルを作成します。

    terraform {
      required_providers {
        vcd = {
          source = "vmware/vcd" // VMware Cloud Director Terraform Providerを指定
        }
      }
    }
    
    provider "vcd" {
      auth_type         = "api_token" // 認証方式を指定(固定値)
      api_token         = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" // 事前に作成したAPIトークン
      org               = "svrssa-xxxxxxxxxxxxx" // 組織名。「API情報」タブに記載
      vdc               = "svrssa-xxxxxxxxxxxxx" // 組織VDC名。「API情報」タブに記載
      url               = "https://vcd14.gen2.p2.iijgio.jp/api" // APIエンドポイント。「API情報」タブに記載
      max_retry_timeout = 3 // リトライ回数
    }
    
    // OSライブラリ
    data "vcd_catalog" "win_lib" {
      org  = "os-library" // 組織名(固定値)
      name = "OSライセンス:Windows" // カタログ名(固定値)
    }
    
    // OSテンプレートの例
    data "vcd_catalog_vapp_template" "win2022" {
      catalog_id = data.vcd_catalog.win_lib.id // vcd_catalogのIDを参照
      name       = "Windows Server 2022 (1.2)" // 実在のOSテンプレートの名前
    }
    
    // 作成する仮想マシンの定義
    resource "vcd_vm" "SampleVM" {
      name                   = "SampleVM" // 仮想マシン名
      computer_name          = "SampleVM" // コンピュータ名
      vapp_template_id       = data.vcd_catalog_vapp_template.win2022.id //項番2で定義したOSテンプレートのIDを参照
      cpus                   = 2 // 仮想CPUの数
      cpu_cores              = 2 // ソケットあたりのコア数
      cpu_hot_add_enabled    = false // CPUホットアドの有効・無効
      memory                 = 8192 // メモリのサイズ(MB単位)
      memory_hot_add_enabled = false // メモリホットアドの有効・無効
      power_on               = false // 電源の状態
      accept_all_eulas       = true // EULAに同意する(固定値)
    
      // システムディスクの定義
      override_template_disk {
        bus_type        = "paravirtual"
        size_in_mb      = "102400" // ディスク容量(MB単位)
        bus_number      = 0
        unit_number     = 0
        storage_profile = "basic" // ブロックストレージプールの品目を「basic」 or 「standard」で指定
      }
    
      // NICの定義
      network {
        name               = "プライベートネットワーク" // 仮想マシンが接続するプライベートネットワークセグメントの名称を記載
        type               = "org"
        ip_allocation_mode = "MANUAL"
        ip                 = "192.168.1.10"
        is_primary         = true
      }
    
      // ゲストOSのカスタマイズを定義
      customization {
        enabled                = true
        change_sid             = true
        auto_generate_password = false
        admin_password         = "xxxxxxxx" // OSパスワードを指定
      }
    }
      

Terraformを実行して仮想マシンを作成する

定義ファイルと同じディレクトリで、以下のコマンドを実行して仮想マシンを作成します。

terraform init // 実行するディレクトリ配下でTerraformを使用する環境を整えます。

terraform plan // クラウド側へ反映を行わず、定義ファイルの実行内容の確認のみを行います。

terraform apply // 定義ファイルに従ってクラウド上に仮想マシンを作成します。

terraform applyのコマンドを実行し、仮想マシンの作成が完了すると以下のとおり表示されます。

vcd_vapp.SampleVM: Creating...
vcd_vapp.SampleVM: Creation complete after 5s [id=urn:vcloud:vapp:########]
vcd_vapp_vm.SampleVM: Creating...
vcd_vapp_vm.SampleVM: Still creating... [10s elapsed]
vcd_vapp_vm.SampleVM: Still creating... [20s elapsed]
vcd_vapp_vm.SampleVM: Still creating... [30s elapsed]
vcd_vapp_vm.SampleVM: Still creating... [40s elapsed]
vcd_vapp_vm.SampleVM: Still creating... [50s elapsed]
vcd_vapp_vm.SampleVM: Creation complete after 53s [id=urn:vcloud:vm:########]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

VMware Cloud Director Terraform Providerについて

今回ご紹介した仮想マシンの作成は、VMware Cloud Director Terraform Providerが提供する「vcd_vm」を使用します。

より詳しいVMware Cloud Director Terraform Providerの利用方法や、Gen.2 FSRでの利用可否については次のマニュアルをご確認ください。

執筆者
IIJ サービスプロダクト推進本部 サービス推進部 技術支援2課