DEV Community

Cover image for Panduan Developer: Cara Menggunakan DigitalOcean API untuk Infrastruktur Cloud
Walse
Walse

Posted on • Originally published at apidog.com

Panduan Developer: Cara Menggunakan DigitalOcean API untuk Infrastruktur Cloud

TL;DR

API DigitalOcean memungkinkan Anda mengelola droplet, volume, firewall, load balancer, klaster Kubernetes, dan lainnya. Autentikasi menggunakan token akses pribadi, panggil endpoint api.digitalocean.com/v2, serta tangani batas laju. Untuk pengujian otomatis, gunakan Apidog untuk validasi konfigurasi, uji provisioning infrastruktur, dan dokumentasikan alur kerja otomasi Anda.

Coba Apidog sekarang

Pengantar

DigitalOcean menyederhanakan komputasi awan. Berbeda dengan AWS dan GCP yang menawarkan ratusan layanan, DigitalOcean hanya fokus pada komputasi (droplet), penyimpanan (volume), jaringan (IP mengambang, firewall), Kubernetes terkelola, dan platform aplikasi. API-nya juga simple.

Contoh kasus penggunaan API DigitalOcean:

  • Provisioning lingkungan dev otomatis
  • Manajemen klaster Kubernetes
  • Infrastruktur sebagai kode (IAC) dengan Terraform atau Pulumi
  • CI/CD pipeline provisioning
  • Penyebaran multi-wilayah

💡 Jika Anda mengotomatiskan infrastruktur, Apidog membantu menguji integrasi API, menyimpan konfigurasi sebagai template reusable, dan kolaborasi provisioning tim.

Autentikasi

Token akses pribadi

  1. Buka DigitalOcean Dashboard → API → Generate New Token
  2. Beri nama token dan atur masa berlaku
  3. Salin dan simpan token Anda

Contoh penggunaan:

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

Format respons

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

Droplet (mesin virtual)

Daftar semua droplet

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

Buat 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

Ukuran populer:

  • s-1vcpu-1gb - 1 vCPU, 1GB RAM ($5/bln)
  • s-2vcpu-2gb - 2 vCPU, 2GB RAM ($10/bln)
  • s-2vcpu-4gb - 2 vCPU, 4GB RAM ($20/bln)
  • s-4vcpu-8gb - 4 vCPU, 8GB RAM ($40/bln)

Wilayah:

  • nyc1, nyc3 - New York
  • sfo3 - San Francisco
  • ams3 - Amsterdam
  • sgp1 - Singapura

Dapatkan detail droplet

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

Hapus droplet

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

Tindakan droplet

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

Ubah ukuran:

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

Snapshot:

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

Volume (penyimpanan blok)

Buat 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

Lampirkan volume ke 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

Daftar volume

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

Jaringan

Daftar IP mengambang

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

Tetapkan IP mengambang

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

Buat 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

Penyeimbang beban

Buat penyeimbang beban

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

Klaster Kubernetes

Buat klaster 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

Daftar kumpulan node

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

Skalakan kumpulan node

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

Hapus klaster

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

Pengujian dengan Apidog

Penyediaan infrastruktur memerlukan biaya. Uji setiap API sebelum provisioning resource produksi.

Variabel lingkungan Apidog

1. Penyiapan lingkungan

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. Validasi respons

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. Konsep uji coba

DigitalOcean tidak menyediakan sandbox, namun Anda dapat validasi input:

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

Uji API infrastruktur DigitalOcean dengan Apidog - gratis.

Kesalahan umum dan perbaikan

401 Tidak Sah

Penyebab: Token tidak valid/kedaluwarsa.

Perbaikan: Generate ulang token via dashboard. Pastikan format header Authorization benar.

422 Entitas Tidak Dapat Diproses

Penyebab: Parameter tidak valid (region, size, image, dsb).

Perbaikan: Pastikan value parameter valid sesuai dokumentasi API. Cek:

  • Region tidak support size yang diminta
  • Image ID tidak ada
  • Droplet limit tercapai

429 Terlalu Banyak Permintaan

Penyebab: Rate limit terlampaui (default 2000 request/jam).

Perbaikan: Terapkan exponential 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

Batas droplet tercapai

Penyebab: Akun Anda sudah terlalu banyak droplet

Perbaikan: Hapus droplet tidak terpakai, atau request peningkatan limit ke support.

Alternatif dan perbandingan

Fitur DigitalOcean AWS GCP
Ukuran droplet Tetap Kustom Kustom
Kubernetes DOKS Terkelola EKS GKE
Penyimpanan objek Spaces S3 Cloud Storage
Penyimpanan blok Volume EBS Persistent Disk
Penyeimbang beban Bawaan ELB Cloud Load Balancing
Tingkat gratis Kredit $200 Terbatas Kredit $300
Kesederhanaan API ★★★★★ ★★☆☆☆ ★★★☆☆

DigitalOcean unggul dalam kesederhanaan. API-nya mudah digunakan dan fokus pada kebutuhan inti, tanpa kompleksitas layanan multi-layer.

Kasus penggunaan dunia nyata

Lingkungan pengembangan:

Contoh: Startup membuat environment dev per branch. Setiap PR trigger API untuk membuat droplet baru. Setelah PR merge, droplet dihapus otomatis. Developer bisa testing di environment mirip produksi tanpa manual setup.

Web server auto scaling:

Aplikasi monitor load. Jika CPU >70%, gunakan API untuk menambah droplet di load balancer. Jika load turun, droplet dihapus. Efisiensi biaya tetap, performa optimal.

Klaster database:

Managed database service menyediakan volume utama dan replika di multi region. API mengatur replikasi, backup schedule, dan failover otomatis.

Kesimpulan

Yang bisa Anda implementasikan:

  • Autentikasi via token akses pribadi
  • Membuat dan mengelola droplet terprogram
  • Manajemen volume untuk storage persisten
  • Konfigurasi firewall & load balancer
  • Manajemen klaster Kubernetes otomatis
  • Pengujian provisioning infrastruktur dengan Apidog sebelum deploy

FAQ

Berapa biaya droplet?

Mulai $5/bulan untuk 1 vCPU/1GB. Cek halaman harga untuk info terbaru. Billing per jam tersedia.

Bisakah saya menggunakan kunci SSH dengan droplet dari API?

Ya. Masukkan sidik jari SSH key di array ssh_keys saat membuat droplet.

Bedanya volume dan Spaces?

Volume = block storage (mount di droplet).

Spaces = object storage (mirip S3).

Volume untuk database, Spaces untuk file.

Bagaimana retrieve kubeconfig Kubernetes?

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

Bisakah resize droplet?

Ya, gunakan action resize. Downgrade perlu shutdown. Upgrade bisa live.

Backup vs snapshot?

Backup = auto weekly/daily, dikelola DigitalOcean.

Snapshot = manual, on-demand.

Berapa lama provisioning droplet?

30–60 detik rata-rata. Bisa lebih lama tergantung region/size.

Terraform support?

Ya, DigitalOcean punya provider resmi. Sangat cocok untuk IAC.

Top comments (0)