さくらのクラウドの検証環境を都度作るのが面倒なので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
無事リソースが作成されました。