APIで仮想サーバーを作成する


APIを使用して仮想サーバーを作成する方法をご案内します。
以下ではcurlコマンドを用いたAPIの操作手順となりますので、任意のサーバーにて実行ください。

なお、本リファレンスに掲載しておりますフレーバーIDやイメージID等の一覧につきましては、実際のデータと更新に差が出る場合がございますので、ご利用の際はAPIにて最新版の一覧をご取得ください。

 トークンの発行

[1] API認証を行い、トークンの取得ならびに発行されたトークンIDを確認します。

※ 対象のAPIリファレンスは こちら
認証のエンドポイント コントロールパネルの「サービス」メニュー内にある「API情報」をご確認ください。
APIユーザー名 「サーバー操作権限」が付与されているコントロールパネルのアカウントIDを指定ください。
パスワード 対象アカウントIDのパスワードを指定ください。
テナントID コントロールパネルの「サービス」メニュー内にある「API情報」をご確認ください。
curl -i -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"auth":{"passwordCredentials":{"username": "APIユーザー名", "password": "パスワード"},"tenantId":"テナントID"}}' \
認証のエンドポイント/tokens
コンソール画面上には以下のようにリクエストの結果が返ってきます。「access」の「id」の値がAPI操作を行う際に必要となるトークンIDです。以降の手順では、トークンIDと表示されているものは全てこのIDを指すものとします。トークンIDは発行後、24時間で失効となりますので作業が日をまたぐ場合は都度発行する必要があります。
{"access":{"token":{"issued_at":"2018-10-16T01:51:28.283674","expires":"2018-10-17T01:51:28Z",
"id":"9e54605ee98043b2a89d28f80bc1ce3f"

 ブートディスクの作成

[1] ボリュームタイプの一覧を取得し、ボリュームタイプ名を確認します。

※ 対象のAPIリファレンスは こちら
ボリュームのエンドポイント コントロールパネルの「サービス」メニュー内にある「API情報」をご確認ください。
curl -i -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
ボリュームのエンドポイント/types
上記リクエストが正常に処理されるとボリュームタイプの一覧情報が返ってきます。ボリュームタイプの一覧は以下の通りです。ボリュームタイプ名は以降の手順でAPIの操作に必要となりますので、任意のタイプ名についてメモをとってください。
ボリュームタイプ名 IOPS
gac1-iops-500      500
gac1-iops-1k   1,000
gac1-iops-2k   2,000
gac1-iops-3k   3,000
gac1-iops-4k   4,000
gac1-iops-5k   5,000
gac1-iops-10k 10,000
[2] OSイメージの一覧を取得し、イメージIDを確認します。

※ 対象のAPIリファレンスは こちら
イメージのエンドポイント コントロールパネルの「サービス」メニュー内にある「API情報」をご確認ください。
curl -i -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
イメージのエンドポイント/images
上記リクエストが正常に処理されると作成されたイメージの一覧情報が返ってきます。イメージの一覧は以下の通りです。イメージIDは以降の手順でAPIの操作に必要となりますので、任意のイメージIDについてメモをとってください。

・Linux

OS名 ボリュームサイズ イメージID
CentOS 6.9   50GB 54253120-cc88-4de5-a087-84a81099f9ca
100GB 02ee9d3f-41aa-4b9f-b7a3-d1e7f7fe77a0
200GB b8efcfd7-676e-4e69-bdd1-bc92d296e886
300GB a11f28fb-abee-41cf-94a7-dd778fd4a14e
400GB 6b5fb82e-e409-43ba-a274-c574914c7669
500GB 05aa303a-29af-4412-9ad7-8afe88549c8d
1TB f6b8d979-5fd1-43c5-bfa4-23050f737eaf
2TB 9b591704-7835-411c-86e2-4fc81d6ab1f2
CentOS 7.2 38255449-f5e7-443a-a98c-9b96557dd5fa
CentOS 7.3 886dc1cb-0a11-4fc5-9236-50da1965aa30
CentOS 7.4 c84c560d-a658-4ac7-8028-74473b58c403
Ubuntu 16.04 49a509dc-9a7a-44fd-bf9a-c9aa380a16aa
Debian 8 58febaa9-1c07-4e1b-ae09-5d6f293378d8
Debian 9 0c2a010a-6ecc-4eac-ab5b-2f4ca664102a

・Windows

OS名 ボリュームサイズ イメージID
Windows Server 2008 aa5c196d-174c-4363-8dfb-0ca62fd740dd
Windows Server 2012 53d92e0b-57a2-4fe5-80f6-afc633022741
Windows Server 2008

SQL Server 2008
00705fd8-b05a-4c08-9304-468acd56d2a2
Windows Server 2012

SQL Server 2012
6cd1278e-1256-4963-b317-cc67a64e0578
Windows Server 2012

SQL Server 2014
5c6bde40-57d9-433d-9a89-73cce67f191b

・Others

テンプレート名 ボリュームサイズ イメージID
Cacti/Nagios 4.3-1.1 20be32b1-4757-4d59-b364-f0bc8bc59399
[3] ブードディスクを作成します。

※ 対象のAPIリファレンスは こちら
パラメータ 指定する値 備考
name 任意のボリューム名 任意の名前を指定します。
size     50
  100
  200
  300
  400
  500
1000
2000
ボリュームの容量を指定します。
curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"volume": {"name": "ボリューム名","volume_type": "ボリュームタイプ名","size": "ボリューム容量","imageRef":"イメージID"}}' \
ボリュームのエンドポイント/volumes
上記リクエストが正常に処理されると作成されたボリュームの情報が返ってきます。ボリュームIDは以降の手順でAPIの操作に必要となりますので、メモをとってください。

 ネットワークの購入

本リファレンスでは、仮想サーバー用グローバルIPアドレス および プライベートネットワークをアタッチさせます。
サーバーの作成には、プライベートネットワークのアタッチが必須になります。
なお、アタッチさせるネットワークを購入済みの場合は、次の「セキュリティグループの作成」のリファレンスに進んでください。

[1] ネットワークが未購入の場合、任意のネットワークを購入します。

※ プライベートネットワークを追加する場合は こちら

※ アプライアンス型ロードバランサーを追加する場合は こちら

※ 仮想サーバー用グローバルIPアドレスを追加する場合は こちら

※ 専用グローバルIPアドレスを追加する場合は こちら

 セキュリティグループの作成

任意のセキュリティグループをアタッチさせたい場合は、セキュリティグループを作成します。
システム標準のセキュリティグループを使用する場合や任意のセキュリティグループを作成済みの場合は、
次の「ポートの作成ならびにセキュリティグループの設定」のリファレンスに進んでください。
なお、コントロールパネルからもセキュリティグループの作成は可能です。

※ コントロールパネルからセキュリティグループを作成する場合は こちら

[1] 仮想サーバー用グローバルIPアドレスのセキュリティグループを作成します。

※ 対象のAPIリファレンスは こちら
ネットワークのエンドポイント コントロールパネルの「サービス」メニュー内にある「API情報」をご確認ください。
curl -i -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group": {"name": "任意のセキュリティグループ名"}}' \
ネットワークのエンドポイント/security-groups
上記リクエストが正常に処理されると以下のような結果が返ってきます。「security_group」の「id」の値がAPI操作を行う際に必要となるセキュリティグループIDです。以降の手順でAPIの操作に必要となりますので、メモをとってください。
{"security_group": {"description": "","id": "セキュリティグループID"
[2] 本リファレンスでは、仮想サーバー用グローバルIPアドレスに全てのインバウンドを許可するルールをセキュリティグループに追加します。

※ 対象のAPIリファレンスは こちら
curl -i -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group_rule": {"direction": "ingress", "ethertype": "IPv4", "security_group_id": "セキュリティグループID", "port_range_min": "", "port_range_max": "", "protocol": "tcp"}}' \
ネットワークのエンドポイント/security-group-rules

 ポートの作成ならびにセキュリティグループの設定

仮想サーバーにアタッチさせる仮想サーバー用グローバルIPアドレス および プライベートネットワークのポートを作成します。
なお、本リファレンスでは、仮想サーバー用グローバルIPアドレスに本リファレンスの「セキュリティグループの作成」にて作成したセキュリティグループを、プライベートネットワークにはシステム標準のセキュリティグループを使用します。

[1] サブネットの一覧を取得し、仮想サーバー用グローバルIPアドレス および プライベートネットワークのサブネットID ならびに ネットワークIDを確認します。

※ 対象のAPIリファレンスは こちら
curl -i -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
ネットワークのエンドポイント/subnets
上記リクエストが正常に処理されるとサブネットの一覧情報が返ってきます。サブネットID ならびに ネットワークIDは以降の手順でAPIの操作に必要となりますので、サブネット一覧からグローバルIPアドレスやプライベートIPアドレスなどをもとに対象のサブネットID ならびに ネットワークIDをご確認の上、メモをとってください。
HTTP/1.1 200 OK
Date: Fri, 30 Mar 2018 15:09:31 GMT
Server: Apache
Content-Length: 2522
Content-Type: application/json

{
    "subnets":[
        {
            "name":"ネットワーク名",
            "enable_dhcp":false,
            "network_id":"ネットワークID",
            "tenant_id":"テナントID",
            "dns_nameservers":[],
            "gateway_ip":null,
            "ipv6_ra_mode":null,
            "allocation_pools":[
                {
                    "start":"IPアドレス範囲の先頭",
                    "end":"IPアドレス範囲の末尾"
                }
            ],
            "host_routes":[],
            "ip_version":4,
            "ipv6_address_mode":null,
            "cidr":"サブネットマスク",
            "id":"サブネットID"
        },
        {
            "name":"ネットワーク名",
            "enable_dhcp":false,
            "network_id":"ネットワークID",
            "tenant_id":"テナントID",
            "dns_nameservers":[],
            "gateway_ip":null,
            "ipv6_ra_mode":null,
            "allocation_pools":[
                {
                    "start":"IPアドレス範囲の先頭",
                    "end":"IPアドレス範囲の末尾"
                }
            ],
            "host_routes":[],
            "ip_version":4,
            "ipv6_address_mode":null,
            "cidr":"サブネットマスク",
            "id":"サブネットID"
        }
    ]
}
[2] 仮想サーバー用グローバルIPアドレス および プライベートネットワークのポートを作成します。

※ 対象のAPIリファレンスは こちら

・仮想サーバー用グローバルIPアドレスの場合

curl -i -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"port":{"network_id":"ネットワークID","fixed_ips":[{"ip_address":"グローバルIPアドレス","subnet_id":"仮想サーバー用グローバルIPアドレスのサブネットID"}]}}' \
ネットワークのエンドポイント/ports

・プライベートネットワークの場合

curl -i -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"port":{"network_id":"ネットワークID","fixed_ips":[{"ip_address":"プライベートIPアドレス","subnet_id":"プライベートネットワークのサブネットID"}]}}' \
ネットワークのエンドポイント/ports
上記リクエストが正常に処理されると作成されたポートの情報が返ってきます。ポートIDは以降の手順でAPIの操作に必要となりますので、メモをとってください。
HTTP/1.1 201 Created
Date: Fri, 30 Mar 2018 11:57:08 GMT
Server: Apache
Content-Length: 603
Content-Type: application/json

{
    "port": {
        "status": "DOWN", 
        "name": "ネットワーク名", 
        "allowed_address_pairs": [
            {
                "ip_address": "0.0.0.0/0", 
                "mac_address": "MACアドレス"
            }
        ], 
        "admin_state_up": true, 
        "network_id": "ネットワークID", 
        "tenant_id": "テナントID", 
        "binding:vnic_type": "normal", 
        "device_owner": "", 
        "mac_address": "MACアドレス", 
        "fixed_ips": [
            {
                "subnet_id": "サブネットID", 
                "ip_address": "IPアドレス"
            }
        ], 
        "id": "ポートID", 
        "security_groups": [
            "セキュリティグループID"
        ], 
        "device_id": ""
   }
}
[3] 作成した仮想サーバー用グローバルIPアドレスのポートに本リファレンスの「セキュリティグループの作成」にて作成したセキュリティグループを設定します。

※ 対象のAPIリファレンスは こちら
curl -X PUT \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"port": {"security_groups": ["任意のセキュリティグループID"]}}' \
ネットワークのエンドポイント/ports/ポートID

 仮想サーバーの作成

[1] サーバープランの一覧を取得し、任意のサーバープランのフレーバーIDを確認します。

※ 対象のAPIリファレンスは こちら
サーバー操作のエンドポイント コントロールパネルの「サービス」メニュー内にある「API情報」をご確認ください。
curl -i -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
サーバー操作のエンドポイント/flavors
上記リクエストが正常に処理されるとサーバープランの一覧情報が返ってきます。サーバープランの一覧は以下の通りです。サーバープランのフレーバーIDは以降の手順でAPIの操作に必要となりますので、任意のサーバープランのフレーバーIDについてメモをとってください。
プラン名 vCPU メモリ フレーバーID
N-0101   1 vCPU     1 GB 53c47264-b3e8-46a6-8fc6-a019e1cfdfb1
N-0102   1 vCPU     2 GB 8eb0b8f1-8805-45c1-8df4-782764edbdb1
N-0104   1 vCPU     4 GB 87c84b65-efc4-4f6a-8a1c-5d005ea48147
N-0108   1 vCPU     8 GB 7a48c7ea-5dc2-4d85-b692-a83dfd84c70e
N-0202   2 vCPU     2 GB f30f5e62-a437-40c1-8d4e-3c52cf452260
N-0204   2 vCPU     4 GB d443b815-2d35-48b9-b466-ce65931442bc
N-0208   2 vCPU     8 GB 9c05ad50-6806-440f-9283-01b4bfc0fafe
N-0216   2 vCPU   16 GB 6c74a657-6b7c-404d-a18d-b483cd80e34b
N-0404   4 vCPU     4 GB 0620c7dc-8e8d-4c1d-b80c-390ce1575285
N-0408   4 vCPU     8 GB d2379fb9-df53-4432-8158-ed6668021680
N-0416   4 vCPU   16 GB 06094e8c-3ae6-413f-a443-ecc37c423109
N-0430   4 vCPU   30 GB e7830e01-fac6-4d6a-bd9b-f8a5256d8700
N-0808   8 vCPU     8 GB 9be53ede-1a0a-4dd2-9451-6d4cbfcb0ac5
N-0816   8 vCPU   16 GB 7737d667-8363-4d49-a045-0aa27a64b327
N-0832   8 vCPU   32 GB bfef23f8-a503-4faf-b505-8a185eb4b540
N-0860   8 vCPU   60 GB 0d096c3f-cde1-4fc5-8a4d-9233637f88ea
N-1616 16 vCPU   16 GB 8a2eac33-d9e6-4b3d-b6d3-a56db3d9b26c
N-1632 16 vCPU   32 GB 8cdd6cba-3c01-4726-85b6-6fe273eabf70
N-1660 16 vCPU   60 GB 70017e22-056e-47a5-ae87-6b8e1b1217dc
N-3232 32 vCPU   32 GB f0b5aa85-b232-4113-b6cf-1b6943598324
N-3260 32 vCPU   60 GB 43c8317e-3aec-48bd-a962-671a5e209a3c
N-32120 32 vCPU 120 GB 028fd80d-92c2-4a5e-8037-e788047a20af
N-4096 32 vCPU   96 GB d8ec34da-5c42-4a39-babe-315b4a1934ed
N-40120 32 vCPU 120 GB 49a002b6-0d83-4871-a074-fa2a6ec2b5ab
[2] 仮想サーバーを作成します。

※ 対象のAPIリファレンスは こちら
curl -X POST \
-H "Accept: application/json" \
-H Content-Type:application/json \
-H "X-Auth-Token: トークンID" \
-d '{"server":{"flavorRef":"フレーバーID","networks":[{"port":"プライベートネットワークのポートID"},{"port":"仮想サーバー用グローバルIPアドレスのポートID"}],"block_device_mapping":[{"volume_id":"ボリュームID"}]}}' \
サーバー操作のエンドポイント/servers

本リファレンスはGMOアプリクラウドにてサーバーをご利用いただく場合の一例であり、お客様の運用やポリシーによってその限りではございません。
お客様のご利用用途に応じて必要な設定や操作をおこなってください。