12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenStack Heatを使ってインスタンスを一つ生成する

Last updated at Posted at 2015-10-14

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テンプレートの作成

test-statck.yml
# 必須。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 |
+--------------------------------------+----------------------+--------+------------+-------------+----------------------+
12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?