さくらのクラウドでTerraform入門

さくらのクラウドでもTerraformが使えるらしく、
とりあえず、VMを1台構築してみたメモです。

操作を間違えてクラウド破産すると怖いので、
テスト用ゾーン Sandbox で試していきます。
https://manual.sakura.ad.jp/cloud/server/sandbox.html

Terraform コンテナの作成

docker run -it --rm --name tmp alpine /bin/sh

mkdir -p ~/terraform
cd ~/terraform/
wget -O terraform.zip \
  https://releases.hashicorp.com/terraform/1.1.0/terraform_1.1.0_linux_amd64.zip
unzip terraform.zip
export PATH=$PATH:~/terraform
terraform --version
rm -f terraform.zip

Terraform for さくらのクラウドのセットアップ

mkdir -p ~/.terraform.d/plugins
cd ~/.terraform.d/plugins/
wget -O terraform-provider-sakuracloud.zip \
  https://github.com/sacloud/terraform-provider-sakuracloud/releases/download/v2.15.0/terraform-provider-sakuracloud_2.15.0_linux_amd64.zip
unzip -l terraform-provider-sakuracloud.zip
unzip terraform-provider-sakuracloud.zip terraform-provider-sakuracloud_*
rm -f terraform-provider-sakuracloud.zip

さくらのクラウドAPIキーの作成

https://secure.sakura.ad.jp/cloud/#!/apikey/top/
にて、APIキーを作成し、
アクセストークン, アクセストークンシークレットをコピっておく

キーペア生成

apk add openssh
ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa

server.tf ファイルの作成

項目
provider sakuracloud
sakuracloud_server server01
sakuracloud_disk disk01
sakuracloud_archive archive01
sakuracloud_ssh_key sshkey01

さくらのクラウドで公開されてるOSイメージを指定したり、
ディスクは既存のディスクのIDを指定したりできる
https://manual.sakura.ad.jp/cloud/storage/archive.html

mkdir -p /usr/src/codes/sample1
cd /usr/src/codes/sample1/

cat << 'EOF' > server.tf
terraform {
  required_providers {
    sakuracloud = {
      source = "sacloud/sakuracloud"
      version = "2.15.0"
    }
  }
}
provider "sakuracloud" {
    token = "11111111-2222-3333-4444-555555555555"
    secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    zone   = "tk1v"
}

resource "sakuracloud_server" "server01" {
    name = "server01"
    core = "2"
    memory = "4"
    disks = ["${sakuracloud_disk.disk01.id}"]
    tags = ["@virtio-net-pci"]
    description = "by Terraform"

    disk_edit_parameter {
        ssh_key_ids = ["${sakuracloud_ssh_key.sshkey01.id}"]
        disable_pw_auth = true
    }
}

resource "sakuracloud_disk" "disk01" {
    name = "disk01"
    plan = "hdd"
    size = "40"
    source_archive_id = "${data.sakuracloud_archive.archive01.id}"
    description = "by Terraform"
}

data "sakuracloud_archive" "archive01" {
  os_type = "centos8stream"
}

resource "sakuracloud_ssh_key" "sshkey01" {
    name = "sshkey01"
    public_key = "${file("~/.ssh/id_rsa.pub")}"
    description = "by Terraform"
}
EOF

リソースの作成

terraform init
terraform validate
terraform plan
terraform apply

参考

コメント

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