DEV Community

Cover image for วิธีใช้ DigitalOcean API: คู่มือนักพัฒนาสำหรับโครงสร้างพื้นฐานคลาวด์
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีใช้ DigitalOcean API: คู่มือนักพัฒนาสำหรับโครงสร้างพื้นฐานคลาวด์

สรุปย่อ

API ของ DigitalOcean ใช้จัดการ Droplets, Volumes, Firewalls, Load Balancers, Kubernetes Clusters และอื่นๆ อีกมากมาย คุณสามารถตรวจสอบสิทธิ์ด้วย Personal Access Tokens, เรียกใช้ api.digitalocean.com/v2 และจัดการกับการจำกัดอัตราการเรียกใช้ (Rate Limits) สำหรับการทดสอบ ให้ใช้ Apidog เพื่อตรวจสอบความถูกต้องของการกำหนดค่า, ทดสอบการจัดเตรียมโครงสร้างพื้นฐาน และจัดทำเอกสารสำหรับเวิร์กโฟลว์การทำงานอัตโนมัติของคุณ

ทดลองใช้ 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)

  1. ไปที่ DigitalOcean Dashboard → API → Generate New Token
  2. ตั้งชื่อโทเค็นและกำหนดวันหมดอายุ
  3. คัดลอกและจัดเก็บอย่างปลอดภัย

การใช้โทเค็น:

curl -X GET "https://api.digitalocean.com/v2/account" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

รูปแบบการตอบกลับ

{
  "account": {
    "droplet_limit": 25,
    "email": "you@example.com",
    "name": "Your Name",
    "uuid": "abc123xyz",
    "email_verified": true,
    "status": "active"
  }
}
Enter fullscreen mode Exit fullscreen mode

Droplets (เครื่องเสมือน)

แสดงรายการ Droplets ทั้งหมด

curl -X GET "https://api.digitalocean.com/v2/droplets" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

สร้าง 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"]
  }'
Enter fullscreen mode Exit fullscreen mode

ขนาดที่นิยม:

  • 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"
Enter fullscreen mode Exit fullscreen mode

ลบ Droplet

curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

การดำเนินการกับ 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"
  }'
Enter fullscreen mode Exit fullscreen mode

ปรับขนาด:

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"
  }'
Enter fullscreen mode Exit fullscreen mode

สแนปช็อต:

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"
  }'
Enter fullscreen mode Exit fullscreen mode

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"
  }'
Enter fullscreen mode Exit fullscreen mode

แนบ 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
  }'
Enter fullscreen mode Exit fullscreen mode

แสดงรายการ Volumes

curl -X GET "https://api.digitalocean.com/v2/volumes" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

ระบบเครือข่าย

แสดงรายการ Floating IP

curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

กำหนด 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"
  }'
Enter fullscreen mode Exit fullscreen mode

สร้าง 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]
  }'
Enter fullscreen mode Exit fullscreen mode

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]
  }'
Enter fullscreen mode Exit fullscreen mode

คลัสเตอร์ 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
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

แสดงรายการ Node Pool

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

ปรับขนาด 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
  }'
Enter fullscreen mode Exit fullscreen mode

ลบคลัสเตอร์

curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"
Enter fullscreen mode Exit fullscreen mode

การทดสอบด้วย Apidog

การจัดเตรียมโครงสร้างพื้นฐานมีค่าใช้จ่ายสูง ควรทดสอบอย่างละเอียดก่อนสร้างทรัพยากร

ภาพแสดงหน้าจอของ Apidog สำหรับการทดสอบ API ของ DigitalOcean

1. การตั้งค่าสภาพแวดล้อม

DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb
Enter fullscreen mode Exit fullscreen mode

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')
})
Enter fullscreen mode Exit fullscreen mode

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)
})
Enter fullscreen mode Exit fullscreen mode

ทดสอบ 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')
}
Enter fullscreen mode Exit fullscreen mode

เกินขีดจำกัด 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"
Enter fullscreen mode Exit fullscreen mode

ฉันสามารถปรับขนาด Droplet ได้หรือไม่?

ได้ ใช้การดำเนินการ Resize การลดขนาดต้องปิดเครื่องก่อน ส่วนการอัปเกรดสามารถทำได้ในขณะเครื่องทำงาน

Backups และ Snapshots แตกต่างกันอย่างไร?

Backups คือสำเนาอัตโนมัติรายสัปดาห์/รายวัน Snapshots คุณสร้างเองตามต้องการ

การสร้าง Droplet ใช้เวลานานเท่าไหร่?

โดยปกติ 30-60 วินาที บางภูมิภาคหรือขนาดอาจช้ากว่านั้น

ฉันสามารถใช้ Terraform กับ DigitalOcean ได้หรือไม่?

ได้ DigitalOcean มี Provider Terraform อย่างเป็นทางการ เหมาะสำหรับ Infrastructure as Code

Top comments (0)