検索
Special

DevOps時代の開発者のためのクラウドサービスの在り方とは「クラウド・エヌ」APIの使い方【サーバ運用基本編】

オープンソースのクラウド基盤「CloudStack」を全面的に採用したNTTコミュニケーションズの「クラウド・エヌ」。開発者とシステム運用担当者の連携の重要性を説く「DevOps」のコンセプトが注目を集めているが、「クラウド・エヌ」のAPI公開は、クラウド時代におけるDevOpsの在り方を示唆するものだと言えよう。本稿では、APIを通じてどのようなことが可能になるのか、その具体例をコードも示しながらいくつか紹介していく。またリレーショナルデータベースなど、Amazon Web Servicesと互換性のあるインターフェイスが備わる予定の「クラウド・エヌ」のさまざまな追加機能もいくつか紹介しよう。

PC用表示
Share
Tweet
LINE
Hatena
PR

開発者に広くAPIを公開したクラウドサービス「Cloudn

 「Bizホスティング Cloudn」(クラウド・エヌ、以下、Cloudn)は、NTTコミュニケーションズが提供するグローバルパブリッククラウドサービス。もともと信頼性の面で高い評価を受けていた同社のデータセンターと、充実したネットワークサービスを組み合わせ、これに独自の課金体系を適用することで、低価格かつ高信頼性のクラウドサービスを実現している。

 しかし、開発者にとって最も興味深いのは、オープンソースのクラウド基盤ソフトウェア「Apache CloudStack」(以下、CloudStack)が全面的に採用されており、しかもそのAPIが公開されている点だろう。つまり、このことはプログラムからAPIを通じてクラウド基盤を操作し、その運用を自在に制御・自動化できるということを意味している。昨今、開発者とシステム運用担当者の連携の重要性を説く「DevOps」のコンセプトが注目を集めているが、CloudnのAPI公開は、クラウド時代におけるDevOpsの在り方を示唆するものだと言えよう。

 NTTコミュニケーションズがCloudnでこうした仕様を採用するに至った背景などは、別途「開発者のために積極的にAPIを公開していく、NTTコミュニケーションズ」で詳しく紹介されているので、そちらを参照されたい。本稿では、さらにもう一歩踏み込んで、実際にAPIを通じてどのようなことが可能になるのか、その具体例をコードも示しながらいくつか紹介していきたい。

CloudStack APIを使ったCloudn運用自動化の例

 先ほど「CloudnはAPIを通じて運用の自動化が可能」と述べたが、もちろん管理コンソールを使った手動での操作も可能だ。以下が、Cloudnの各ユーザーごとに提供される管理コンソールの画面だ。


図1 管理コンソールのスクリーンショット

 この画面を通じて、例えば仮想サーバの起動・停止や複製、バックアップ、スケールアップ・スケールダウン、ネットワークやファイアウォールの設定、ロードバランサーの設定などなど、およそクラウド環境の運用管理で必要な一通りの作業を実行できる。

 この管理コンソールの裏で動いているのが、クラウド基盤ソフトウェアのCloudStackだ。そしてCloudnが大変ユニークなのは、先ほども述べた通り、このCloudStackのAPIを開発者に対して解放している点にある。管理コンソールの機能のほとんどはAPIでもカバーされているため、自前で組んだスクリプトやプログラムからAPIを呼び出すことで、高度な運用自動化が可能になるのだ。

 ちなみにCloudStack APIの詳しい仕様は、オンライン上のリファレンスで公開されているので、参照されたい。以降では、これらのAPIを使ってCloudnの運用を自動化するいくつかのコード例を紹介する。

API呼び出しを簡素化するためのツール

 ちなみに、CloudStack APIはREST APIとして提供されており、レスポンスはデフォルトではXML形式で返される(JSON形式も可)。そこでまずは、REST API呼び出しに伴うコマンド文字列生成などの処理を一括して担うスクリプトツールを作成する。以下が、そのコードだ。

 このコードはクリエーションライン社が公開している「bash script for CloudStack API」をクリエーションライン社からの了承の元、Cloudn用にカスタマイズしたものだ。

※なお、冒頭で指定するホスト名とAPIキー、秘密鍵の情報は各環境ごとに異なるので注意が必要だ。

#!/bin/bash
## 編集する個所は以下です ##
# (1) please set your host
# 米国データセンターの場合-> address="https://mycloud2.securesites.com"
# 日本データセンターの場合-> address="https://mycloud3.securesites.com"
address="https://mycloud3.securesites.com"
# (2) please set your api key
# hogehogeの部分にAPIキーを記入してください
api_key="hogehoge"
# (3) please set your secret key
# hogehogeの部分に秘密鍵を記入してください
secret_key="hogehoge"
## 編集する個所は以上です ##
api_path="/client/api?"
if [ $# -lt 1 ]; then
echo "usage: $0 command=... paramter=... parameter=..."; exit; elif [[ $1 != "command="* ]]; then
echo "usage: $0 command=... paramter=... parameter=..."; exit; elif [ $1 == "command=" ]; then
echo "usage: $0 command=... paramter=... parameter=..."; exit; fi
data_array=("$@" "apikey=${api_key}")
temp1=$(echo -n ${data_array[@]} | \
tr " " "\n" | \
sort -fd -t'=' | \
perl -pe's/([^-_.~A-Za-z0-9=\s])/sprintf("%%%02X", ord($1))/seg'| \
tr "A-Z" "a-z" | \
tr "\n" "&" )
signature=$(echo -n ${temp1[@]})
signature=${signature%&}
signature=$(echo -n $signature | \
openssl sha1 -binary -hmac $secret_key | \
openssl base64 )
signature=$(echo -n $signature | \
perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg')
url=${address}${api_path}$(echo -n $@ | tr " “ "&")"&"apikey=$api_key"&"signature=$signature
echo " SEND URL: $url"
curl -k ${url} | xmllint --format -

 このシェルスクリプトを「kick_api.sh」として保存する。後は、以下のようにkick_api.shにAPIのコマンド名とパラメータを与えて呼び出すだけで、自動的にCloudStack APIの呼び出しを実行してくれる。

$ kick_api.sh command=startVirtualMachine id= [VMのID] 

仮想サーバのバックアップタスクをスクリプトで自動化

 では、上記で作成したkick_api.shを使って実際にCloudStack APIを呼び出し、仮想サーバのバックアップ処理を行ってみる。恐らく、クラウド環境の運用管理においては、最も自動化のニーズが高いオペレーションの1つだろう。


図2  CloudnのAPIを使ったバックアップの手順(CloudnのWebサイトから引用)

 まずは、バックアップ元の仮想サーバをいったん停止する。ここで呼び出すべきAPIは「stopVirtualMachine」だ。

$ kick_api.sh command=stopVirtualMachine id=[VMのID]

 次に、停止した仮想サーバのスナップショットを作成する。ここでは「createSnapshot」を呼び出す。

$ ./kick_api.sh command=createSnapshot volumeid=[作成元のROOT Disk ID]

 ここまでで、バックアップの取得は完了だ。

 ちなみに、先ほど取得したバックアップから新たに仮想サーバを複製するには、APIを通じて下記を実行する。まず、作成したSnapshotからTemplateを作成する。ここでは「createTemplate」を呼び出す。

$ ./kick_api.sh command=createTemplate displaytext=[Templateの表示名] name=[Templateの名前] ostypeid=[TemplateのOSタイプのID] snapshotid=[作成元のSnapshot ID]

 最後に、作成したTemplateを元に仮想サーバを作成する。ここで利用するAPIは「deployVirtualMachine」だ。

$ kick_api.sh command=deployVirtualMachine serviceofferingid=[サービススペックのID] templateid=[Template(複製元)のID] zoneid=1 displayname=[VMの表示名]

 この一連のAPI呼び出しをひとまとめにして実行すれば、仮想サーバのバックアップに必要な処理をすべて自動化でき、さらにそれをcronに登録すれば、日々の定期バックアップ処理を完全に自動化できる。

仮想サーバのスケールアップ・スケールダウンを自動化

 次に、特定の仮想サーバのスペックをアップ/ダウンさせる処理を、API呼び出しで実行してみよう。ここでも先ほどと同じく、kick_api.shを使って順次必要なAPIを呼び出していく。

 Cloudnでは、仮想サーバのスペックは、提供する料金プランで変わる。例えば、0.25CPUでメモリが0.5Gbytesのプラン「vQ」から1CPUでメモリが2Gbytesのプラン「v1」に変えるなどだ。これも以下のようにコマンドからAPIを呼び出して変更できる。

 まず、スペックをアップ/ダウンを実行前に、仮想サーバを停止するAPIを実行する。

$ kick_api.sh command=stopVirtualMachine id=[VMのID]

 次に、スペックのアップ/ダウンを実行するという具合だ。

$ ./kick_api.sh command=changeServiceForVirtualMachine id=[VMのID] serviceofferingid=[サービススペックのID]

ネットワーク設定

 ファイアウォールやポート転送など、ネットワークの設定を行うこともできる。いずれも標準搭載で、無料だ。例えば、ファイアウォールの設定を行うには、以下のコマンドを実行する。

$ ./kick_api.sh command=createFirewallRule ipaddressid=[GlobalIPのID]
protocol=[プロトコルの選択] startport=[許可する開始ポート番号] endport=[許可する終了ポート番号]

 ポート転送の設定は、以下のコマンドだ。

$ ./kick_api.sh command=createPortForwardingRule ipaddressid=[GlobalIPのID] privateport=[VM自身のポート番号] protocol=tcp publicport=[ユーザーがアクセスするポート番号] virtualmachineid=[VMのID]

処理負荷に応じてロードバランサの設定を自動変更

 最後に、ロードバランサの設定変更処理を、APIを通じて実行するプログラミング例を紹介しよう。ロードバランサも標準搭載で、無料で提供されている。

 まずは、ロードバランサのルールを作成する。アルゴリズムは、ラウンドロビン、リーストコネクション、ソースIPハッシングから選択できる。

$ ./kick_api.sh command=createLoadBalancerRule publicipid=[GlobalIPのID] algorithm=[アルゴリズムの選択] name=[ロードバランサの名前] privateport=[VM自身のポート番号] publicport=[ユーザーがアクセスするポート番号]

 ロードバランサのID確認は、以下のコマンドで行う。

$ ./kick_api.sh command=listLoadBalancerRules

 ロードバランサとVMの紐付けは、以下のコマンドで行う。

$ ./kick_api.sh command=assignToLoadBalancerRule id=[上記で確認したロードバランサのID] virtualmachineids=[VMのID]

 以上で示したのは、CloudStack APIを使ったCloudnの運用自動化・効率化の「ほんの一例」だ。CloudStack APIは実に広範な機能をカバーしており、一般的な運用オペレーションの範囲であれば、ほぼすべてのことがAPIを通じてプログラミング可能になっている。

PaaSやAWS互換のRDBサービスも新たに登場

 ここまで、Cloudnの大きな特徴の1つであるCloudStack APIを使ったプログラミングについて簡単に紹介してきたが、実はCloudnにはほかにも、開発者にとって興味深い機能が数多く備わっている。

Amazon S3互換のオブジェクトストレージサービスも

 例えば、オブジェクトストレージサービス「Bizホスティング Cloudn Object Storage」には、Amazon S3と互換性のあるAPIが実装されている。Amazon S3上で構築した既存資産を、ほぼそのままの形で移管できるのはもちろんのこと、Amazon S3上での開発で培ったスキルを、そのまま生かしながら新規システムの構築を行えるようになっている。

AWS互換のロードバランサ自動スケーリング、DNS、モニタリング機能などが追加

 また、2012年3月末に予定されているCloudnのアップデートでは、ロードバランサの自動スケーリング機能「Load Balancer Advance」やDNS機能、物理ゾーンを選択できる機能「Facility Redundancy Zone」、リソースのモニタリング機能などが新たにサービスメニューに加わる。


図3 今後の拡張機能のイメージ

 そして、そのほぼすべてに、Amazon Web Services(以下、AWS)と互換性のあるインターフェイスが備わる予定だ。例えば、ロードバランサに関してはAWSの「Elastic Load Balancing」(ELB)、DNSに関しては「Amazon Route 53」、モニタリングは「Amazon CloudWatch」といった具合だ。

 これにより、AWS上で構築したソフトウェア資産は、ほとんど手を加えることなくCloudn上に移管可能になる。もちろん、新規にCloudn上でシステムを構築する際にも、AWSの扱いに慣れた管理者や開発者なら、既存スキルをそのまま生かすことができる。

Amazon RDS互換のリレーショナルデータベースサービス

 特に、業務アプリケーションの開発者にとって心強いのは、リレーショナルデータベースサービス「Bizホスティング Cloudn RDB」が新たにサービスメニューに加わったことだろう。

 これは、まさにリレーショナルデータベースの機能をパブリッククラウドサービスとして提供するもので、異なるゾーン間でデータを自動で複製することによって高稼働率を実現している。また、堅牢性「99.999999999%」のCloudn Object Storageに定期的にデータを自動保存することにより、高レベルなデータの堅牢性も実現している。

 そして、このCloudn RDBに関しても、やはりAWSのリレーショナルデータベースサービス「Amazon RDS」と互換性のあるインターフェイスを実装しているのだ。

オープンソースの「Cloud Foundry」ベースのPaaSサービス

 さらには、開発者にとって最大のトピックとも言うべきアップデートが、PaaSサービス「Bizホスティング Cloudn PaaS」の登場だ。Cloudn PaaSのベースとなっているのは、ヴイエムウェアが中心となって開発しているオープンソースのPaaSソフトウェア「Cloud Foundry」。

 実はNTTコミュニケーションズは、日本国内におけるCloud Foundryコミュニティの旗振り役を務めており、国内屈指の技術ノウハウを有している。今回のCloudnのアップデートでは、このノウハウを最大限生かしながら、満を持してPaaSサービスの提供を開始することになったのだ。

 Cloud Foundryの細かい仕様については、ここでそのすべてを紹介することはできないが、JavaやPHP、Ruby、Pythonなど幅広い開発言語をサポートするほか、MySQLやPostgreSQL、MongoDBといった数多くのデータベースやミドルウェアに対応しており、将来的にPaaSの業界標準を担う技術として広く期待を集めている。インフラに関する部分はすべてCloud Foundryのアプリケーション実行基盤が担うため、開発者は普段使い慣れた開発言語やミドルウェアによるアプリケーション開発に集中できるようになる。

 以上で見てきたように、オープンソース技術や業界標準技術を幅広く取り込みながら、開発者にとってより身近なクラウドサービスへと進化を続けるCloudn。今後も、開発者にとって興味深いさまざまなサービスのリリースを予定しているということなので、開発者、運用管理者に限らず、クラウドにかかわるあらゆる技術者にとって目が離せない存在となりそうだ。

Copyright © ITmedia, Inc. All Rights Reserved.


提供:エヌ・ティ・ティ・コミュニケーションズ株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2013年4月10日

ページトップに戻る