2015.05.25

新しくなったConoHaをMacのターミナルで○○してみた


こんにちは、次世代システム研究室のN.O.です。
ConoHaがリニューアルしました。ストレージにSSDを採用し、時間単位での課金と柔軟になった料金体系、スケーラビリティ、簡単な操作はそのままに海外のリージョンも選べるようになりとてつもなくパワーアップしています。



そんな中で従来のオブジェクトストレージだけだったAPIが大量に追加されています。これはコマンドラインやスクリプトで色々とできるようになったのではないかと夢が広がります。ざっと見たところOpenStack互換とは特に書いてないんですが、たぶん大丈夫だよね、、、という事でOpenStack Command-line Clientsを使って色々と試したいと思います。
OpenStackのCLIについてはこちらの記事で解説しております。今回はこのOpenStack CLIをmacにインストールしてサーバへ接続するところまでやってみます。

環境はMacbook Air、OS X Yosemite、Homebrew、python-novaclient 2.25.0を使用しています。
※本記事はOpenStack Command-line ClientsからConoHaへの接続性を保証するものではありません。

python-novaclientをインストールする


python-novaclient(コマンドはnova)はpythonのプログラムでpipでインストールします。OS Xビルトインのpythonだとsudoが必要だったりと色々手間がかかりますのでHomebrewのものを使います。ビルトインのpythonを使う場合はsudoが必要かもしれません。ターミナルを起動して以下のコマンドを実行します。
brew install python
pip install python-novaclient

ダッシュボードから認証に必要な情報を拾います。
API→テナント情報、エンドポイント、APIユーザーを確認します。APIユーザーは最初にパスワードを設定する必要があります。
エンドポイントはリージョンを間違え無いように気をつけましょう。
適当なファイル(ここではkeystonercとします)に以下の情報を記載しておきますと
export OS_USERNAME=[APIユーザーのユーザー名]
export OS_PASSWORD=[APIユーザーのパスワード]
export OS_TENANT_NAME=[テナント情報→テナント名]
export OS_AUTH_URL=[エンドポイント→Identity ServiceのURL]

sourceで読み込めばコマンドを打つ度に入力する必要が無くなります。
source keystonerc

novaはサブコマンドが多いので補完できるようにしたいと思います。こちらは無くても大丈夫ですので不要な場合は飛ばしてください。今回の環境はzshのためzsh-completionsをインストールします。
brew install zsh zsh-completions
curl -o /usr/local/Cellar/zsh-completions/0.12.0/share/zsh-completions/_nova https://raw.githubusercontent.com/openstack/python-novaclient/master/tools/nova.zsh_completion
cd /usr/local/share/zsh-completions
ln -s ../../Cellar/zsh-completions/0.12.0/share/zsh-completions/_nova
rm -f ~/.zcompdump; compinit


ssh公開鍵を登録する


公開鍵を登録します。新しいConoHaでは従来通りキーペアの自動生成もできますが、自身の公開鍵を登録する事もできます。秘密鍵をダウンロードする事に抵抗感のあるおじさんとしては嬉しい限りです。
ここでは鍵に[mac]と名前をつけます。
nova keypair-add --pub-key ~/.ssh/id_rsa.pub mac

サーバを起動してみる


プランとイメージを選択します。プランはnova flavor-listで、
イメージはnova image-listで調べることができます。

$ nova flavor-list                   
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| ID                                   | Name   | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| 294639c7-72ba-43a5-8ff2-513c8995b869 | g-2gb  | 2048      | 50   | 0         |      | 3     | 1           | True      |
| 3aa001cd-95b6-46c9-a91e-e62d6f7f06a3 | g-16gb | 16384     | 50   | 0         |      | 8     | 1           | True      |
| 62e8fb4b-6a26-46cd-be13-e5bbf5614d15 | g-4gb  | 4096      | 50   | 0         |      | 4     | 1           | True      |
| 7eea7469-0d85-4f82-8050-6ae742394681 | g-1gb  | 1024      | 50   | 0         |      | 2     | 1           | True      |
| 965affd4-d9e8-4ffb-b9a9-624d63e2d83f | g-8gb  | 8192      | 50   | 0         |      | 6     | 1           | True      |
| a20905c6-3733-46c4-81cc-458c7dca1bae | g-32gb | 32768     | 50   | 0         |      | 12    | 1           | True      |
| c2a97b05-1b4b-4038-bbcb-343201659279 | g-64gb | 65536     | 50   | 0         |      | 24    | 1           | True      |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+

$ nova image-list 
+--------------------------------------+-----------------------------------+--------+--------+
| ID                                   | Name                              | Status | Server |
+--------------------------------------+-----------------------------------+--------+--------+
| 861f7a60-9da2-4362-a32c-f924da53f006 | gncvmi-centos-6.6-i386            | ACTIVE |        |
| 14961158-a69c-4af1-b375-b9a72982837d | gncvmi-centos-6.6-x86_64          | ACTIVE |        |
| edf7c65e-9515-4889-bba1-8d15ea898ef3 | gncvmi-centos-7.1-x86_64          | ACTIVE |        |
| 7d7c979a-4c6f-4a1e-9296-fee49ee83743 | gncvmi-debian-7-amd64             | ACTIVE |        |
| 2bcae54a-4383-446b-8eeb-ed8eb929c3a6 | gncvmi-debian-7-i386              | ACTIVE |        |
| aa28ff6d-a697-499d-a071-563ea7afdbab | gncvmi-fedora-21-x86_64           | ACTIVE |        |
| 0ecb7b16-9fe1-4982-9717-e087dfc65ab3 | gncvmi-freebsd-10.1-x86_64        | ACTIVE |        |
| 55bccf40-8092-47ce-9714-11a78ce34da8 | gncvmi-jenkins-1.6-centos-6.6     | ACTIVE |        |
| 1b5dad09-8d5b-4fa8-9e37-18d023873d3f | gncvmi-lamp-centos-6.6            | ACTIVE |        |
| ab31a576-3a4f-4e56-bf83-867dcb38b1c6 | gncvmi-opensuse-13.2-x86_64       | ACTIVE |        |
| fc70d101-4f61-44d7-8e63-f31fd46933f4 | gncvmi-redmine-3.0-centos-6.6     | ACTIVE |        |
| 0e32bc8f-95bf-4ef4-8cb0-12ed1cca5196 | gncvmi-ror-4.2-centos-6.6         | ACTIVE |        |
| ae60f83f-2454-4428-96fd-187509a8b07b | gncvmi-scientificlinux-7.1-x86_64 | ACTIVE |        |
| eaa4c34f-cab8-445a-a03d-ffee9ff51c92 | gncvmi-ubuntu-12.04-amd64         | ACTIVE |        |
| 737f0b24-c80b-462f-80c2-624409fd1e30 | gncvmi-ubuntu-12.04-i386          | ACTIVE |        |
| 2b03327f-d453-4c7d-91c9-8b9924b6ea88 | gncvmi-ubuntu-14.04-amd64         | ACTIVE |        |
| 7297eba6-42f9-4fbb-bb8d-ab1a8fde17a8 | gncvmi-ubuntu-14.04-i386          | ACTIVE |        |
+--------------------------------------+-----------------------------------+--------+--------+


起動の準備ができましたのでnova bootを実行します。オプションの解説をします。

  • --image イメージを指定します。
  • --flavor flavorはIDじゃないと通りませんでした。1GBのプランを起動するのでflavorのIDは7eea7469-0d85-4f82-8050-6ae742394681を利用します。
  • --meta GUI上のネームタグはinstance_name_tagで指定できます。
  • --key-name 登録した鍵を指定します。
  • --security-groups セキュリティグループを指定します。何も指定しないと「defaults」というセキュリティグループがつくのですが通信が許可されて無いので外部と通信する事ができません。そこで「接続許可ポート→全て」に相当するセキュリティグループを指定しています。
  • <name> 最後に<name>を指定しますが、ここで指定した名前は無視され、IPアドレスのドット”.”をハイフン”-“に変換した形の名前になります。しかしながら無いとエラーが出るのでダミーとして「test」と入力しておきます。

nova boot \
  --image gncvmi-centos-7.1-x86_64 \
  --flavor 7eea7469-0d85-4f82-8050-6ae742394681 \
  --meta instance_name_tag="mac" \
  --key-name mac \
  --security-groups gncs-ipv4-all,gncs-ipv6-all \
  test

起動に成功すると以下のような表示になります

+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Property                             | Value                                                                                                                                                                                                                                      |
+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                                                                                                                                                                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                                                                                                                                                                                                       |
| OS-EXT-SRV-ATTR:host                 | -                                                                                                                                                                                                                                          |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                                                                                                                                                                                                                          |
| OS-EXT-SRV-ATTR:instance_name        | tyo1-0000XXXX                                                                                                                                                                                                                              |
| OS-EXT-STS:power_state               | 0                                                                                                                                                                                                                                          |
| OS-EXT-STS:task_state                | scheduling                                                                                                                                                                                                                                 |
| OS-EXT-STS:vm_state                  | building                                                                                                                                                                                                                                   |
| OS-SRV-USG:launched_at               | -                                                                                                                                                                                                                                          |
| OS-SRV-USG:terminated_at             | -                                                                                                                                                                                                                                          |
| accessIPv4                           |                                                                                                                                                                                                                                            |
| accessIPv6                           |                                                                                                                                                                                                                                            |
| adminPass                            | XXXXXXXX                                                                                                                                                                                                                                  |
| config_drive                         | True                                                                                                                                                                                                                                       |
| created                              | 2015-05-21T08:15:07Z                                                                                                                                                                                                                       |
| flavor                               | g-1gb (7eea7469-0d85-4f82-8050-6ae742394681)                                                                                                                                                                                               |
| hostId                               |                                                                                                                                                                                                                                            |
| id                                   | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx                                                                                                                                                                                                       |
| image                                | gncvmi-centos-7.1-x86_64 (edf7c65e-9515-4889-bba1-8d15ea898ef3)                                                                                                                                                                            |
| key_name                             | mac                                                                                                                                                                                                                                        |
| metadata                             | {"instance_name_tag": "mac", "backup_status": "active", "backup_id": "", "properties": "{\"vnc_keymap\":\"ja\",\"hw_video_model\":\"vga\",\"hw_vif_model\":\"virtio\",\"hw_disk_bus\":\"virtio\",\"cdrom_path\":\"\"}", "backup_set": "0"} |
| name                                 | XXX-XXX-XXX-XXX                                                                                                                                                                                                                             |
| os-extended-volumes:volumes_attached | []                                                                                                                                                                                                                                         |
| progress                             | 0                                                                                                                                                                                                                                          |
| security_groups                      | gncs-ipv4-all, gncs-ipv6-all                                                                                                                                                                                                               |
| status                               | BUILD                                                                                                                                                                                                                                      |
| tenant_id                            | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx                                                                                                                                                                                                           |
| updated                              | 2015-05-21T08:15:09Z                                                                                                                                                                                                                       |
| user_id                              | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx                                                                                                                                                                                                           |
+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+


ここでnameのハイフン”-“をドット”.”に直すとIPアドレスになります。

公開鍵が登録済みなのですぐにsshできます。

ssh root@XXX.XXX.XXX.XXX


サーバはnova deleteで削除する事ができます。

$ nova delete XXX-XXX-XXX-XXX
Request to delete server XXX-XXX-XXX-XXX has been accepted.


さいごに


いかがでしたでしょうか。 CLIでサーバ起動->接続までターミナル上で一通りできるようになってますます便利になりました。時間課金なので1時間1.3円〜で利用できるのもありがたいです。ちょっとした検証でも活用できます。個人的にも今後はConoHaの利用が更に増えていきそうです。皆様も是非お試し下さい!!