前回のエントリでIDCFクラウドへの移行を紹介しましたが、WebUIの管理コンソールのレスポンスがそんなに良くありません。ちょいちょい待たされます。たくさんのファイアウォール設定やポートフォワード設定を投入しなければいけない場合は、面倒です。
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が必要になります。
以下のように取得します。
$ 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"
}
}
簡単ですね。
5/26にビリング(請求・利用明細系)のAPIが追加されたようです。こちらは、cloudstack-apiツールでは取得できず、またシグネチャを自分で生成する必要があります。