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人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/04/16 2018年 4月 15日
  2. Today's Linux 2018/04/19 2018年 4月 18日
  3. Today's Linux 2018/04/17 2018年 4月 17日
  4. Today's Linux 2018/04/20 2018年 4月 19日
  5. Today's Linux 2018/04/23 2018年 4月 22日

Linux Foundationについて

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

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

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

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

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

乞うご期待!