สรุปย่อ
API ของ DigitalOcean ใช้จัดการ Droplets, Volumes, Firewalls, Load Balancers, Kubernetes Clusters และอื่นๆ อีกมากมาย คุณสามารถตรวจสอบสิทธิ์ด้วย Personal Access Tokens, เรียกใช้ `api.digitalocean.com/v2` และจัดการกับการจำกัดอัตราการเรียกใช้ (Rate Limits) สำหรับการทดสอบ ให้ใช้ Apidog เพื่อตรวจสอบความถูกต้องของการกำหนดค่า, ทดสอบการจัดเตรียมโครงสร้างพื้นฐาน และจัดทำเอกสารสำหรับเวิร์กโฟลว์การทำงานอัตโนมัติของคุณ
บทนำ
DigitalOcean ทำให้การประมวลผลบนคลาวด์เป็นเรื่องง่าย ในขณะที่ AWS และ GCP นำเสนอบริการหลายร้อยรายการ DigitalOcean มุ่งเน้นไปที่สิ่งจำเป็น: การประมวลผล (droplets), ที่เก็บข้อมูล (volumes), ระบบเครือข่าย (floating IPs, firewalls), Managed Kubernetes และ App Platform API ก็ตรงไปตรงมาเช่นกัน
นักพัฒนาใช้ API ของ DigitalOcean เพื่อ:
- สร้างสภาพแวดล้อมการพัฒนาโดยอัตโนมัติ
- จัดการคลัสเตอร์ Kubernetes
- โครงสร้างพื้นฐานในรูปแบบโค้ด (Infrastructure as code) ด้วย Terraform หรือ Pulumi
- การจัดเตรียม CI/CD Pipeline
- การปรับใช้หลายภูมิภาค (Multi-region deployments)
การยืนยันตัวตน
โทเค็นการเข้าถึงส่วนบุคคล (Personal access tokens)
- ไปที่ DigitalOcean Dashboard → API → Generate New Token
- ตั้งชื่อโทเค็นและกำหนดวันหมดอายุ
- คัดลอกและจัดเก็บอย่างปลอดภัย
การใช้โทเค็น:
curl -X GET "https://api.digitalocean.com/v2/account" \
-H "Authorization: Bearer YOUR_TOKEN"
รูปแบบการตอบกลับ
{
"account": {
"droplet_limit": 25,
"email": "you@example.com",
"name": "Your Name",
"uuid": "abc123xyz",
"email_verified": true,
"status": "active"
}
}
Droplets (เครื่องเสมือน)
แสดงรายการ Droplets ทั้งหมด
curl -X GET "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer YOUR_TOKEN"
สร้าง Droplet
curl -X POST "https://api.digitalocean.com/v2/droplets" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-droplet",
"region": "nyc1",
"size": "s-2vcpu-4gb",
"image": "ubuntu-20-04-x64",
"ssh_keys": ["ssh-rsa AAAA..."],
"backups": false,
"ipv6": true,
"tags": ["web", "production"]
}'
ขนาดที่นิยม:
s-1vcpu-1gb- 1 vCPU, 1GB RAM ($5/เดือน)s-2vcpu-2gb- 2 vCPU, 2GB RAM ($10/เดือน)s-2vcpu-4gb- 2 vCPU, 4GB RAM ($20/เดือน)s-4vcpu-8gb- 4 vCPU, 8GB RAM ($40/เดือน)
ภูมิภาค:
nyc1,nyc3- New Yorksfo3- San Franciscoams3- Amsterdamsgp1- Singapore
ดูรายละเอียด Droplet
curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
ลบ Droplet
curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
การดำเนินการกับ Droplet
รีบูต:
curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "reboot"
}'
ปรับขนาด:
curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "resize",
"size": "s-4vcpu-8gb"
}'
สแนปช็อต:
curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "snapshot",
"name": "my-snapshot"
}'
Volumes (Block Storage)
สร้าง Volume
curl -X POST "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"size_gigabytes": 100,
"name": "my-volume",
"region": "nyc1",
"description": "Data volume for web servers"
}'
แนบ Volume เข้ากับ Droplet
curl -X POST "https://api.digitalocean.com/v2/volumes/VOLUME_ID/actions" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "attach",
"droplet_id": DROPLET_ID
}'
แสดงรายการ Volumes
curl -X GET "https://api.digitalocean.com/v2/volumes" \
-H "Authorization: Bearer YOUR_TOKEN"
ระบบเครือข่าย
แสดงรายการ Floating IP
curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer YOUR_TOKEN"
กำหนด Floating IP
curl -X POST "https://api.digitalocean.com/v2/floating_ips" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"droplet_id": DROPLET_ID,
"region": "nyc1"
}'
สร้าง Firewall
curl -X POST "https://api.digitalocean.com/v2/firewalls" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "web-firewall",
"inbound_rules": [
{
"protocol": "tcp",
"ports": "80",
"sources": {
"addresses": ["0.0.0.0/0"]
}
},
{
"protocol": "tcp",
"ports": "443",
"sources": {
"addresses": ["0.0.0.0/0"]
}
},
{
"protocol": "tcp",
"ports": "22",
"sources": {
"addresses": ["your-ip/32"]
}
}
],
"outbound_rules": [
{
"protocol": "tcp",
"ports": "80",
"destinations": {
"addresses": ["0.0.0.0/0"]
}
}
],
"droplet_ids": [DROPLET_ID]
}'
Load Balancers
สร้าง Load Balancer
curl -X POST "https://api.digitalocean.com/v2/load_balancers" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-lb",
"region": "nyc1",
"algorithm": "round_robin",
"health_check": {
"protocol": "http",
"port": 80,
"path": "/",
"check_interval_seconds": 10,
"response_timeout_seconds": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3
},
"forwarding_rules": [
{
"entry_protocol": "http",
"entry_port": 80,
"target_protocol": "http",
"target_port": 80
},
{
"entry_protocol": "https",
"entry_port": 443,
"target_protocol": "https",
"target_port": 443,
"tls_passthrough": true
}
],
"droplet_ids": [DROPLET_ID_1, DROPLET_ID_2]
}'
คลัสเตอร์ Kubernetes
สร้างคลัสเตอร์ Kubernetes
curl -X POST "https://api.digitalocean.com/v2/kubernetes/clusters" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-cluster",
"region": "nyc1",
"version": "1.28",
"node_pools": [
{
"name": "worker-pool",
"size": "s-2vcpu-4gb",
"count": 3,
"auto_scale": true,
"min_nodes": 2,
"max_nodes": 6
}
]
}'
แสดงรายการ Node Pool
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
-H "Authorization: Bearer YOUR_TOKEN"
ปรับขนาด Node Pool
curl -X PUT "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools/POOL_ID" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"count": 5
}'
ลบคลัสเตอร์
curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
การทดสอบด้วย Apidog
การจัดเตรียมโครงสร้างพื้นฐานมีค่าใช้จ่ายสูง ควรทดสอบอย่างละเอียดก่อนสร้างทรัพยากร

1. การตั้งค่าสภาพแวดล้อม
DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
2. ตรวจสอบการตอบกลับ
pm.test('Droplet created successfully', () => {
const response = pm.response.json()
pm.expect(response.droplet).to.have.property('id')
pm.expect(response.droplet.status).to.eql('new')
})
pm.test('Token is valid', () => {
const response = pm.response.json()
pm.expect(response.account).to.exist
pm.expect(response.account.status).to.eql('active')
})
3. แนวคิด Dry Run
DigitalOcean ไม่มี Dry Run ที่แท้จริง แต่คุณสามารถตรวจสอบความถูกต้องของอินพุตได้:
const validRegions = ['nyc1', 'sfo3', 'ams3', 'sgp1']
const validSizes = ['s-1vcpu-1gb', 's-2vcpu-2gb', 's-2vcpu-4gb']
pm.test('Region is valid', () => {
const requestBody = JSON.parse(pm.request.body.raw)
pm.expect(validRegions).to.include(requestBody.region)
})
pm.test('Size is valid', () => {
const requestBody = JSON.parse(pm.request.body.raw)
pm.expect(validSizes).to.include(requestBody.size)
})
ทดสอบ API โครงสร้างพื้นฐานของ DigitalOcean ด้วย Apidog - ฟรี
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
401 ไม่ได้รับอนุญาต
สาเหตุ: โทเค็นไม่ถูกต้องหรือหมดอายุ
วิธีแก้ไข: สร้างโทเค็นใหม่จาก Dashboard ตรวจสอบรูปแบบส่วนหัว Authorization
422 ไม่สามารถประมวลผลเอนทิตีได้
สาเหตุ: พารามิเตอร์ไม่ถูกต้อง (ภูมิภาค, ขนาด, รูปภาพ, ฯลฯ ผิด)
วิธีแก้ไข: ตรวจสอบเอกสาร API ของ DigitalOcean สำหรับค่าที่ถูกต้อง ปัญหาที่พบบ่อย:
- ภูมิภาคไม่รองรับขนาดที่ร้องขอ
- ID รูปภาพไม่มีอยู่
- เกินขีดจำกัด Droplet
429 มีคำขอมากเกินไป
สาเหตุ: เกินขีดจำกัดอัตราการเรียกใช้ (ค่าเริ่มต้น 2000 คำขอ/ชั่วโมง)
วิธีแก้ไข: ใช้ Backoff:
async function doRequest(url, options, retries = 3) {
for (let i = 0; i < retries; i++) {
const response = await fetch(url, options)
if (response.status === 429) {
await sleep(Math.pow(2, i) * 1000)
continue
}
return response
}
throw new Error('Rate limited')
}
เกินขีดจำกัด Droplet
สาเหตุ: บัญชีมี Droplet มากเกินไป
วิธีแก้ไข: ลบ Droplet ที่ไม่ได้ใช้งาน หรือขอเพิ่มขีดจำกัดจากฝ่ายสนับสนุน
ทางเลือกและการเปรียบเทียบ
| คุณสมบัติ | DigitalOcean | AWS | GCP |
|---|---|---|---|
| ขนาด Droplet | คงที่ | กำหนดเอง | กำหนดเอง |
| Kubernetes | Managed DOKS | EKS | GKE |
| Object storage | Spaces | S3 | Cloud Storage |
| Block storage | Volumes | EBS | Persistent Disk |
| Load balancers | ในตัว | ELB | Cloud Load Balancing |
| Free tier | เครดิต $200 | จำกัด | เครดิต $300 |
| ความเรียบง่ายของ API | ★★★★★ | ★★☆☆☆ | ★★★☆☆ |
DigitalOcean ชนะในเรื่องความเรียบง่าย API นั้นตรงไปตรงมา และการทำงานส่วนใหญ่สามารถทำได้โดยไม่ต้องจัดการกับบริการย่อย ๆ หลายสิบรายการ
กรณีการใช้งานจริง
สภาพแวดล้อมการพัฒนา สตาร์ทอัพสร้างสภาพแวดล้อมการพัฒนาที่แยกออกจากกันสำหรับแต่ละ Branch ทุก Pull Request จะเรียกใช้ API เพื่อสร้าง Droplet ด้วยโค้ดล่าสุด หลังจากรวมโค้ดแล้ว Droplet จะถูกทำลาย นักพัฒนาสามารถทดสอบในสภาพแวดล้อมที่เหมือนการผลิตโดยไม่ต้องตั้งค่าด้วยตนเอง
เว็บเซิร์ฟเวอร์ที่ปรับขนาดได้อัตโนมัติ แอปพลิเคชันเว็บตรวจสอบโหลด เมื่อ CPU เกิน 70% API จะสร้าง Droplet ใหม่และเพิ่มไปยัง Load Balancer เมื่อโหลดลดลง Droplet จะถูกทำลาย ทำให้ค่าใช้จ่ายต่ำในขณะที่ประสิทธิภาพสูง
คลัสเตอร์ฐานข้อมูล บริการฐานข้อมูลแบบ Managed จัดเตรียม Primary และ Replica Volumes ข้ามภูมิภาค API จัดการการกำหนดค่าการจำลองข้อมูล, การจัดตารางเวลาการสำรองข้อมูล และการตั้งค่า Failover โดยอัตโนมัติ
บทสรุป
สิ่งที่คุณได้เรียนรู้:
- ยืนยันตัวตนด้วย Personal Access Tokens
- สร้างและจัดการ Droplets โดยใช้โปรแกรม
- ทำงานกับ Volumes สำหรับการจัดเก็บข้อมูลแบบถาวร
- กำหนดค่า Firewalls และ Load Balancers
- จัดการคลัสเตอร์ Kubernetes
- ทดสอบโครงสร้างพื้นฐานด้วย Apidog ก่อนการจัดเตรียม
คำถามที่พบบ่อย
Droplet มีราคาเท่าไหร่?ราคาเริ่มต้นที่ $5/เดือน สำหรับ 1 vCPU/1GB โปรดตรวจสอบหน้าราคาสำหรับอัตราปัจจุบัน มีการเรียกเก็บเงินรายชั่วโมง
ฉันสามารถใช้ SSH keys กับ Droplet ที่สร้างผ่าน API ได้หรือไม่?ได้ คุณสามารถรวมลายนิ้วมือ SSH key ในอาร์เรย์ `ssh_keys` เมื่อสร้าง Droplets
Volumes และ Spaces แตกต่างกันอย่างไร?Volumes คือ Block Storage ที่แนบมากับ Droplets ส่วน Spaces คือ Object Storage (เหมือน S3) ใช้ Volumes สำหรับฐานข้อมูล และ Spaces สำหรับไฟล์
ฉันจะรับ Kubernetes config ได้อย่างไร?
curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
-H "Authorization: Bearer YOUR_TOKEN"
ฉันสามารถปรับขนาด Droplet ได้หรือไม่?ได้ ใช้การดำเนินการ Resize การลดขนาดต้องปิดเครื่องก่อน ส่วนการอัปเกรดสามารถทำได้ในขณะที่เครื่องกำลังทำงาน
Backups และ Snapshots แตกต่างกันอย่างไร?Backups คือสำเนาอัตโนมัติรายสัปดาห์/รายวันที่จัดการโดย DigitalOcean ส่วน Snapshots คือรูปภาพที่คุณสร้างด้วยตนเองตามต้องการ
การสร้าง Droplet ใช้เวลานานเท่าไหร่?โดยปกติ 30-60 วินาที บางภูมิภาคและขนาดอาจใช้เวลานานกว่า
ฉันสามารถใช้ Terraform กับ DigitalOcean ได้หรือไม่?ได้ DigitalOcean มีผู้ให้บริการ Terraform อย่างเป็นทางการ ซึ่งยอดเยี่ยมสำหรับ Infrastructure as Code
