1. はじめに
1.1. Heatとは
Heatは、Amazon Web Services(AWS)のCloudFormationをモデルにしたソフトウェアである。システム構成を定義したテンプレートファイルを用意することでOpenStack上にシステムを自動構築することできる。また、Heatを利用してオートスケールを実現することも可能である。
Heatでは、テンプレートで定義されたシステム構成をひとまとめにしてスタックと呼び、インスタンスやネットワークといったスタックの構成要素をリソースと呼ぶ。
テンプレートは HOT形式 またはAWS CloudFormation互換の CFNテンプレート形式 で記述可能であり、リソースにも互換性があり、AWS CloudFomation用に作成されたテンプレートを最小限の変更で利用することができる。
特徴)
-リソースの依存関係を記述できるので、「先にサーバを起動してからボリュームを接続する」といった構築の順序関係を制御可能
-PuppetやChefといった構成管理ツールと連携することで、インスタンス内部の設定変更やミドルウェアのインストールなども自動化
-テンプレートを変更して再度適用すると、差分を検出してスタックの構成を変更可能
-テンプレートの中で他のテンプレートを呼び出せるため、複数のテンプレートを組み合わせた構築が可能
-Ceilometerと連携することでオートスケールを実現可能
1.2. HOT(Heat Orchestration Template)
HOTテンプレートの構造
heat_template_version: 2013-05-23
description: # テンプレートの説明について記述
parameter_groups: # 入力パラメータのグループと順番について記述
parameters: # 入力パラメータについて記述
resources: # リソースのテンプレートについて記述
outputs: # アウトプットパラメータについて記述
2. インストール
Packstackでインストールできるので省略
環境
OS:CenOS7.1
OpenStack:Kilo
3. 1台のインスタンスを生成するシンプルなスタック
1台のインスタンスを生成するテンプレートを作成し、スタックを作成する。
3.1. HOTテンプレートの作成
# 必須。HOTテンプレートのバージョン
heat_template_version: 2014-10-16
# オプション。このテンプレートに対するコメント
description: Heat Sample Template
# パラメータセクション。入力パラメータを定義。
parameters:
ImageID: #パラメータ名
type: string #パラメータタイプ。{string、number、json、comma_delimited_list、boolean}
description: Image used boost server #オプション。コメント。
default: 27af613e-5ab9-41de-b4e2-3966dcca06cd #パラメータを指定しなかった時のデフォルト値
hidden: false #非表示設定。例えばpasswordなどはユーザの問い合わせに対して応答しないよう隠しておいた方がよい。
NetID:
type: string
description: Network ID
default: 71c9dc17-cc66-45c6-9892-f5aecafce27c
constraints #入力可能なパラメータの値を制限
- allowed_value: [71c9dc17-cc66-45c6-9892-f5aecafce27c, 8852f9ca-6a10-42c6-a723-88fbdaed4866] #許可する値
- description: Value must be #コメント
# リソースセクション
resources:
server1: #リソースID。リソースIDはリソースセクションにおいて一意である必要がある。
type: OS::Nova::Server #リソースタイプ。OS::Nova::Server or OS::Neutron::Portなど
properties: #flavorのプロパティ
name: "Heat_Deployed_Server" #サーバ名
image: { get_param: ImageID } #ブートするイメージID
flavor: "m1.small" #ブートするフレイバーのID
networks: #サーバに付加するNICのリスト
- network: { get_param: NetID } #ネットワークID
# アウトプットセクション。カスタマイズされた出力をユーザに提供する。
outputs:
server1_private_ip:
description: IP address of the server
value: { get_attr: [ server1, first_address ] }#設定したIPアドレスの情報を表示。
メモ)リソースセクションで指定したリソースタイプで利用可能なプロパティは以下のサイトを参照。
http://docs.openstack.org/hot-reference/content/openstack-resource-types.html
3.2. heat_stack_ownerの割当
スタックを作成するためには、コマンドを実行するユーザがheat_stack_ownerのロールが割り当てられている必要がある。
[keystone_admin)]# openstack role add –project project1 –user yotsu heat_stack_owner
+-------+----------------------------------+
| Field | Value |
+-------+----------------------------------+
| id | 8d5440bb0e7f46939487061d912fe77a |
| name | heat_stack_owner |
+-------+----------------------------------+
先ほど作成したテンプレートと、パラメータを指定し、スタックを作成する。
# heat stack-create -f test-statck.yml -P "ImageID=27af613e-5ab9-41de-b4e2-3966dcca06cd;NetID=71c9dc17-cc66-45c6-9892-f5aecafce27c" Test-Stack
+--------------------------------------+------------+--------------------+----------------------+
| id | stack_name | stack_status | creation_time |
+--------------------------------------+------------+--------------------+----------------------+
| 565bfbde-bdfd-412c-b2d2-b19428a0a740 | Test-Stack | CREATE_IN_PROGRESS | 2015-07-07T04:45:43Z |
+--------------------------------------+------------+--------------------+----------------------+
作成したスタックのリストを確認
# heat stack-list
+--------------------------------------+------------+-----------------+----------------------+
| id | stack_name | stack_status | creation_time |
+--------------------------------------+------------+-----------------+----------------------+
| 565bfbde-bdfd-412c-b2d2-b19428a0a740 | Test-Stack | CREATE_COMPLETE | 2015-07-07T04:45:43Z |
+--------------------------------------+------------+-----------------+----------------------+
3.4. 動作確認
Heatによってインスタンスが生成されたかどうか確認
# nova list
+--------------------------------------+----------------------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+----------------------+--------+------------+-------------+----------------------+
| 1e1fb7af-4182-4c0a-8f56-c57ac3822482 | Heat_Deployed_Server | ACTIVE | - | Running | private=192.168.1.35 |
+--------------------------------------+----------------------+--------+------------+-------------+----------------------+