個人利用から大規模開発までConoHaで始めるクラウド開発入門

第5回 OpenStack APIを使ったCLI操作をConoHaでやってみる

この記事を読むのに必要な時間:およそ 4.5 分

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

セキュリティグループを確認します。最初はdefaultというルールしかなく,このままではVMにssh接続できませんが,実はセキュリティグループを作る裏技があります。WebパネルでVMを作り,VMの詳細情報の画面から「ネットワーク情報⁠⁠→⁠接続許可ポート」にある「ssh(22⁠⁠web(20/21/80/443⁠⁠」などをクリックすると,セキュリティグループがコントロールパネルにより作成されます。

(env_us)$ openstack security group list -c 'Name' -f value
default
gncs-ipv4-ssh
gncs-ipv4-web

ConoHaでは,novaのsecurity groupコマンドは現在のところ操作できません。これがAPIツールの互換性を下げることにもなっているのですが,VMのNIC(ポート)ごとにneutronで設定することを標準化しようという考えから,このような仕様になっています。novaのセキュリティグループの挙動とneutronのセキュリティグループの挙動は異なり,次のようになります。

  • novaでは,VM全体に対してセキュリティグループを設定する
  • neutronでは,VMのNIC(Port)に対してセキュリティグループを設定する

neutronで複数のネットワークを使っている場合は,VMにNICが複数付きます。間違ってnovaのセキュリティグループを適用してすべてのNICのポリシーが変更され,疎通できなくなることを防ぐために,あえて機能を停止することにしたのです。

“openstack security group create”コマンドはnovaのsecurity group createのAPIにアクセスするので,この理由からConoHaでは現在使えません。その代わり,neutronのコマンドで次のように操作することになります。

(env_us)$ neutron security-group-create docker-works --description "allow docker-machine connect"
(env_us)$ neutron security-group-rule-create --direction ingress --ethertype IPv4 --protocol tcp --port-range-min 22 --port-range-max 22 docker-works -f value

neutronコマンドは,python-openstakclientをインストールしたときにインストールされています。ここでは⁠docker-works⁠というセキュリティグループを作成してTCP 22を開けます。

作ったセキュリティグループは,openstackコマンドでも確認できます。

(env_us)$ openstack security group show docker-works -f yaml

作成済みのVMのNICポートにセキュリティグループを設定するには,⁠neutron port-list⁠で起動しているVMのNICポートを確認し,⁠neutron port-update⁠で適用します。⁠netron port-list⁠コマンドを実行して,IPアドレスが一致するもので特定するか,⁠netron port-show <port id>⁠コマンドでポートの詳細を表示して,⁠device_id⁠⁠openstack server list⁠コマンドのserver(VM)のIDと同一となることを確認します。

(env_us)$ neutron port-list -f value
(env_us)$ neutron port-show -f yaml 94c23b1b-f922-4070-84ba-baf42c66eff8 | grep 'device_id'
- {Field: device_id, Value: b7ba7ea9-6145-4ae5-aba8-0377d16bdf77}
(env_us)$ openstack server list -f value
b7ba7ea9-6145-4ae5-aba8-0377d16bdf77 163-44-112-102 ACTIVE ext-163-44-112-0-23=163.44.112.102, 2400:8500:2500:624:163:44:112:102
(env_us)$ neutron port-update --security-group docker-works 94c23b1b-f922-4070-84ba-baf42c66eff8
Updated port: 94c23b1b-f922-4070-84ba-baf42c66eff8

セキュリティグループは同じリージョン内で使い回せますので,先に作っておいてVM作成時に次のように指定すると作成時に適用されます。

(env_us)$ openstack server create --image vmi-docker-1.8.1-ubuntu-14.04 --flavor g-2gb --key-name my-rsa-key --security-group docker-works --property "instance_name_tag=docker_base2" new-server2 -f value

新規に作成したセキュリティグループ⁠docker-works⁠はTCP 22ポートを通しますので,ssh接続できます。

サーバ一覧を⁠--long⁠で取得し,Propertiesにも表示します。

(env_us)$ openstack server list --long -c 'ID' -c 'Properties' -f yaml

Propertiesのところに⁠docker_base⁠のタグが入っているので,作成時のコマンドで作ったものが確認できます。実際は,⁠openstack server create⁠コマンドで返答される内容の中に,server ID,server Name,admin_pass(rootに挿入されたランダムなパスワード⁠⁠,IPアドレスなどの情報がありますので,そちらを利用するのが最適です。

“openstack server ssh”コマンドでssh接続してみます。ConoHaではrootユーザに対してssh設定されますので,rootユーザを指定します。また,Fixed IP(固定IP)という形態でユーザのVMにIPを割り振っていますので,“--address-type fixed”の指定が必要です。接続元がIPv4のみの場合には,“-4”の指定が必要です。

(env_us)$ openstack server ssh -4 --address-type fixed --login root 11fca3ff-6029-4c3c-8a61-cf1c365a7378

Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.16.0-45-generic x86_64)
(中略)
root@163-44-112-111:~#

ここではupdateをかけて,⁠docker-182-u1404⁠という名前でイメージを保存します。

root@163-44-112-111:~# aptitude update
root@163-44-112-111:~# aptitude upgrade -y
root@163-44-112-111:~# docker --version
Docker version 1.8.2, build 0a8c2e3
root@163-44-112-111:~# shutdown -h now

(env_us)$ openstack server image create 11fca3ff-6029-4c3c-8a61-cf1c365a7378 --name "docker-182-u1404" -f yaml
_info

イメージが保存されていることを確認します。

(env_us)$ openstack image list -f value | grep docker
87817478-06a7-4e7f-acbd-db823f7c3377 docker-182-u1404
f05fe793-1d30-4760-9946-70440372dce1 vmi-docker-1.8.1-ubuntu-14.04

これで次回からは,環境構築が終わった⁠docker-182-u1404⁠というVMイメージからVMを起動して利用できることになります。

(env_us)$ openstack server create --image docker-182-u1404 --flavor g-2gb --key-name my-rsa-key --security-group docker-works --property "instance_name_tag=docker01" new-server3 -f value

おわりに

今回は,OpenStackの新しいクライアントOpenStackClient(OSC)をConoHaで使ってみました。また,フォーマットオプションを指定した例も示しました。シェルスクリプトも書きやすくなりますので,ぜひお試しください。

著者プロフィール

郷古直仁(ごうこなおと)

GMOインターネット(株) システム本部 アーキテクト

仙台にてホスティングやwebサービスを作っている会社でSEとしてやってきて,2007年12月よりGMOインターネットに参加。

GMOインターネットではホスティングサービスから始まり,GMOアプリクラウド,ConoHaとクラウド基盤のサービス開発をOpenStackで行っている。

いままでUndercloudなインフラの仕事が長かったからか,OpenStackではDesignate(DNS as a service)とIronic(baremetal service)が好き。

OpenStackユーザ会の会長に「おなか出ましたね」と言われつつも,最近はお肉とお酒があれば,どこだって行きます,しゃべります的なイベント駆動開発でものを作ったりする活動を個人的にしている。

Twitter(@naoto_gohko):https://twitter.com/naoto_gohko
GitHub:https://github.com/naototty
Blog:http://blog.docodemo-conoha.red/
Slideshare:http://www.slideshare.net/chroum

GMOインターネット: Webサイト:https://www.gmo.jp/