Tech Sketch Bucket of Technical Chips by TIS Inc.

OpenStackのオーケストレーションサービス「Heat」を使ってみる

Pocket

前回の記事 ではOpenStack IcehouseのAll-In-One環境を構築しました。今回は、OpenStackのオーケストレーションサービスである「Heat」を使って、OpenStack上にWordPressを構築してみます。


クラウドオーケストレーションとは

クラウド上のシステムを効率的に運用管理する方法として、クラウドオーケストレーションが注目されています。クラウドオーケストレーションとは、クラウド上のリソース配置やシステム構成を定義し、システムの構築・運用を自動化する仕組みです。AWSでは CloudFormation 、OpenStackでは Heat といったオーケストレーションサービスが提供されており、国内でもSCSKの PrimeCloud Controller や弊社(TIS)の CloudConductor といったオーケストレーションソフトウェアがOSSとして公開されています。クラウドオーケストレーションについては、Tech-Sketchの記事 クラウドオーケストレーションとCloudConductor で詳しく紹介しています。今回は、OpenStackのオーケストレーションサービス「Heat」について紹介します。

Heatの概要

HeatはOpenStackのオーケストレーションサービスで、システム構成を定義したテンプレートファイルを用意することでOpenStack上にシステムを自動構築することできます。Heatでは、テンプレートで定義されたシステム構成をひとまとめにしてスタックと呼び、インスタンスやネットワークといったスタックの構成要素をリソースと呼んでいます。
HeatはAWS CloudFormationとの互換性を意識して開発されており、テンプレートは HOT形式 またはAWS CloudFormation互換の CFNテンプレート形式 で記述できます。また、リソースにも互換性があり、AWS CloudFomation用に作成されたテンプレートを最小限の変更で利用することができます。
その他、AWS CloudFormationと同様に以下のような特徴があります。

  • リソースの依存関係を記述できるので、「先にサーバを起動してからボリュームを接続する」といった構築の順序関係を制御できます。
  • PuppetやChefといった構成管理ツールと連携することで、インスタンス内部の設定変更やミドルウェアのインストールなども自動化できます。
  • テンプレートを変更して再度適用すると、差分を検出してスタックの構成を変更できます。
  • テンプレートの中で他のテンプレートを呼び出せるため、複数のテンプレートを組み合わせた構築が可能です。
  • OpenStackのメータリングサービスであるCeilometerと連携することでオートスケールを実現できます。

Heatを使ってみる

前回の記事 で構築したIcehouse版のAll-In-One環境に、Heatを使って WordPress を構築してみます。事前に、OpenStackのダッシュボードにadminユーザでログインし、画面左のメニューから[管理]-[システムパネル]-[システム情報]に移動して、Heatサービスが有効になっていることを確認しておきます。

OpenStack環境の事前準備

デフォルトネットワークの削除

OpenStackをPackStackのデフォルト設定で構築した場合は、デモ用のネットワークが構築されています(AnswerFileにCONFIG_PROVISION_DEMO=nを設定した場合はデモ環境は構築されません)。残しておいても影響はないのですが、混乱を防ぐために事前に削除しておきます。
メニューから[管理]-[システムパネル]-[ルーター]に移動し、デフォルトで作成されているルータ(router1)を削除します。同様に、[管理]-[システムパネル]-[ネットワーク]に移動し、デフォルトで作成されている外部ネットワーク(public)を削除します。ルータを削除してからでないとネットワークを削除できないため注意が必要です。

外部ネットワークの作成

インスタンスがインターネットに接続するための外部ネットワークを作成します。画面左のメニューから[プロジェクト]-[ネットワーク]-[ネットワーク]に移動し、「ネットワークの作成」を選択します。新規ネットワーク作成のウィザードが表示されるので、以下のようにネットワークを作成します。

  • ネットワーク名:public
  • サブネット名:public_subnet
  • ネットワークアドレス:192.168.0.0/24 (OpenStackサーバのbr-exに設定したネットワークを指定します。)
  • ゲートウェイIP:192.168.0.254 (上記ネットワークのゲートウェイのアドレスを指定します。)
  • IPアドレス割り当てプール:192.168.0.100,192.168.0.120 (FloatingIPとして割り当てるIPアドレスの範囲を指定します。)

作成したネットワークを外部ネットワークに指定するには、メニューから[管理]-[システムパネル]-[ネットワーク]に移動し、作成したネットワークの「ネットワークの編集」を選択して、「外部ネットワーク」にチェックを入れます。

create-public-network.jpg

コマンドラインから外部ネットワークを作成する場合は、以下を実行します。

マシンイメージの登録

公開されているJeOSイメージを登録します。メニューから[プロジェクト]-[コンピュート]-[イメージ]に移動し、イメージの作成を選択して、以下のようにマシンイメージを作成します。

  • 名前:fedora-20.x86_64
  • イメージの場所:http://cloud.fedoraproject.org/fedora-20.x86_64.qcow2
  • 形式:QCOW2

create-image.jpg

コマンドラインからキーペアを登録する場合は、以下を実行します。

キーペアの登録

インスタンスにSSH接続するためのキーペアを登録します。メニューから[プロジェクト]-[コンピュート]-[アクセスとセキュリティ]に移動し、「キーペア」タグを選択します。「キーペアのインポート」を選択し、クライアントの公開鍵を登録します。鍵を持っていない場合は、「キーペアの作成」から鍵を作成することもできます。

create-user-key.jpg

コマンドラインからマシンイメージを登録する場合は、以下を実行します。

テンプレートファイルの準備

[プロジェクト]-[ネットワーク]-[ネットワークトポロジー]に移動すると、外部ネットワークだけが存在している状態を確認できます。この状態から、Heatを使って以下の図のようなスタックを作成します。

stack-configuration.jpg

このスタックを構築するためのHOT形式のテンプレートを Github で公開しています。このテンプレートは Githubのopenstack/heat-templates で公開されているサンプルテンプレートを参考に作成したものです。テンプレートに記述する内容については 公式のテンプレートガイド に詳しく記載されています。ここでは、今回使用するテンプレートについていくつか解説します。

parametersセクション

スタック作成時にユーザが指定できるパラメータを記述します。キーペアやイメージのIDなど、ユーザごとに指定する必要があるパラメータを記述しておきます。また、デフォルト値を設定しておくこともできます。今回のテンプレートでは、内部ネットワークのアドレスやDBのユーザ名、パスワードなどを指定できるようにしています。

resourcesセクション

作成するリソースのタイプやプロパティを定義します。get_param関数やget_resource関数を使用して、パラメータや他のリソースを参照することができます。

インスタンスのuser_dataプロパティには、インスタンス起動時に実行するスクリプトを指定します。以下のDBサーバについての記述では、MySQLのインストールとデータベースの作成を行っています。ここでPuppetやChefを実行できれば、複雑な設定を自動的に行うこともできます。

outputsセクション

スタックを作成したユーザに返す出力を記述します。今回使用するテンプレートでは、構築したWordPressにアクセスするためのURLを返すようにしています。

注記

公式のドキュメントによると、OS::Neutron::FloatingIPリソースにおいて、FloationgIPを払い出すネットワークを指定する際は floating_networkプロパティを使用する よう記載されています。しかし、 Icehouse版のソースコード ではfloating_network_idプロパティの指定が必須であるため、今回のテンプレートではfloating_network_idを使用しています。したがって、パラメータ「public_net」には外部ネットワークのUUIDを指定してください。この問題は最新のソースコードでは修正されているので、今後のアップデートで修正されると考えられます。

スタックの作成

メニューから[プロジェクト]-[オーケストレーション]-[スタック]に移動し、「スタックの起動」を選択します。テンプレートの選択画面とスタックの起動画面が表示されるので、以下のようにパラメータを入力します。

  • テンプレートの選択
    • テンプレートURL:https://raw.githubusercontent.com/tech-sketch/heat_sample_template/master/WordPress_2_instances.yaml
  • スタックの起動
    • スタック名:WordPress(任意)
    • ユーザー "admin" のパスワード:adminユーザのパスワード
    • public_net:作成した外部ネットワークのID
      ネットワークのIDは[プロジェクト]-[ネットワーク]-[ネットワーク]に移動し、作成したネットワークを選択すると確認することができます。
    • key_name:登録したキーペアの名前
    • その他のパラメータは基本的にデフォルトのままで構いません。

create-stack.jpg

スタックの起動画面で「起動」を選択すると、スタックの作成が開始されます。スタックの作成状況は、作成したスタックの詳細画面や[プロジェクト]-[ネットワーク]-[ネットワークトポロジー]で確認できます。今回の環境では5分程で作成が完了しました。
スタックの作成完了後、ネットワークトポロジーを確認すると、スタック構成図の通りにシステムが構築されていることを確認できます。

created-stack-configuration.jpg

コマンドラインからスタックを作成する場合は、以下を実行します。

WordPressへのアクセス

[プロジェクト]-[オーケストレーション]-[スタック]に移動し、作成したスタックを選択するとスタックのトポロジや概要を確認することができます。概要タブを選択し、出力に記載されているURLをクリックすると、構築したWordPressにアクセスすることができます。サイトのタイトルやユーザ名などを適宜設定しインストールすると、WordPressにログインすることができます。

login-wordpress.jpg

スタックの削除

[プロジェクト]-[オーケストレーション]-[スタック]に移動し「スタックの削除」を選択すると、スタックを構成するインスタンスやネットワークをまとめて削除することができます。テンプレートにリソースの依存関係が設定されていないと、インスタンスが残っているネットワークを削除しようとするなど、エラーが発生する場合があります。その場合は、エラーの原因となっているリソースを削除した後、再度スタックの削除を実行します。テンプレートに定義していないインスタンスやFloating IPをネットワークに関連付けるなどした場合も、先にそれらを削除しておく必要があります。

コマンドラインからスタックを削除する場合は、以下を実行します。

おわりに

オーケストレーションサービスを活用することで、システムの構築、更新、削除を簡単に行うことができます。今回のようなシンプルな構成のテンプレートであれば、公開されているサンプルを組み合わせるなどしてある程度簡単に作成できます。一度テンプレートを作ってしまえばテンプレートを共有したり使い回りしたりできる点は、オーケストレーションサービスの大きなメリットであると言えます。

エンジニア採用中!私たちと一緒に働いてみませんか?