DigitalOcean API活用ガイド:クラウドインフラ開発者向け

Ashley Innocent

Ashley Innocent

24 3月 2026

DigitalOcean API活用ガイド:クラウドインフラ開発者向け

Apidog エンタープライズ

オンプレミスデプロイ

SSO & RBAC

SOC 2 準拠

Apidog Enterpriseを見る

要約

DigitalOcean APIは、Droplet、ボリューム、ファイアウォール、ロードバランサー、Kubernetesクラスターなどを管理します。パーソナルアクセストークンで認証し、api.digitalocean.com/v2を呼び出し、レート制限を処理します。テストには、Apidogを使用して設定を検証し、インフラストラクチャのプロビジョニングをテストし、自動化ワークフローを文書化します。

はじめに

DigitalOceanはクラウドコンピューティングを簡素化します。AWSやGCPが数百ものサービスを提供するのに対し、DigitalOceanはコンピューティング(Droplet)、ストレージ(ボリューム)、ネットワーキング(フローティングIP、ファイアウォール)、マネージドKubernetes、アプリプラットフォームといったEssentialな機能に焦点を当てています。APIもこのシンプルさにマッチしています。

開発者はDigitalOceanのAPIを以下の目的で使用します。

💡
インフラストラクチャを自動化している場合、ApidogはAPI呼び出しのテスト、インフラストラクチャ構成の再利用可能なテンプレートとしての保存、プロビジョニングワークフローにおけるチームとの共同作業を支援します。
button

認証

パーソナルアクセストークン

  1. DigitalOceanダッシュボード → API → 新しいトークンを生成に進む
  2. トークンに名前を付け、有効期限を設定する
  3. 安全にコピーして保存する

トークンの使用方法:

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"
  }
}

Droplet(仮想マシン)

すべてのDropletを一覧表示

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"]
  }'

一般的なサイズ:

リージョン:

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"
  }'

ボリューム(ブロックストレージ)

ボリュームを作成

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"
  }'

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
  }'

ボリュームを一覧表示

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

ネットワーキング

フローティングIPを一覧表示

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

フローティング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"
  }'

ファイアウォールを作成

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]
  }'

ロードバランサー

ロードバランサーを作成

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
      }
    ]
  }'

ノードプールを一覧表示

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

ノードプールをスケール

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を使ったテスト

インフラストラクチャのプロビジョニングは高価です。リソースを作成する前に徹底的にテストしてください。

DigitalOcean APIs manage droplets, volumes, firewalls, load balancers, Kubernetes clusters, and more.

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. ドライランの概念

DigitalOceanには真のドライランはありませんが、入力の検証は可能です。

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)
})

ApidogでDigitalOceanインフラストラクチャAPIを無料でテストしましょう。

一般的なエラーと修正

401 Unauthorized(認証されていない)

原因: 無効なトークンまたは有効期限切れのトークン。

修正: ダッシュボードからトークンを再生成してください。Authorizationヘッダーの形式を確認してください。

422 Unprocessable Entity(処理できないエンティティ)

原因: 無効なパラメータ(リージョン、サイズ、イメージなどが誤っている)。

修正: DigitalOceanのAPIドキュメントで有効な値を確認してください。一般的な問題:

429 Too Many Requests(リクエストが多すぎる)

原因: レート制限を超過した(デフォルトは2000リクエスト/時)。

修正: バックオフを実装してください:

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 マネージド DOKS EKS GKE
オブジェクトストレージ Spaces S3 Cloud Storage
ブロックストレージ Volumes EBS Persistent Disk
ロードバランサー 組み込み ELB Cloud Load Balancing
無料枠 $200クレジット 制限あり $300クレジット
APIのシンプルさ ★★★★★ ★★☆☆☆ ★★★☆☆

DigitalOceanはシンプルさで勝ります。APIは分かりやすく、ほとんどの操作は多数のネストされたサービスを扱うことなく機能します。

現実世界のユースケース

開発環境。 スタートアップがブランチごとに隔離された開発環境を作成します。プルリクエストごとにAPI呼び出しがトリガーされ、最新のコードでDropletが作成されます。マージ後、Dropletは破棄されます。開発者は手動設定なしで本番環境に近い環境でテストできます。

オートスケーリングするウェブサーバー。 ウェブアプリケーションが負荷を監視します。CPUが70%を超えると、APIは新しいDropletを作成し、ロードバランサーに追加します。負荷が下がるとDropletは破棄されます。これにより、パフォーマンスを高く保ちながらコストを低く抑えます。

データベースクラスター。 マネージドデータベースサービスは、リージョンをまたいでプライマリとレプリカのボリュームをプロビジョニングします。APIはレプリケーション設定、バックアップスケジュール、フェイルオーバー設定を自動的に処理します。

結論

学んだことは次のとおりです。

button

よくある質問

Dropletの料金はいくらですか?料金は1 vCPU/1GBで月額5ドルから始まります。現在の料金については料金ページをご確認ください。時間単位の課金も利用可能です。

APIで作成したDropletでSSHキーは使えますか?はい。Droplet作成時にssh_keys配列にSSHキーのフィンガープリントを含めてください。

ボリュームとSpacesの違いは何ですか?ボリュームはDropletにアタッチされるブロックストレージです。Spacesはオブジェクトストレージ(S3のようなもの)です。データベースにはボリューム、ファイルにはSpacesを使用します。

Kubernetes設定を取得するにはどうすればよいですか?

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

Dropletのサイズを変更できますか?はい、サイズ変更アクションを使用します。ダウングレードには電源オフが必要です。アップグレードは稼働中に実行できます。

バックアップとスナップショットの違いは何ですか?バックアップはDigitalOceanが管理する自動的な週次/日次コピーです。スナップショットは手動で作成するオンデマンドイメージです。

Dropletの作成にはどれくらいの時間がかかりますか?通常30〜60秒です。一部のリージョンやサイズでは時間がかかる場合があります。

TerraformをDigitalOceanで使えますか?はい。DigitalOceanは公式のTerraformプロバイダーを提供しています。Infrastructure as Codeに最適です。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる