22
Copyright © 2016 NTT DATA Corporation 2016/7/20 NTTデータ 公共・社会基盤事業推進部 プロジェクト推進統括 技術戦略担当 横山 浩輔 Hieraテクニック パラメータシートマニフェスト生成の紹介 Web公開向け資料

Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

  • Upload
    puppet

  • View
    419

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

Copyright © 2016 NTT DATA Corporation

2016/7/20 NTTデータ 公共・社会基盤事業推進部 プロジェクト推進統括 技術戦略担当 横山 浩輔

Hieraテクニック

パラメータシート⇒マニフェスト生成の紹介

Web公開向け資料

Page 2: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

2 Copyright © 2016 NTT DATA Corporation

目次

1. 自己紹介

2. システム構成と自動化背景 公共系の大規模社会インフラシステム(合計200台規模)

台数、面数が多い

パラメータシートの変更時に手作業での修正箇所が多い

3. パラメータシート⇒マニフェスト生成の仕組み • Hieraとは

• パラメータシート⇒マニフェスト生成の実現方法

Puppet資材構成

ExcelマクロでHiera値(yaml)生成

• 変更への対応パターン

4. まとめ

Page 3: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

Copyright © 2016 NTT DATA Corporation 3

1.自己紹介

Page 4: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

4 Copyright © 2016 NTT DATA Corporation

自己紹介

名前:横山 浩輔

所属:株式会社 NTTデータ

公共・社会基盤事業推進部 プロジェクト推進統括 技術戦略担当

略歴:

オープン系システム基盤の技術支援に従事

現在、公共系の大規模社会インフラシステム(200台規模)でのPuppetやServerspecをメインで担当(過去には法人系の大規模HadoopシステムのPuppetも)

過去にNagiosでのHadoopシステムの監視・運用、Nicira(Vmware NSX前身)の動作検証等も担当

プライベートは弓道家(参段、2年目)、最近は新型アルトワークス(MT、赤) 乗り回したりしてます。

Page 5: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

Copyright © 2016 NTT DATA Corporation 5

2.システム構成と自動化背景

Page 6: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

6 Copyright © 2016 NTT DATA Corporation

担当システム規模、構成

サブシステム数:6 論理ノード(物理):100台

クラスタ構成あり

お客様用本番環境面

サブシステム数:5 論理ノード(仮想):60台

クラスタ構成なし

単体試験等実施用の環境

サブシステム数:6 論理ノード(仮想):60台

クラスタ構成あり

結合試験等実施用の環境

本番環境 開発環境B面 開発環境A面 本番環境 追加構築予定(5面)

⇒台数、面数が多く、Puppetでの管理に適したシステム構成

お客様 自社

Page 7: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

7 Copyright © 2016 NTT DATA Corporation

Puppet導入検討

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

手動

Puppet導入

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

手動

マニフェスト(本)

マニフェスト(A)

マニフェスト(B)

Puppet

設定ファイル(本)

設定ファイル(A)

設定ファイル(B)

手動配布

Puppetで改善 現場での作業効率と品質が向上

要改善 修正頻度や修正箇所が多いため自動化したい

○ ×

× ×

Page 8: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

8 Copyright © 2016 NTT DATA Corporation

Hiera機能で処理と値を分離 (Hiera機能は次ページから説明)

更にパラメーターシートからマニフェストを自動生成したい

Puppet導入検討

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

手動

マニフェスト(本)

マニフェスト(A)

マニフェスト(B)

Puppet

値を分離する事でパラシ から生成しやすい形に

値 処理

値+処理

× ○

○ パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

Excelマクロ

yaml(本)

yaml(A)

yaml(B)

マニフェスト(本)

マニフェスト(A)

マニフェスト(B)

Puppet

Page 9: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

Copyright © 2016 NTT DATA Corporation 9

3.パラメータシート⇒マニフェスト生成の仕組み

Page 10: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

10 Copyright © 2016 NTT DATA Corporation

Hieraとは – Hiera機能の特徴

Hieraとは…

① Puppetマニフェストの「値」と「処理」の分離を実現可能

「値」はyamlに変数(key)と値(value)の対応を定義するだけ

② 「値」の読み込みなどはPuppetが自動で行う為、導入に伴う処理の追加等は不要 (automatic parameter lookup)

③ ノード定義が簡潔に記述可能(hiera_include)

⇒次ページから例を示します

Page 11: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

11 Copyright © 2016 NTT DATA Corporation

Hieraなしのマニフェスト、ノード構成

Hieraとは – Hiera機能の利用例

node1

Tomcat Xmx:2g Xms:2g

node2

Tomcat Xmx:4g Xms:4g

node3

Tomcat Xmx:8g Xms:8g

#site.pp node node1 { class{ ‘tomcat’ : xmx => “2g”, xms => “2g”, } } node node2 { class{ ‘tomcat’ : xmx => “4g”, xms => “4g”, } } node node3 { class{ ‘tomcat’ : xmx => “8g”, xms => “8g”, } }

Page 12: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

12 Copyright © 2016 NTT DATA Corporation

前頁のマニフェストをHiera化

Hieraとは – Hiera機能の利用例

#common.yaml classes: - tomcat

#node1.yaml tomcat::xmx:2g tomcat::xms:2g

#site.pp node default { hiera_include('classes') }

#node2.yaml tomcat::xmx:4g tomcat::xms:4g

#node3.yaml tomcat::xmx:8g tomcat::xms:8g

#site.pp node node1 { class{ ‘tomcat’ : xmx => “2g”, xms => “2g”, } } node node2 { class{ ‘tomcat’ : xmx => “4g”, xms => “4g”, } } node node3 { class{ ‘tomcat’ : xmx => “8g”, xms => “8g”, } }

③ノード定義が簡潔に (hiera_include)

before after

①マニフェストの 処理と値を分離

②マニフェストへの処理追記は不要、yamlでの「値」定義のみ #hiera()関数でマニフェストの対応箇所に明示することも可能

(automatic parameter lookup)

Page 13: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

13 Copyright © 2016 NTT DATA Corporation

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

yaml(本)

yaml(A)

yaml(B)

マニフェスト(本)

マニフェスト(A)

マニフェスト(B)

Puppet

②: Hiera値(yaml)生成 Excelマクロでyamlファイルを生成

Excelマクロ

①:Puppet資材構成 自動生成したyamlを組み込む為に、Puppet資

材構成、マニフェストを変更

パラメータシート⇒マニフェスト生成の実現方法

Page 14: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

14 Copyright © 2016 NTT DATA Corporation

・yaml格納ディレクトリ構成とsite.ppの書き方

#site.pp node default { hiera_include('classes') }

/etc/puppet/hieradata/

tomcat

os

apache

postgresql

Hiera呼び出しの定義のみ記述 モジュール間の依存関係、順序性が存在する場合にはここに定義

node2 .yaml

node1. yaml

担当者やパラメータシートが製品(モジュール)ごとに分かれるため、yaml配置ディレクトリもモジュール単位で分割

・・・

パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成

Page 15: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

15 Copyright © 2016 NTT DATA Corporation

#node1.yaml classes: -tomcat tomcat::params::conf_server_xml_flag:on tomcat::params::conf_server_xml_http_port: 8080 tomcat::params::bin_catalina_sh_flag:on tomcat::params::bin_catalina_sh_xms: 1g tomcat::params::install_tomcat6: true

・モジュール内マニフェストの書き方(tomcatのinstall.pp例)

※本来、マニフェストのコーディングスタイルとしてif文は可能な限り使わずクラスを分割する事が望ましい

class tomcat::install ( install_tomcat6 = tomcat::params::install_tomcat6, install_tomcat8 = tomcat::params::install_tomcat8, ) { if install_tomcat6 { package { ‘tomcat6’ : ensure => latest, } } if install_tomcat8 { package { ‘tomcat8’ : ensure => latest, } } }

install_tomcat6の フラグがtrueの時のみリソースが動作

パラメータシートの構成上、マニフェストを統合し数を減らす必要があり、1つのマニフェスト内でノード間差分を表す方法としてif文を利用

パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成

install_tomcat8の フラグがtrueの時のみリソースが動作

Page 16: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

16 Copyright © 2016 NTT DATA Corporation

#node1.yaml classes: -tomcat tomcat::params::conf_server_xml_flag:on tomcat::params::conf_server_xml_http_port: 8080 tomcat::params::bin_catalina_sh_flag:on tomcat::params::bin_catalina_sh_xms: 1g tomcat::params::install_tomcat6: true

・モジュール内マニフェストの書き方(tomcatのconfig.ppとserver.xml.erb例示)

※本来、マニフェストのコーディングスタイルとしてif文は可能な限り使わずクラスを分割する事が望ましい

class tomcat::config ( conf_server_xml_flag = tomcat::params::conf_server_xml_flag, conf_server_xml_xmx = tomcat::params::conf_server_xml_xmx, conf_server_xml_xms = tomcat::params::conf_server_xml_xms, conf_server_xml_http_port = tomcat::params::conf_server_xml_http_port, (中略) ) { if conf_server_xml_flag { file { ‘/opt/tomcat6/conf/server.xml’ : ensure => file, content => template(“tomcat/server.xml.erb"), owner => “tomcat", group => “tomcat", mode => 600, } } (中略) }

#server.xml.erb (中略) <Connector port="<%= @ tomcat::params::conf_server_xml_http_port %>" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> (中略)

conf_server_xml_flagのフラグがonの時のみリソースが動作

パラメータ値

パラメータシートの構成上、マニフェストを統合し数を減らす必要があり、1つのマニフェスト内でノード間差分を表す方法としてif文を利用

パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成

Page 17: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

17 Copyright © 2016 NTT DATA Corporation

・モジュール内マニフェストの書き方(tomcatのparams.pp例示)

※本来、paramsクラスはOS毎のデフォルト値を定義する用途で利用するのが一般的

class tomcat::params ( conf_server_xml_flag = “”, conf_server_xml_http_port = “”, : bin_catalina_sh_flag = “”, bin_catalina_sh_xms = “”, : install_tomcat6 = “”, install_tomcat8 = “”, ) {}

モジュール毎にyamlから値を一括で受け取る為の変数郡を定義 (デフォルト値はyamlに自動で含まれるため、params.ppは全値が空)

#node1.yaml classes: -tomcat tomcat::params::conf_server_xml_flag:on tomcat::params::conf_server_xml_http_port: 8080 tomcat::params::bin_catalina_sh_flag:on tomcat::params::bin_catalina_sh_xms: 1g tomcat::params::install_tomcat6: true

パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成

Page 18: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

18 Copyright © 2016 NTT DATA Corporation

パラメータシート : tomcat

yaml生成の例

「パッケージ」シート ノード名

パッケージ名 node1 node2 node3

tomcat6 ◎ ◎ -

tomcat8 - - ◎

#node1.yaml classes: -tomcat tomcat::params::conf_server_xml_flag:on tomcat::params::conf_server_xml_http_port: 8080 : tomcat::params::bin_catalina_sh_xms: 1g tomcat::params::install_tomcat6: true

#node2.yaml classes: -tomcat tomcat::params::conf_server_xml_flag:on tomcat::params::conf_server_xml_http_port: 8081 : tomcat::params::bin_catalina_sh_xms: 4g tomcat::params::install_tomcat6: true

#node3.yaml classes: -tomcat tomcat::params::install_tomcat8: true

yaml化

パラメータシート⇒マニフェスト生成の実現方法 -②Hiera値(yaml生成)

「server.xml」シート ノード名

パラメータ名 デフォルト値 node1 node2 node3

http_port 8080 デフォルト 8081 -

-

-

-

-

-

「catalina.sh」シート ノード名

パラメータ名 デフォルト値 node1 node2 node3

-Xmx - 2g 4g -

-Xms - 2g 4g -

: :

-XX:NewSize - 1g 1g -

Page 19: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

19 Copyright © 2016 NTT DATA Corporation

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

Excel マクロ

yaml(本)

yaml(A)

yaml(B)

マニフェスト(本)

マニフェスト(A)

マニフェスト(B)

Puppet

②新規パラメータ定義の追加の場合 モジュールのマニフェスト(config.pp、params.pp、テンプレートファイル)に変数を追加

①既存パラメータの値変更の場合 資材編集は不要(yaml差し替のみ必要)

変更への対応パターン

「catalina.sh」シート ノード名

パラメータ名 デフォルト値 node1 node2 node3

-Xmx - 2g 4g -

-Xms - 2g 4g

⇒8g -

「catalina.sh」シート ノード名

パラメータ名 デフォルト値 node1 node2 node3

-Xmx - 2g 4g -

-Xms - 2g 4g -

-XX:NewSize - 1g 1g -

③設定ファイルなどの追加(シートの追加) モジュールのマニフェスト(config.pp、params.pp)にリソースと変数を追加

④PPの追加(ブックの追加) モジュール(マニフェスト、テンプレート等)を新規作成

どの様な場合もマクロ側の変更は不要

従来の自動化ツールと同様にモジュールを編集すればOK

Page 20: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

Copyright © 2016 NTT DATA Corporation 20

まとめ

Page 21: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

21 Copyright © 2016 NTT DATA Corporation

パラメータシートの値を変えただけでその変更を自動で取り込める様になった⇒手動転記によるミスが発生しなくなった

まとめ

Hiera、マクロ導入

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

手動

マニフェスト(本)

マニフェスト(A)

マニフェスト(B)

Puppet

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

Excel マクロ

yaml(本)

yaml(A)

yaml(B)

マニフェスト(本)

マニフェスト(A)

マニフェスト(B)

Puppet

Puppet導入

パラメータシート(本)

パラメータシート(A)

パラメータシート(B)

手動

設定ファイル(本)

設定ファイル(A)

設定ファイル(B)

手動配布

× ×

○ ×

○ ○

ミス有 ミス有

ミス有 ミス無

ミス無 ミス無

Page 22: Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ

Copyright © 2011 NTT DATA Corporation

Copyright © 2016 NTT DATA Corporation