Manage Digital Ocean with Terraform
สำหรับคนที่ชอบเปิดเอา Compute Node มาเล่นแต่ยังไม่ใช้ Kubernetes ถ้าใช้ Terraform เราก็จะสามารถ สร้างและเชื่อมกับ DNS ได้เลยเร็วๆ บน Digital Ocean ปกติเห็นตัวอย่างในเวปจะมีแต่ใช้ AWS กัน
เข้าไปดูเต็มๆได้เลยที่นี่
varokas/tf-scripts
Terraform Scripts. Contribute to varokas/tf-scripts development by creating an account on GitHub.github.com
ด้านบนสุดของไฟล์จะเป็นการประกาศ provider ที่ใช้ พร้อมกับ Credential ที่จะใช้ ส่วนมาจะประกาศเป็น variables ไว้จะได้ไม่เผลอ commit เข้ามา แล้วใส่ของจริงไว้ใน terraform.tfvars ซึ่งจะเป็น .gitignore ไว้
provider "digitalocean" {
token = "${var.do_token}"
}
provider "cloudflare" {
email = "${var.cloudflare_email}"
token = "${var.cloudflare_token}"
}
จากนั้นก็อัพโหลด public key ที่จะใช้เข้าไป `public_key_path` default ไว้ที่ ~/.ssh/terraform.pub เปลี่ยนได้ตามใจชอบ
resource "digitalocean_ssh_key" "terraform" {
name = "terraform"
public_key = "${file(var.public_key_path)}"
}
จากนั้นก็สร้าง droplet ได้เลย ตรงนี้จะมีจุดที่ทำได้ไม่ดีอย่างนึง ต้องบอก Digital Ocean ว่า MD5 Fingerprint ของ public key ที่จะใช้คืออะไร (แทนที่จะใช้ชื่อที่เพิ่ง upload ไป !?!) ก็เลยต้องประกาศตัวแปรไว้ แล้วก็อปค่าไปแปะเอาเอง
$ ssh-keygen -E md5 -lf ~/.ssh/terraform.pub | awk '{print $2}'
MD5:89:1b:3e:b1:cd:37:53:9c:78:19:48:6b:e6:df:81:fe
เวลาก็อปมาไม่ต้องเอา MD5: มาด้วย ได้เป็นแบบนี้
terraform_ssh_fingerprint="89:1b:3e:b1:cd:37:53:9c:78:19:48:6b:e6:df:81:fe"
จากนั้นก็เอามาใช้ได้ใน droplet resource
resource "digitalocean_droplet" "winter" {
image = "ubuntu-18-04-x64"
name = "winter"
region = "sfo2"
size = "s-1vcpu-1gb"
backups = "true"
ssh_keys = ["${var.terraform_ssh_fingerprint}"]
}
สุดท้ายเอา ip address ที่ได้ มา register DNS ผ่าน Cloudflare แบบนี้
# Create DNS record on CloudFlare
resource "cloudflare_record" "winter" {
domain = "varokas.com"
name = "blog"
value = "${digitalocean_droplet.winter.ipv4_address}"
type = "A"
ttl = 3600
}
จากนั้นก็สั่ง terraform apply แล้วก็ใช้ได้เลย
$ ssh -i ~/.ssh/terraform root@winter.varokas.com