SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所

オープンソースのクラウド基盤「OpenStack」で試すクラウドオーケストレーション~環境構築からスタックの作成まで

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所 第15回

Heatテンプレートの準備

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

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

parametersセクション

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

parameters:
(中略)
  private_net_name:  #パラメータのID
    type: string
    description: Name of private network to be created
    default: private  #デフォルト値
 
  private_net_cidr:
    type: string
    description: Private network address (CIDR notation)
    default: 10.0.0.0/24
(中略)
  db_username:
    type: string
    description: The WordPress database admin account username
    default: admin
    hidden: true  #ダッシュボードのスタック管理画面でパラメータの値を表示させない
    constraints:  #パラメータの制約
      - length: { min: 1, max: 16 }
        description: db_username must be between 1 and 16 characters
      - allowed_pattern: '[a-zA-Z][a-zA-Z0-9]*'
        description: >
          db_username must begin with a letter and contain only alphanumeric
          characters
 
  db_password:
    type: string
    description: The WordPress database admin account password
    default: admin
    hidden: true
    constraints:
      - length: { min: 1, max: 41 }
        description: db_password must be between 1 and 41 characters
      - allowed_pattern: '[a-zA-Z0-9]*'
        description: db_password must contain only alphanumeric characters

resourcesセクション

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

resources:
  private_net:  #リソースを特定するためのID
    type: OS::Neutron::Net  #リソースのタイプ
    properties:  #リソースのプロパティ
      name: { get_param: private_net_name }  #パラメータ「private_net_name」を参照
(中略)
  router_interface:
    type: OS::Neutron::RouterInterface
    depends_on: [ router, private_subnet ]
    properties:
      router_id: { get_resource: router }  #リソースID「router」を参照
      subnet_id: { get_resource: private_subnet }  #リソースID「private_subnet」を参照

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

database_server:
  type: OS::Nova::Server
  depends_on: database_server_port
  properties:
    image: { get_param: image_id }
    flavor: { get_param: instance_type }
    key_name: { get_param: key_name }
    networks:
      - port: { get_resource: database_server_port }
    user_data:  #インスタンス起動時に実行されるスクリプトを記述
      str_replace:  #templateの内容をpramsで指定した値に置換する
        template: |
          #!/bin/bash -v

          yum -y clean all
          yum -y install mariadb mariadb-server
          touch /var/log/mariadb/mariadb.log
          chown mysql.mysql /var/log/mariadb/mariadb.log
          systemctl start mariadb.service

          # Setup MySQL root password and create a user
          mysqladmin -u root password db_rootpassword
          cat << EOF | mysql -u root --password=db_rootpassword
          CREATE DATABASE db_name;
          GRANT ALL PRIVILEGES ON db_name.* TO "db_user"@"%"
          IDENTIFIED BY "db_password";
          FLUSH PRIVILEGES;
          EXIT
          EOF
        params:
          db_rootpassword: { get_param: db_root_password }
          db_name: { get_param: db_name }
          db_user: { get_param: db_username }
          db_password: { get_param: db_password }

outputsセクション

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

outputs:
  website_url:
    description: URL for Wordpress wiki
    value:
      str_replace:
        template: http://host/wordpress
        params:
          host: { get_attr: [web_server_floating_ip, floating_ip_address] }
注記

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

次のページ
スタックの作成

この記事は参考になりましたか?

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所連載記事一覧

もっと読む

この記事の著者

冨永 善視(TIS株式会社)(トミナガ ヨシミ)

TIS株式会社 戦略技術センター所属。デザイン指向クラウドオーケストレーションソフトウェア「CloudConductor」の開発およびクラウド関連技術の調査・検証に従事。新人の頃からOpenStack環境の構築を担当し、IaaS管理者として経験を積む。最近ではRedHatのエキスパート認定―Infr...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7897 2014/07/24 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー