gokigenmaruのブログ

40から始めるクラウドエンジニア

さくらのクラウドの検証環境を都度作るのが面倒なのでTerraform化してみる


検証環境ですが、作りっぱなしだとお金がかかる、都度消すとお金はそこまでかからないけど作るのが面倒。
調べてみるとさくらのクラウドはTerraformに対応しているとのこと。
ということで、Terraform化しちゃおうと思います。

Terraform化

APIキー作成

Terraformを実行するにあたり、APIキーを発行します。
さくらのクラウドホームで左側のツリーから、APIキーをクリック

作成したいアカウントをクリック

追加をクリック

以下の通り設定
APIキーの種類:リソース操作APIキー ※シングルサーバAPIキーはサーバ1台のみ操作できるような限定的なAPIキー、今回は検証でいろいろと作るのでリソースが操作できるAPIキーにしています
名前:適当に
説明:適当に
アクセスレベル:作成・削除 ※Terraformで構築、削除するので作成・削除権限にします
他サービスへのアクセス権:オブジェクトストレージにチェック ※なくてもいいのですが、もしかしたらストレージ作るかもということでつけました

これで作成完了です。
今回は検証用ですので、作成したAPIキーをTerraform実行時はexportで環境変数として定義します。

export SAKURACLOUD_ACCESS_TOKEN="APIトークン"
export SAKURACLOUD_ACCESS_TOKEN_SECRET="APIシークレット"

Terraform

構成

いつもの構成図です。

Terraform コード

それではコードを書きます。

provider.tf

terraform {
  required_providers {
    sakuracloud = {
      source = "sacloud/sakuracloud"

      # We recommend pinning to the specific version of the SakuraCloud Provider you're using
      # since new versions are released frequently
      version = "2.25.4"
      #version = "~> 2"
    }
  }
}
# Configure the SakuraCloud Provider
provider "sakuracloud" {
  # More information on the authentication methods supported by
  # the SakuraCloud Provider can be found here:
  # https://docs.usacloud.jp/terraform/provider/

  # profile = "..."
  zone   = "is1b"
}

server.tf

#############################################
# server
#############################################


data "sakuracloud_archive" "ubuntu" {
  os_type = "ubuntu2004"
}

resource "sakuracloud_disk" "vpctestdisk" {
  name                 = "vpctestdisk"
  plan                 = "ssd"
  connector            = "virtio"
  size                 = 20
  source_archive_id    = data.sakuracloud_archive.ubuntu.id
  encryption_algorithm = "aes256_xts"
}

resource "sakuracloud_server" "vpctestserver" {
  name   = "vpctestserver01"
  disks  = [sakuracloud_disk.vpctestdisk.id]
  core   = 1
  memory = 2
  network_interface {
    upstream        = sakuracloud_switch.testswitch.id
    user_ip_address = "192.168.0.2"
  }
  disk_edit_parameter {
    hostname   = "vpctestserver01"
    password   = "xxxxxxxxxxxx"
    ip_address = "192.168.0.2"
    netmask    = 24
    gateway    = "192.168.0.254"
  }
}

switch.tf

#############################################
# switch
#############################################

resource "sakuracloud_switch" "testswitch" {
  name = "vpctestswitch01"
}

vpcrouter.tf

#############################################
# VPCRouter
#############################################

resource "sakuracloud_vpc_router" "vpcrouter" {
  name = "vpctestrouter01"
  private_network_interface {
    index        = 1
    switch_id    = sakuracloud_switch.testswitch.id
    ip_addresses = ["192.168.0.254"]
    netmask      = 24
  }
  depends_on = [
    sakuracloud_switch.testswitch
  ]
}

depends_onは念のため書きましたが、いらないかも。

実行

$ terraform init
$ terraform plan
$ terraform apply

無事リソースが作成されました。

おわり

サーバ、Switch、VPCルータを作成するTerraformコードを書いてみました。
Terraformに慣れているとAWSとかよりも簡単に書ける気がします。おそらく設定項目が少ないからですね。

サーバにApache入れるのも面倒だから、スタートアップスクリプトで用意しちゃおうかな…。