สรุปย่อ
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)
💡 หากคุณกำลังทำให้โครงสร้างพื้นฐานเป็นอัตโนมัติ Apidog จะช่วยคุณทดสอบการเรียกใช้ API, บันทึกการกำหนดค่าโครงสร้างพื้นฐานเป็นเทมเพลตที่นำกลับมาใช้ใหม่ได้ และทำงานร่วมกับทีมของคุณในเวิร์กโฟลว์การจัดเตรียม
การยืนยันตัวตน
โทเค็นการเข้าถึงส่วนบุคคล (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 York -
sfo3- San Francisco -
ams3- Amsterdam -
sgp1- 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 จะถูกลบอัตโนมัติ ช่วยให้ทดสอบได้เหมือน Production โดยไม่ต้องตั้งค่าด้วยตนเอง
เว็บเซิร์ฟเวอร์ที่ปรับขนาดได้อัตโนมัติ: ระบบตรวจสอบโหลด CPU เกิน 70% จะสร้าง Droplet ใหม่และเพิ่มไปยัง Load Balancer เมื่อโหลดลด Droplet จะถูกลบ ช่วยประหยัดค่าใช้จ่ายและรักษาประสิทธิภาพ
คลัสเตอร์ฐานข้อมูล: Managed Database Service ใช้ API จัดการ Primary/Replica Volumes ข้ามภูมิภาค, ตั้งค่าสำรองข้อมูล, กำหนด 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 คือสำเนาอัตโนมัติรายสัปดาห์/รายวัน Snapshots คุณสร้างเองตามต้องการ
การสร้าง Droplet ใช้เวลานานเท่าไหร่?
โดยปกติ 30-60 วินาที บางภูมิภาคหรือขนาดอาจช้ากว่านั้น
ฉันสามารถใช้ Terraform กับ DigitalOcean ได้หรือไม่?
ได้ DigitalOcean มี Provider Terraform อย่างเป็นทางการ เหมาะสำหรับ Infrastructure as Code

Top comments (0)