PR

 今回は、ゲストOSを自動インストールした後に、Puppetを利用してアプリケーションの導入・設定を自動化する方法を紹介します。

Puppetの基礎

 アプリケーションの導入・設定を自動化する手法として、導入時に実行する個々のコマンドをシェルスクリプトに記述する方法が考えられます。ただし、この方法には、不便な点もあります。

 例えば、導入対象サーバーのLinuxディストリビューションや、そのバージョンによって、実行するコマンドが異なることがあります。複数のディストリビューションやバージョンに対応するには、スクリプト内部で条件判断を行うか、もしくは、複数のスクリプトを用意することになります。

 一方、Puppetでは、具体的なコマンドを記述する代わりに、「マニフェスト」と呼ばれる設定ファイルで、そのサーバーの「あるべき状態」を宣言します。次は、この後で実際に利用する、PostgreSQLを導入するマニフェスト「main.pp」の一部です。

import 'variables.pp'

class pgsql {
  service { 'postgresql':
    name      => 'postgresql',
    enable    => true,
    subscribe => Package['postgresql-server'],
  }

  package { 'postgresql-server':
    name   => 'postgresql-server',
    ensure => installed,
  }   

  file { '/var/lib/pgsql/data/postgresql.conf':
    owner   => 'postgres',
    group   => 'postgres',
    mode    => '0600',
    source  => "$manifest_dir/dist/postgresql.conf",
    notify  => Service['postgresql'],
    require => Exec['initdb'],
  }
(以下省略)

 マニフェストの全体は、筆者が用意したGitHubのリポジトリーから参照できます。この内容を見ると、「service」「package」「file」など、いくつかのセクションに分かれていますが、これらは、Puppet用語で「リソース」と呼ばれます。

 例えば、serviceリソースには、「このサーバーではpostgresqlサービスが有効化されていること」という指示が記載されており、その前提として「postgresql-serverパッケージが入っていること」という条件付けがなされています。fileリソースでは、指定のディレクトリーに、事前に用意した設定ファイルを配置するという指示があり、その前後に実行するべき処理が指示されています。

 表1には、このマニフェストで使用されているリソースの簡単な説明をまとめてあります。

表1●マニフェストに記載されたリソースの説明
リソース
説明
service
サービスの状態を設定する
(postgresqlサービスの自動起動を設定)
package
パッケージを導入する
(postgresql-serverパッケージを導入)
file
ファイルを配置する
(PostgreSQLの設定ファイルを用意)
exec
コマンドを実行する
(データベースの初期化とパスワード設定を実施)