twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル OpenStack API を使ってサーバーを立ち上げる

OpenStack API を使ってサーバーを立ち上げる

原文はこちらです。

前回のチュートリアル (和訳はここ) で OpenStack の API の初歩を学びました。http を使ってサーバーにリクエストを送信し、実行結果を返してもらう手順です。これらのコマンドは、稼働中のサーバー リストなどの情報収集やサーバーの割り当てといった、もう少し複雑な処理を行います。OpenStack の API では、そのような操作以外に、ストレージの管理、データベース管理、サーバー割り当て、解除、サーバー作成の時に使うイメージの作成、プライベート ネットワークの割り当てを含むネットワーク管理なども行います。今後のチュートリアルで、プライベート ネットワークの割り当てについて勉強する予定です。

 API を使うには、いくつかのルールがあります。コードから直接 API を呼び出すのではなく、コンソール アプリケーションを使います。コンソール アプリケーションの代表的なものに、Horizon ダッシュボードがあります。Horizon は、ブラウザ ベースの完璧な機能を備えたダッシュボードで、OpenStack のタスクを実行させることができます。ダッシュボードは、クリックで実行対象の選択をする対話型のアプリケーションです。自動実行したいタスクがある時は、スクリプトやプログラムを書く必要があります。このような場合に、API と SDK が必要になります。それでは、API の勉強を始めましょう。そして、いくつかのタスクを実行してみましょう。

 API のテストを行う

 以前のチュートリアルに書いたように、ここの例では Rackspace を使用しています。別に贔屓にしているわけではありませんが、Rackspace の OpenStack API のインプリメンテーションは、完全なものに近いからです。Rackspace の OpenStack API を学ぶためのコストは非常に低いものだからです。もちろん、別のものを使っても構いません。

 OpenStack のページに行くと、「OpenStack を始めましょう」ページに、Rackspace のようなプレミアム クラウドに関するセクションや、DevStack をダウンロードしてインストールできるローカルな環境があります。もし、OpenStack に関心があるのならば、DevStack をお勧めします。それをインストールすると素晴らしい経験が得られます。「TryStack」と呼ぶ Web サイトもチェックすべきです。まずは、RackSpace を使いたいと思います。

 イメージを見つける

API を使って、サーバーを構築しましょう。API を使用するのに、cURL コマンドライン ツールを使います。このために、「以前の文献」に書いたように Rackspace から認証トークンを入手します。以前説明しなかったちょっとしたコツがあります。トークンを請求すると、可変サイズの JSON オブジェクトがってきます。これはフォーマットされていないのですが、フォーマットして、人間が読めるようにするために、いくつかの方法があります。JavaScript Unpacker and Beautfier という Chrome のプラグインがあります。http://jsbeautifer.org/ にあります。JSON のエスケープ記号として、'/' の前に逆スラッシュ記号があることに注意してください。API コールの時は、逆スラッシュを取り除いてください。

beautifier

 サーバー立ち上げには、使えるイメージも把握しておきます。イメージは、使用するクラウドごとに意味が異なります。基本的に ISO イメージになっています。たとえば、Ubuntu インストーラーがあります。cURL を使って、公開されているイメージをリストします。

curl -s https://iad.images.api.rackspacecloud.com/v2/images \
    -H 'X-Auth-Token: abcdef123456'

abcdef123456 の部分をトークンに置き換えます。情報要求ですから、post ではなく GET メソッドを使用します (cURL のデフォルトは GET ですから、指定する必要はありません)。実行すると、大きな JSON オブジェクトが返ってきます。ここでは、25 のイメージがリストされていました (実際にはもっとありますが、省略します)。

 これらのJSON オブジェクトを扱うコツを紹介しましょう。Chrome ブラウザーで F12 キーを押し、'dev tools' を開きます。コンソールから次のコマンドを入力します。

x =

cURL コールで入手した JSON オブジェクトを貼り付けます。これで、JSON オブジェクトを x 変数に代入しました。配列とオブジェクト メンバーの形に展開することで、オブジェクトのメンバーを扱えるようになります。

chrome json

 JSON オブジェクトの終わりは、'next' メンバーです。Rackspace が提供するイメージ リストの数に上限があります。Rackspace は 1 ページ単位にデータを表示するため、次ページを要求します。'next' にある URL で始めます。

"next": "/v2/images?marker=abc123-f20f-454d-9f7d-abcdef"

これにドメイン名と https を前に付けて、cURL コマンドを発行すると、25 の結果が得られます。このリストを見て、Debian Wheezy を見つけました。リストを全部見たいとは思いません。そこで、cURL にパラメーターを追加して実行します。

Rackspace のドキュメント」に、パラメーターの説明があります。2 か所に説明があるのですが、1 つは OpenStack のドキュメントに一般的な説明があります。しかし、(Rackspace のような) プロバイダーは、拡張したオペレーションを用意しています。そのため、Rackspace のドキュメントを読むことが適切です。

JSON オブジェクト内に、ドキュメントに書かれていないメンバーがあることがわかります。たとえば、'os_distro'です。調べてみましょう。クエリパラメーターとして、URL を指定します。Ubuntu distro を検索します。

curl -s https://iad.images.api.rackspacecloud.com/v2/images?os_distro=ubuntu \
    -H 'X-Auth-Token: abcdef123456'

またまた、大きな JSON オブジェクトが返ってきました。Chrome dev tools に貼り付けます。10 個のオブジェクトがありました。12.04 が必要だとしましょう。Rackspace は、それに関する情報を提供しています。探してみましょう。さらにパラメーターを追加します。& 記号が必要です。bash で & 記号を使いたくありませんから、URL の前後を'記号で囲みます。

curl -s 'https://iad.images.api.rackspacecloud.com/v2/images?os_distro=ubuntu&org.openstack__1__os_version=12.04' \
    -H 'X-Auth-Token: abcdef123456'

os_distro と、バージョンに関するパラメーターとをどのように指定したかがわかりますね。3 つのイメージがあり、そのうちの 1 つを選びました。これらを Chrome に入れて、より詳しく見ます。全部対話的に行う必要があります。つまり Chrome への貼り付け操作などでなく、コードで行う方法を見つける必要があります。これについては、将来のチュートリアルで扱います。今回は、"Ubuntu 12.04 LTS (Precise Pngolin) (PV)"を使用します。

フレーバーを選ぶ

 サーバー立ち上げの前に、フレーバーと呼ぶサーバー タイプを選択します。イメージのリスト アップをしたのと同様に、フレーバーのリスト アップをします。

curl -s https://iad.servers.api.rackspacecloud.com/v2/12345/flavors \
    -H 'X-Auth-Token: abcdef123456'

12345 をテナント ID で、123456 を認証トークンで置き換えます。URL の 2 番目は、"servers" です。つまり、フレーバーは、API のサーバー セクションの下にあります。実行すると、38 のフレーバーを持った JSON オブジェクトが返ってきました。今回は、小さいフレーバーを選びました。フレーバー リストの 2 番目です。

{
    "id": "2",
    "links": [{
        "href": "https://iad.servers.api.rackspacecloud.com/v2/12345/flavors/2",
        "rel": "self"
    },
    {
        "href": "https://iad.servers.api.rackspacecloud.com/12345/flavors/2",
        "rel": "bookmark"
    }],
    "name": "512MB Standard Instance"
}

簡単に結果を見てましょう。href と self 欄を見てください。レストフル インタフェースへの参照 URL が表示されています。href (アドレス) と、rel (説明、正確には関係) が配列として表示されています。

最初の href を使って、このフレーバーに関する詳細情報を入手します。

curl -s https://iad.servers.api.rackspacecloud.com/v2/12345/flavors/2 \
    -H 'X-Auth-Token: abcdef123456'

次のような情報が返ってきます。

{
    "flavor": {
        "OS-FLV-WITH-EXT-SPECS:extra_specs": {
            "policy_class": "standard_flavor",
            "class": "standard1",
            "disk_io_index": "2",
            "number_of_data_disks": "0"
        },
        "name": "512MB Standard Instance",
        "links": [{
            "href": "https://iad.servers.api.rackspacecloud.com/v2/12345/flavors/2",
            "rel": "self"
        },
        {
            "href": "https://iad.servers.api.rackspacecloud.com/12345/flavors/2",
            "rel": "bookmark"
        }],
        "ram": 512,
        "vcpus": 1,
        "swap": 512,
        "rxtx_factor": 80.0,
        "OS-FLV-EXT-DATA:ephemeral": 0,
        "disk": 20,
        "id": "2"
    }
}

このフレーバーは、本テストには問題ないでしょう。サーバー立ち上げの前に、最後に、もう 1 つあります。これらをスクリプトで自動化したり、対話的処理を簡単なアプリケーションにしたりできれば良いと思います。たとえば、フレーバーと Ubuntu イメージのリストを表示して、選択できるようにする簡単なアプリケーションです。ここで使った API を使用して、ユーザーにイメージやフレーバーを選択させ、サーバーを立ち上げるのです。たくさんのやり方があり得ます。レストフル API の性質上、データとともに別の API 用の URL を返す API 呼び出しから開始する必要があります。これらの URL は、将来使うことになります。

サーバーを立ち上げる

さて、やっと、立ち上げましょう。イメージとフレーバーの id が必要です。JSON オブジェクトに含まれています。両方 (イメージ、フレーバー) の id のメンバー名は id です。サーバー名も指定する必要があります。

  • イメージの id は、 "71893ec7-b625-44a5-b333-ca19885b941d" です。
  • フレーバーの id は、2 です。
  • 名称は、Ubuntu-1 とします。 
アプリケーションを書いている時は、ID 類をハードコードしないでください。クラウド ホストはイメージを定期的に更新しているので、ID は常に置き換わっています。つまり、毎回 API コールから開始する必要があるのです。

サーバー作成は、POST メソッドを使います。サーバー リストと同じ URL を使いますが、POST メソッドを使うと、リストではなく作成を Rackspace に指示します。id と名前を使って、JSON オブジェクトを組み立てます。オブジェクトを '-d' パラメーターで渡します。メンバー名をダブルクォートで囲んだ JSON 仕様に則った形式とします。

curl -X POST -s https://iad.servers.api.rackspacecloud.com/v2/12345/servers \
    -d '{"server": { "name": "Ubuntu-1", "imageRef":"71893ec7-b625-44a5-b333-ca19885b941d", "flavorRef":"2" }}' \
    -H 'X-Auth-Token: abcdef123456' \
    -H "Content-Type: application/json"

入力を間違えると、間違いを指摘するエラー メッセージが表示されます (たとえば JSON の書式に合わないリクエスト本体の書式誤り)。正しく入力したら、作成されたサーバーに関する情報を持った JSON オブジェクトが返されます。

{
    "server": {
        "OS-DCF:diskConfig": "AUTO",
        "id": "abcdef-02d0-41db-bb9f-abcdef",
        "links": [{
            "href": "https://iad.servers.api.rackspacecloud.com/v2/12345/servers/abcdef-02d0-41db-bb9f-abcdef",
            "rel": "self"
        },
        {
            "href": "https://iad.servers.api.rackspacecloud.com/12345/servers/f02de705-02d0-41db-bb9f-75a5eb5ebaf4",
            "rel": "bookmark"
        }],
        "adminPass": "abcdefXuS7KD34a"
    }
}

 'adminPass' 欄を見てください。サーバーにログインする時に必要です。

 サーバーに関する情報を入手するために、最初の 'href' を使用します。

curl -s https://iad.servers.api.rackspacecloud.com/v2/12345/servers/abcdef-02d0-41db-bb9f-abcdef \
    -H 'X-Auth-Token: abcdefXuS7KD34a'

 サーバーに関する大量の詳細情報が入手できます。たとえば IP アドレスなどです。JSON オブジェクトの最初の部分を示します。

{
    "server": {
        "status": "ACTIVE",
        "updated": "2015-02-09T19:35:41Z",
        "hostId": "abcdef4157ab9f2fca7d5ae77720b952565c9bb45023f0a44abcdef",
        "addresses": {
            "public": [{
                "version": 6,
                "addr": "2001:4802:7800:2:be76:4eff:fe20:4fba"
            },
            {
                "version": 4,
                "addr": "162.209.107.187"
            }],
            "private": [{
                "version": 4,
                "addr": "10.176.66.51"
            }]
        },

 ssh でログインします。スクリーンショットです。

server ssh

最後にサーバーを削除することを忘れないでください。Rackspace のウェブ ポータルから行います。API でもできます。以下に示します。

curl -X DELETE \
    -s https://iad.servers.api.rackspacecloud.com/v2/12345/servers/abcdef-02d0-41db-bb9f- abcdef \
    -H 'X-Auth-Token: abcdefXuS7KD34a'

これで完了です。

結論

最初にイメージとフレーバーの情報を入手し、次に id を使ってサーバーを立ち上げます。これらは簡単に行うことができます。JSON 形式で戻ってきた内容に含まれる URL を使います。これがレストフル インタフェースの基本です。次のチュートリアルでは、いくつかの言語に対応した SDK について勉強します。

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ


Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!