IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

IDCFクラウド APIを利用した仮想マシンの作成からSSH接続まで

こんにちは。IDCフロンティア UX開発部の上野です。ご無沙汰しております。

さて前回の藤城の投稿に引き続いて今回もIDCFクラウドについての投稿となります。 藤城の投稿ではIDCFクラウドの一番の特長として、「クラウドコンソールの操作がよりわかりやすく」が挙げられているのですが、今回はコマンドラインツールでのIDCFクラウドの操作方法について記載させてもらいます。 

さて気を取り直して、今回やることとしては以下となります。

  • SSH-Keyのアップロード
  • 仮想マシンの作成
  • SSH-Keyの設定

これを行うことでコマンドラインのみで仮想マシンを作成してSSH接続できるようになるので、コマンドラインのみで環境構築する第一歩になるかと思います。

環境情報

以下手順を確認した環境情報となります。

コマンドラインツールはPythonですのでPython環境が必要になります。

  • OS: Mac OSX 10.9.5
  • Python: 2.7.5

前提条件

前提条件は以下となります。

  • IDCFクラウドのアカウントを持っていること
  • Homebrewがインストール済みであること

2014/11/14まで1万円のクーポンが発行されているらしいのでアカウント登録するなら今かと^^

Step1:コマンドラインツールのインストール

Step1-1:gitのインストール

コマンドラインツールはGitHub上にありますので、インストールにはgitコマンドが必要になります。gitコマンドをインストール済みの方は本手順は不要となります。


$ sudo brew install git

Step1-2:pipのインストール

Pythonのパッケージ管理システムであるpipをインストールします。既にインストール済みの方は本手順は不要となります。


$ curl -kL https://raw.github.com/saghul/pythonz/master/pythonz-install | bash
$ sudo easy_install pip

Step1-3:コマンドラインツールのインストール

さてこれでコマンドラインツールをインストールする準備が整いました。 インストールは簡単で以下のコマンドを実行することでインストールできます。


$ sudo pip install git+https://github.com/idcf/cloudstack-api

Step2: API-Key/Secret-Keyの取得

コマンドラインツールを利用するためにはアカウントに紐づいたAPI-KeyとSecret-Keyが必要になります。

Step2-1: IDCFクラウドコンソールにログイン

まずはクラウドコンソールにログインします。

webconsle_signin

Step2-2: API画面に遷移

サイドメニューのAPIタブをクリックしてAPI画面に遷移します。

webconsle_home

Step2-3: エンドポイント/API-Key/Secret-Keyの記録

API画面に表示されている以下の項目を記録しておきます。これらの情報はコマンドラインツールで利用する値となります。

  • エンドポイント
  • API Key
  • Secret Key

webconsle_api-key

Step3: コマンドラインツールの設定

 

Step3-1: 環境設定

Step2で取得したコマンドラインツールの設定ファイル(~/.idcfrc)に設定します。


~/.idcfrc
[account]
host=https://xxxx.xxxx.xxxx.xxxx/client/api
api_key=xxxxxxxxxxxFBinrxjObdNx3LdF9KAM3JqRtAFRkYDrnKUiRBhrInpUuQN1aJOca4JOCpm2TNAr1Cob6yAg
secret_key=xxxxxxKyx5jjElMUsQSepOjazWUQLmJZkC1LFPEBN0t54FJqIFu2BNY32HnX5g5ohjOKVEBSUy6rhIVbOrgErXQ

hostにエンドポイント、api_keyにAPI Key、secret_keyにSecret Keyを設定します。

Step3-2: 導通確認

設定が正常に行われているかを以下のコマンドで確認します。Zone情報を取得するコマンドとなります。


$ cloudstack-api listZones -t
+-----------------+---------------+--------------------------------------+---------------------+-------+-------------+-----------------------+------+--------------------------------------+
| allocationstate |  dhcpprovider |                  id                  | localstorageenabled |  name | networktype | securitygroupsenabled | tags |              zonetoken               |
+-----------------+---------------+--------------------------------------+---------------------+-------+-------------+-----------------------+------+--------------------------------------+
| Enabled         | VirtualRouter | a117e75f-xxxx-4074-806d-889c61261394 | False               | tesla | Advanced    | False                 | []   | xxxxxxxx-a3c5-3538-8a2a-71d93a788ab5 |
+-----------------+---------------+--------------------------------------+---------------------+-------+-------------+-----------------------+------+--------------------------------------+
$

上記のようにZone情報が表示されれば正常に設定が行われています。

Step4: SSH-Keyのアップロード

Step4-1: SSH-Keyの作成

SSH-Keyを作成します。まだない方は以下のコマンドで作成してください。


$ ssh-keygen -t rsa

Step4-2: SSH-Keyのアップロード

以下のコマンドでSSH-KeyをIDCFクラウド上にアップロードすることができます。


$ cloudstack-api registerSSHKeyPair --name idcf-test --publickey "$(cat ~/.ssh/id_rsa.pub)" -t
+-----------------------------------------------------------------------------------------+ 
| keypair |
+-----------------------------------------------------------------------------------------+ 
| {'name': 'idcf-test', 'fingerprint': 'a9:bd:d9:d9:f1:75:54:01:20:75:d7:d1:bf:1a:d7:77'} |
+-----------------------------------------------------------------------------------------+

本当に登録されているかの確認は以下のコマンドとなります。


$ cloudstack-api listSSHKeyPairs -t
+-------------------------------------------------+-----------+
|                   fingerprint                   |    name   |
+-------------------------------------------------+-----------+
| a9:bd:d9:d9:f1:75:54:01:20:75:d7:d1:bf:1a:d7:77 | idcf-test |
+-------------------------------------------------+-----------+

登録されていますね。

Step5: 仮想マシンの作成

Step5-1: 仮想マシンタイプの取得

まずは作りたい仮想マシンタイプを取得します。以下のコマンドで取得することができます。


$ cloudstack-api listServiceOfferings -t id,displaytext
+--------------------------------------+------------------------------------+
|                  id                  |            displaytext             |
+--------------------------------------+------------------------------------+
| 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 )       |
| 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 )         |
| ee5ee568-76b2-46ad-9221-c695e6f2149d | highmem.XL64( 8CPU / 64GB RAM )    |
+--------------------------------------+------------------------------------+

作りたい仮想マシンタイプのidを記録しておいてください。今回は「light.S2」で作成しようと思います。

Step5-2: テンプレート情報の取得

作りたい仮想マシンのテンプレート情報を取得します。以下のコマンドで取得することができます。


$ cloudstack-api listTemplates --templatefilter executable -t id,ostypename | wc -l
      34
$ # 数が多いので抜粋して表示させています。
$ cloudstack-api listTemplates --templatefilter executable -t id,ostypename | more
+--------------------------------------+---------------------------------------+
|                  id                  |               ostypename              |
+--------------------------------------+---------------------------------------+
| b2d2a4fa-d694-444b-b961-0a0f9d7fe0f3 | Ubuntu 12.04 (64-bit)                 |
+--------------------------------------+---------------------------------------+

今回は「Ubuntu 12.04 (64-bit)」を利用しようと思います。

Step5-3: 仮想マシンの作成

さてようやく仮想マシンの作成の準備が整いました!以下のコマンドで仮想マシンを作成することができます。


$ cloudstack-api deployVirtualMachine --serviceofferingid d1aac6d2-bb47-4106-90d0-6a73ac3ae78e --templateid b2d2a4fa-d694-444b-b961-0a0f9d7fe0f3 --zoneid a117e75f-xxxx-4074-806d-889c61261394 --group idcf-test --keypair idcf-test --displayname  idcf-dev01  --name idcf-dev01

上記のコマンドで「idcf-test」というグループの「idcf-dev01」という仮想マシンが作成されます。 --zoneidには正常性確認時のZone IDを指定してください。

さて少し経ったあとに以下のコマンドで仮想マシンが作成されているかを確認します。


$ cloudstack-api listVirtualMachines -t id,displayname,created,state
+--------------------------------------+----------------+--------------------------+---------+
|                  id                  |  displayname   |         created          |  state  |
+--------------------------------------+----------------+--------------------------+---------+
| f4894a29-fe02-4021-9e17-b35795b97b33 | idcf-dev01     | 2014-10-24T13:46:32+0900 | Running |
+--------------------------------------+----------------+--------------------------+---------+

Running状態で作成されていることがわかると思います。

Step6: ルーティング設定

このままでは仮想マシンまでのルーティングが設定されていないのでルーティング設定する必要があります。

Step6-1: パブリックIPアドレスの確認

以下のコマンドで利用可能なパブリックIPアドレスを確認します。

$ cloudstack-api listPublicIpAddresses -t id,ipaddress 
+--------------------------------------+-----------------+ 
| id | ipaddress |
+--------------------------------------+-----------------+ 
| 2de1ed89-62b5-4723-abc6-4e4e5e700507 | xxx.xxx.xxx.xxx | 
+--------------------------------------+-----------------+

これがインターネット環境から接続可能なアドレスとなります。

Step6-2: ポートフォワーディングの設定

パブリックIPアドレスに作成した仮想マシンへのポートフォワーディングルールを設定します。


$ cloudstack-api createPortForwardingRule --ipaddressid 2de1ed89-62b5-4723-abc6-4e4e5e700507 --privateport 22 --protocol TCP --publicport 22 --virtualmachineid f4894a29-fe02-4021-9e17-b35795b97b33 -t
+--------------------------------------+--------------------------------------+
|                  id                  |                jobid                 |
+--------------------------------------+--------------------------------------+
| 93235621-839c-46fb-87f1-6a2d925b1f9b | e871031f-4603-45c2-81ba-940099a2e10e |
+--------------------------------------+--------------------------------------+

しばらく経った後に以下のコマンドで設定されているかを確認します。


$ cloudstack-api listPortForwardingRules -t ipaddressid,publicport,state,virtualmachinedisplayname
+--------------------------------------+------------+--------+---------------------------+
|             ipaddressid              | publicport | state  | virtualmachinedisplayname |
+--------------------------------------+------------+--------+---------------------------+
| 2de1ed89-62b5-4723-abc6-4e4e5e700507 | 22         | Active | idcf-dev01                |
+--------------------------------------+------------+--------+---------------------------+

Activeになっていることがわかるかと思います。

仮想マシンにSSH接続

最後にローカル環境から仮想マシンにログインしてみます。


$ ssh root@xxx.xxx.xxx.xxx
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-33-generic x86_64)

* Documentation: https://help.ubuntu.com/

root@idcf-dev01:~#

接続できました!

おわりに

いかがでしたでしょうか。結構手順的には多かったと思いますが、コマンドラインツールだけでSSH接続できることを実感して頂けたかなと思います。
# API Keyの取得などは別として。 

次回は環境の自動構築までをコマンドラインツールでできればいいなと思ってますので、ご興味があればまたご覧ください。 それでは!

<関連記事>

Copyright © IDC Frontier Inc.