เชื่อม Terraform กับ DigitalOcean Provider

DigitalOcean Provider เป็นหนึ่งในปลั๊กอินที่ได้รับความนิยมสำหรับทีมที่ใช้ Cloud ราคาประหยัดจัดการ Droplet, Spaces, Managed Database, Kubernetes และ Load Balancer การเชื่อมต่อ DigitalOcean กับ Terraform ทำได้ง่ายกว่า AWS เพราะใช้ API Token ชุดเดียวและไม่มี region/account ซ้อนกันซับซ้อน เหมาะสำหรับองค์กรขนาดกลางหรือโปรเจกต์ที่ต้องการ launch เร็ว

บทความนี้จะแนะนำการสร้าง API Token การตั้งค่า provider block การจัดการ SSH key การสร้าง Droplet ตัวอย่าง และแนวทางรักษาความปลอดภัยของ token

สร้าง API Token บน DigitalOcean

เข้าสู่ DigitalOcean Control Panel แล้วไปที่ API → Tokens คลิก Generate New Token ตั้งชื่อให้สื่อความหมายเช่น terraform-automation เลือก Scope แบบ Read and Write เพื่อให้สามารถสร้างและลบทรัพยากรได้ จดค่า token ที่แสดงครั้งเดียว (ระบบจะไม่แสดงซ้ำ) เก็บใน password manager หรือ Secret Manager

ติดตั้ง Provider ในโปรเจกต์

สร้างไฟล์ versions.tf เพื่อ pin เวอร์ชันของ provider พร้อม source path จาก Terraform Registry ให้ clear และเสริม provider.tf สำหรับ config จริง การแยกไฟล์ช่วยให้ดูแลง่ายเมื่อต้องเพิ่ม provider อื่นในอนาคต

# versions.tf
terraform {
  required_version = ">= 1.5"
  required_providers {
    digitalocean = {
      source  = "digitalocean/digitalocean"
      version = "~> 2.42"
    }
  }
}

# provider.tf
variable "do_token" {
  description = "DigitalOcean API Token"
  type        = string
  sensitive   = true
}

provider "digitalocean" {
  token = var.do_token
}

ใส่ sensitive = true ให้ variable ที่เก็บ token เพื่อไม่ให้แสดงผลใน plan/apply output ลดความเสี่ยงที่ค่าจะหลุดผ่าน log

ส่ง Token ผ่าน Environment Variable

วิธีที่ปลอดภัยและเป็นที่นิยมคือไม่เก็บ token ในไฟล์ .tfvars ที่ commit เข้า git แต่ส่งผ่าน environment variable ชื่อ DIGITALOCEAN_TOKEN หรือ TF_VAR_do_token แทน Terraform จะอ่านค่าอัตโนมัติขณะ plan/apply

export DIGITALOCEAN_TOKEN="dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# หรือ
export TF_VAR_do_token="dop_v1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

terraform init
terraform plan

จัดการ SSH Key บน DigitalOcean

ก่อนสร้าง Droplet แนะนำให้อัปโหลด SSH key ลง DigitalOcean เพื่อใช้ในการเข้าถึงแบบไม่ต้องใช้ password การอัปโหลดสามารถทำผ่านหน้า dashboard หรือใช้ resource ของ provider สร้างให้เสร็จภายใน pipeline เดียว

resource "digitalocean_ssh_key" "default" {
  name       = "terraform-deploy-key"
  public_key = file("~/.ssh/id_ed25519.pub")
}

สร้าง Droplet ตัวอย่าง

เมื่อ provider พร้อม สามารถสร้าง Droplet (VM) ได้ทันที โดยระบุ image, ขนาด, region และ SSH key ที่จะ inject เข้าไป

resource "digitalocean_droplet" "web" {
  name     = "web-server"
  image    = "ubuntu-22-04-x64"
  size     = "s-2vcpu-4gb"
  region   = "sgp1"
  ssh_keys = [digitalocean_ssh_key.default.id]

  tags = ["web", "production"]
}

output "droplet_ip" {
  value = digitalocean_droplet.web.ipv4_address
}

รัน terraform apply เพื่อสร้างเซิร์ฟเวอร์ ระยะเวลาประมาณ 30 วินาทีถึง 2 นาที เมื่อเสร็จจะได้ droplet_ip ที่พร้อม SSH เข้าไปตั้งค่าต่อ

ใช้ Data Source ค้นหาข้อมูลที่มีอยู่

หากมี image, SSH key หรือ project ที่สร้างผ่าน UI มาก่อน สามารถใช้ data source อ้างถึงได้โดยไม่ต้องสร้างซ้ำ ตัวอย่างการค้นหา image ล่าสุดของ Ubuntu 22.04

data "digitalocean_image" "ubuntu" {
  slug = "ubuntu-22-04-x64"
}

data "digitalocean_ssh_key" "existing" {
  name = "my-existing-key"
}

resource "digitalocean_droplet" "app" {
  image    = data.digitalocean_image.ubuntu.slug
  ssh_keys = [data.digitalocean_ssh_key.existing.id]
  # ...
}

แนวทางรักษาความปลอดภัย Token

  • อย่า commit token ลง git เด็ดขาด เพิ่ม *.tfvars และ .env ใน .gitignore
  • สร้าง token แยกตามสภาพแวดล้อม (dev, stage, prod) เพื่อจำกัดขอบเขต
  • กำหนดอายุ token (expiration) ให้ไม่เกิน 90 วัน หมุนเวียนสม่ำเสมอ
  • เก็บ token ใน HashiCorp Vault, AWS Secrets Manager หรือ GitHub Actions Secrets
  • เปิด 2FA บนบัญชี DigitalOcean เพื่อป้องกันการเข้าถึง Control Panel โดยตรง

Troubleshooting

ปัญหาที่พบบ่อยคือ error 401 Unauthorized หมายถึง token ไม่ถูกต้องหรือหมดอายุ ตรวจว่าพิมพ์ครบไม่ขาดตัวอักษรและ scope ของ token รวม Read+Write ส่วน error 422 หมายถึง region/size ที่ระบุไม่รองรับคู่กัน ให้ตรวจ region availability ก่อน

สรุป

DigitalOcean Provider ใช้งานง่าย เริ่มจากการสร้าง API Token บน Control Panel ตั้งค่า provider block พร้อม variable แบบ sensitive และส่ง token ผ่าน environment variable การอัปโหลด SSH key สร้าง Droplet และใช้ data source ค้นหา resource เดิมคือพื้นฐานที่ใช้ได้กับทุกโปรเจกต์ ความปลอดภัยของ token คือหัวใจของการจัดการ infrastructure ด้วย automation จึงควรตั้งระยะหมุนเวียนและเก็บใน secret manager เสมอ เมื่อคุ้นกับ provider นี้แล้วจะต่อยอดไปใช้ Spaces, Managed Database หรือ Kubernetes ผ่าน resource ชุดเดียวกันได้ทันที