afnf.net

IDCFクラウドAPIを利用してみた

クラウド IDCF 2016/06/05 16:51

前回のエントリでIDCFクラウドへの移行を紹介しましたが、WebUIの管理コンソールのレスポンスがそんなに良くありません。ちょいちょい待たされます。たくさんのファイアウォール設定やポートフォワード設定を投入しなければいけない場合は、面倒です。

そこでIDCFクラウドAPIですよ

IDCFクラウドは仮想化基盤がCloudStackで、 そのCloudStack APIが公開されています。

直接APIを呼ぶクライアントを書いても良いのですが、IDCF自身がコマンドラインツールを公開しているので、今回はこれを使ってみました。

なお、公式のドキュメントは以下です。

準備

CentOS 7.1でのインストール例です。

# yum -y install libxml2 libxml2-devel libxslt libxslt-devel gcc \
   python python-devel git
# curl -kL https://bootstrap.pypa.io/get-pip.py python
# pip install git+https://github.com/idcf/cloudstack-api

ここまではrootで実行します。

アカウント情報設定ファイルを作成します。各keyやエンドポイントURLは、アカウント設定→APIで確認できます。

$ cat > ~/.idcfrc << EOF
[account]
host=https://compute.jp-east.idcfcloud.com/client/api
api_key=xxxxxxxxxxxxxxxxxxxx(86桁)
secret_key=xxxxxxxxxxxxxxxxxxxx(86桁)
EOF

$ chmod 600 ~/.idcfrc

各種UUIDの取得

仮想マシンを作成する場合には、以下のUUIDが必要になります。

  • ゾーン
  • 仮想マシンタイプ(ServiceOfferings)
  • 仮想マシンイメージテンプレート(Template)

以下のように取得します。

$ cloudstack-api listZones -t id,name
+--------------------------------------+--------+
|                  id                  |  name  |
+--------------------------------------+--------+
| 9703cdbb-aee7-41ba-ba80-4807eaa68b80 | henry  |
| a117e75f-d02e-4074-806d-889c61261394 | tesla  |
| a53ff3d3-042b-4cbd-ad16-494bb8d33e06 | radian |
| baf86a6e-4e3b-428e-8fd0-7fda43e468d4 | joule  |
| f0954b9b-2626-4549-82ad-ca421073b3bc | pascal |
+--------------------------------------+--------+

$ cloudstack-api listServiceOfferings -t id,displaytext 
+--------------------------------------+------------------------------------+
|                  id                  |            displaytext             |
+--------------------------------------+------------------------------------+
| 10d303d6-d39f-4b15-80a1-982e86ef002b | highio.3XL128( 24CPU /128GB RAM)   |
| 12e39b73-3ce6-4e57-9036-3dac0c2b2b06 | highmem.M16( 2CPU / 16GB RAM )     |
| 354c62e6-b99b-42f2-b5c7-e741f1085422 | standard.XL32( 8CPU / 32 GB RAM )  |
| 435c1aab-e796-42c7-9320-22ebdc8f50aa | highcpu.L8( 4CPU / 8GB RAM )       |
| 55621f17-4d38-457c-ba34-e6199701b67b | standard.S4( 1CPU / 4GB RAM )      |
| 6a99ff4c-1a24-4aa6-b4cc-600220987ed0 | standard.L16( 4CPU / 16GB RAM )    |
| 6fda5e0c-e64d-46ea-893d-7e2ac9e128e7 | highcpu.XL16 ( 8CPU / 16GB RAM )   |
| 7ae143a6-5662-4f1d-bc4c-10defa775bcb | standard.M8( 2CPU / 8GB RAM )      |
| 7c548831-427b-437c-9c8b-80dde8031303 | highcpu.2XL32( 16 CPU / 32GB RAM ) |
| 8cf15770-c3c8-4efc-8ae5-b8327790db76 | highcpu.M4( 2CPU / 4GB RAM )       |
| 95edba75-7cb5-4654-a2f5-f40b7acf7a57 | standard.S8( 1CPU / 8GB RAM )      |
| 9a2f3ee4-af46-4790-9331-753674c16e68 | highio.5XL128( 40CPU /128GB RAM)   |
| d1aac6d2-bb47-4106-90d0-6a73ac3ae78e | light.S2( 1CPU / 2GB RAM )         |
| d59817bc-ed79-4083-8b71-51b26c76d311 | highmem.L32( 4CPU / 32GB RAM )     |
| e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 | light.S1( 1CPU / 1GB RAM )         |
| ec13a7d8-26ce-4c4e-a223-7ef832bb1243 | light.S2( 1CPU / 2GB RAM )         |
| ee5ee568-76b2-46ad-9221-c695e6f2149d | highmem.XL64( 8CPU / 64GB RAM )    |
+--------------------------------------+------------------------------------+

keywordを指定すると絞り込みできます。

$ cloudstack-api listServiceOfferings -t id,displaytext --keyword light
+--------------------------------------+----------------------------+
|                  id                  |        displaytext         |
+--------------------------------------+----------------------------+
| d1aac6d2-bb47-4106-90d0-6a73ac3ae78e | light.S2( 1CPU / 2GB RAM ) |
| e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 | light.S1( 1CPU / 1GB RAM ) |
| ec13a7d8-26ce-4c4e-a223-7ef832bb1243 | light.S2( 1CPU / 2GB RAM ) |
+--------------------------------------+----------------------------+

light.S2( 1CPU / 2GB RAM )が二つありますが、d1aac6d2で始まる方は旧版のようです。

cloudstack-api listServiceOfferings -t id,name --keyword light.S2
+--------------------------------------+----------------------------------------------+
|                  id                  |                     name                     |
+--------------------------------------+----------------------------------------------+
| d1aac6d2-bb47-4106-90d0-6a73ac3ae78e | light.S2(recommend resizing to new light.S2) |
| ec13a7d8-26ce-4c4e-a223-7ef832bb1243 | light.S2                                     |
+--------------------------------------+----------------------------------------------+

CentOSの仮想マシンイメージテンプレートを列挙してみました。

$ cloudstack-api listTemplates --templatefilter executable -t id,name \
  --zoneid a53ff3d3-042b-4cbd-ad16-494bb8d33e06 --keyword CentOS
+--------------------------------------+-------------------------------+
|                  id                  |              name             |
+--------------------------------------+-------------------------------+
| 180169b2-6db3-4c9f-b121-716a84750c0e | CentOS 6.7 64-bit             |
| 180ec450-2570-4d6c-b2c0-c40316814025 | CentOS 6.6 64-bit for Vagrant |
| 61bcf193-5ff6-4028-b382-0efc290d3c3f | CentOS 6.7 64-bit for Vagrant |
| 6cc86b0b-9c2e-428b-8f71-7c4ae17adf56 | CentOS 7.2 64-bit             |
| 8f641617-0d03-459c-9736-b903654f6d35 | AppTemplate CentOS 6.5 64-bit |
| 9d6249ff-e84c-4ed9-82df-c8d54c770201 | CentOS 5.10 32-bit            |
| aa39af2c-a91e-4c7d-8bf1-4e4754959b11 | CentOS 7.1 64-bit for Vagrant |
| b90cc0c6-7bc1-4270-9a76-f0243c099f1e | CentOS 5.10 64-bit            |
| e1f0aff6-c5a4-4ed9-a33e-b039d46c8c02 | CentOS 5.11 64-bit            |
| ec45fa26-e5d0-45a7-b57d-0c3f8e36ff3b | CentOS 6.6 64-bit             |
| edac6f96-0d3c-423d-a45e-6f9f82a21336 | CentOS 7.2 64-bit for Vagrant |
| ee7bc439-0186-49b4-82e4-bf821db89601 | CentOS 7.1 64-bit             |
+--------------------------------------+-------------------------------+

仮想マシン作成

あらかじめ作成しておいたSSHキーペア名をmykeyとすると、以下コマンドで仮想マシン(Light.S1、CentOS 7.1)を作成できます。nameオプションは仮想マシン名です。

$ cloudstack-api deployVirtualMachine \
  --zoneid a53ff3d3-042b-4cbd-ad16-494bb8d33e06 \
  --serviceofferingid e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 \
  --templateid ee7bc439-0186-49b4-82e4-bf821db89601 \
  --keypair mykey --name idcf-01

{
  "deployvirtualmachineresponse": {
    "id": "111111111-2222-3333-4444-5555555555",
    "jobid": "666666666-7777-8888-9999-0000000000"
  }
}

111111111-2222-3333-4444-5555555555が仮想マシンIDです。

ファイアウォールとポートフォワードの設定

まずパブリックIPアドレスのUUIDを取得します。

$ cloudstack-api listPublicIpAddresses -t id,ipaddress
+--------------------------------------+-----------------+
|                  id                  |    ipaddress    |
+--------------------------------------+-----------------+
| aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee | 100.101.102.103 |
+--------------------------------------+-----------------+

このIPアドレスに対して、ファイアウォール設定を作成します。

$ cloudstack-api createFirewallRule \
  --ipaddressid aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee \
  --protocol tcp --cidrlist 0.0.0.0/0 --startport 80 --endport 80

{
  "createfirewallruleresponse": {
    "id": "111111111-2222-3333-4444-5555555555",
    "jobid": "666666666-7777-8888-9999-0000000000"
  }
}

$ cloudstack-api listFirewallRules -t cidrlist,startport,endport,ipaddress
+----------------+-----------+---------+-----------------+
|    cidrlist    | startport | endport |    ipaddress    |
+----------------+-----------+---------+-----------------+
| 0.0.0.0/0      | 80        | 80      | 100.101.102.103 |
+----------------+-----------+---------+-----------------+

パブリックIPアドレス80番へのアクセスを80番に通すためのコマンドは以下になります。引数に仮想マシンIDが必要になります。

$ cloudstack-api createPortForwardingRule \
  --publicport 80 --privateport 80 --protocol TCP \
  --ipaddressid aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee
  --virtualmachineid 111111111-2222-3333-4444-5555555555

{
  "createportforwardingruleresponse": {
    "id": "111111111-2222-3333-4444-5555555555",
    "jobid": "666666666-7777-8888-9999-0000000000"
  }
}

簡単ですね。

ビリングAPI

5/26にビリング(請求・利用明細系)のAPIが追加されたようです。こちらは、cloudstack-apiツールでは取得できず、またシグネチャを自分で生成する必要があります。

クラウド IDCF 2016/06/05 16:51
comments (0)

blog-java2 engine (build:2016-07-31 15:08 JST)