※この記事は公開されてから1年半以上経過しています。情報が古い可能性がありますのでご注意ください。
前回はSCALRのオートスケーリング機能をご紹介しました。数ステップの簡単な設定のみでサーバーのスケーリングができるのは便利ですよね。しかし、作成したサーバーそれぞれにアプリケーションのインストールや個別の設定をしたい場合もあるでしょう。その度に各サーバーにログインして設定をするのはやはり手間がかかります。どうせなら面倒な設定作業も楽にしてしまいましょう!
ということで、今回はSCALRのスクリプトを使った構築方法です。
SCALRにはスクリプトの作成、保存、実行機能があります。さらにそれらは全てUI上で実現できます。わざわざサーバーにログインすることなく、しかも複数のサーバーに対して実行することも可能なのです。新規のサーバー1台1台にログインしてスクリプトを走らせる、という面倒なことをする必要はありません。
それでは、早速その使い方を見ていきましょう。
スクリプトの使い方
今回はすでにApacheサーバーが1台起動している状態からスタートします。マシンタイプなどの基本設定以外は特に変更していない状態です。右上のScriptsタブをクリックすると利用可能なスクリプトの一覧が表示されます。自分で作成したスクリプト以外に、あらかじめSCALRが用意しているスクリプトも利用可能です。
スクリプトの内容はActionsのViewをクリックすると確認できます。試しにSVN updateの中身を確認してみましょう。 このように中身はシェルスクリプトになっています。SVN_USER="%svn_user%" のように実行時に引数を指定することも可能です。ActionsのExcuteをクリックするとスクリプト実行の設定画面に移ります。
実行時に必要な設定は以下の通りです。
- Execution target
スクリプトを実行する対象を選択します。対象は特定のサーバー1台でも実行もできますし、Farm単位やRole単位でまとめて実行することも可能です。オートスケーリングをしたWebサーバー全てに対して同じスクリプトを実行するときなどに便利です。
- Execution options
スクリプトの実行設定です。
Scrpt: 実行するスクリプト名
Execution mode: 複数スクリプトの並列実行許可
Timeout: 実行処理のタイムアウト値
Version: 実行するスクリプトのバージョン指定
- Script options
スクリプト内で引数を使用している場合はここで指定します。
- Additional settings
チェックを入れて実行した場合、Role一覧のActionsの中にショートカットが作成され、実行した設定内容が保存されます。同様の実行設定で何度も行うのであれば、ショートカットを利用することで入力の手間を省くことができます。
設定入力後Excuteをクリックすると、対象サーバー内で設定に従ってスクリプトが実行されます。 スクリプト実行によってコンソールに出力されるログは、左上メニューのLogs > Scriptingで確認できます。
新規スクリプトの作成
では実際に簡単なスクリプトの作成と実行をしてみましょう。 今回は「スクリプト実行時に時間とコメントを指定したファイル名で出力」するテストスクリプトを作成します。
新規作成は左上メニューからScriptsの+、もしくは上部Scriptsタブ内の+をクリックします。
まずスクリプトの名前と説明文、Default execution mode(同時実行設定)を指定します。execution mode は複数のスクリプトを実行した時に、前のスクリプトが完了してから次のスクリプトを実行するかどうかです。特に理由がなければ、同時実行による競合状態が発生しないようにSynchronous(前のスクリプトの完了を待つ)を選択しておくのが良いでしょう。
次はスクリプト本文を記述します。
#!/bin/bash echo `date`, %comment% >> %output%
dateとcommentをoutputに出力するだけの短いスクリプトです。 引数を指定する場合は、%comment%のように%で引数名を括ることで実行時に値を指定できます。また、Variablesタブを開くと既に用意されている組込み変数を確認することができます。
これらの変数は実行するサーバーのIDやIPアドレスなど、主に実行対象ごとに決まった値です。実行時に特に値を指定する必要はなく、自動で値が補完されます。組込み変数は自作の引数と同様に本文内で利用することもできます。ログとしてサーバー情報を出力する場合などに利用すると良いでしょう。
記述が完了したらsaveで内容を保存してScriptsタブに戻ります。
作成したスクリプトのActionsからExcuteをクリックし、実行対象とオプションを指定します。今回の対象はFarm名 "narita_script_test" 、Role名 "app-apache64-centos6" のサーバー全てです(1台しかありませんが)。引数はコメント内容(Comment)に "test" 、出力場所(Output)に "/root/output.txt" を指定します。
入力が完了したらExcuteして、実行結果をサーバー一覧画面のコンソールアイコンから確認してみましょう。
# ls output.txt # cat output.txt Mon Aug 19 12:59:11 JST 2013, test
入力通りに時間とコメントが出力されていますね。
このように実行時に引数を変更する指定することが可能なので、処理自体は同じでもサーバーごとに名前や数値を変更したい、という場合に有効です。
スクリプトの編集
自作のスクリプトはActionsのEditから再編集が可能です。内容を更新するとバージョンが1つ挙がって保存されます。編集する前の内容も過去のバージョンとして保存されており、実行時に前のバージョンを選択して実行することも可能です(ただしSCALRに初めから登録されているスクリプトは編集できません)。
また1つのスクリプトを繰り返し更新する以外にも、Fork(分岐)させて別のスクリプトとして保存することもできます(上書き保存ではなく、別名で保存するイメージです)。ベースとなるスクリプトを利用方法別に編集・保存したいときに使うと良いでしょう。Forkさせた場合は新規の自作スクリプトとして保存されます。SCALRにあらかじめ用意されているスクリプトをForkさせることも可能です。
自動実行
SCALRのスクリプトは手動実行の他に、自動で実行させることもできます。
FarmのコンフィグからRoleの設定画面を開きます。メニューの中からScriptingを選択し+をクリックすると実行内容を設定できます。まずはスクリプトの実行タイミングであるTriggerを指定しましょう。
サーバーの再起動時や新しいMySQLのマスターが立ち上がった時など様々なトリガーがあります。今回はHostUp(サーバー作成後)を選択します。
トリガーを設定したら、Actionでスクリプトの実行設定を行います。使用するスクリプトは先ほど作成したDate_Commentです。
設定項目の中にあるOrderはスクリプトの優先順位です。これは実行するスクリプトを複数設定した場合に利用される値です。もし複数のスクリプトが同じタイミングで実行されるときは、この値が小さいものから実行されます。実行順序が重要なスクリプトはこの設定に注意しましょう。(例:アプリケーションのインストールスクリプトと、そのアプリケーションの設定を行うスクリプトなど)
Targetはスクリプトの実行対象範囲です。 トリガーが起動したサーバー以外にもスクリプトを適用させることができます。
- No target (no execution): 実行しない
- Triggering instance only: トリガーが発生したサーバーのみ
- Selected roles: Farm内の指定したRoleのすべてのサーバー
- Selected behaviors: Farm内の指定したBehaviorsのすべてのサーバー
- All instances in the farm: Farm内のすべてのサーバー
Selected behaviorsが少しわかりにくいかもしれません。BehaviorsはRoleにインストールされているアプリケーションの種類で、Role選択時や設定画面で確認できます。例えば、Selected behaviorsにApacheを指定した場合は、BehaviorsにApacheが含まれるRole全て(app-apache64-centos6、lamp64-centos6など)でスクリプトが実行されます。
今回のTargetはTriggering instance only(トリガーが発生したサーバーのみ)にします。
スクリプトの引数は
Comment: App server started.
Output: /root/output.txt
とします。
これでスクリプトの設定は完了です。 今回の実行条件がサーバーの作成時なので、saveの前に起動するサーバー数の設定をしておきます。ScalingのMin instancesを1から2に増やしましょう。これで設定を保存すると新規のサーバーが作成されます。
設定保存後、右上のServersタブから一覧画面に移動します。しばらくするとサーバーが作成され始めるので、作成完了するまで待ちましょう。新しいサーバーのStatusがRunningになったのを確認したら、コンソールアイコンからoutput.txtの内容を確認してみます。
# ls output.txt # cat output.txt Mon Aug 19 13:18:26 JST 2013, App server started.
作成完了後の時間でコメントが出力されました。
スクリプトの自動実行は複数のスクリプトを異なる実行タイミングで設定することも可能です。例えば、新規サーバーの作成時に特定のアプリケーションのインストール、そして再起動時など特定のタイミングでアップデートやログの出力を自動で実行させる、という設定をRole内のサーバーにまとめて設定することもできます。
さて、今回はSCALRのスクリプトの使い方をご紹介しました。一度スクリプトを作成しておけば、サーバーごとに配置する必要もなく、すぐに実行可能という手軽さ。大量のサーバーを管理するのなら、かなり効果的な機能となるでしょう。スクリプトの書き方や実行方法の組み合わせ次第で、作業の手間を省くことができます。自分の環境に合わせたスクリプトの利用法を考えてみてください。
以上、IDCフロンティア ビジネス開発本部の成田でした。
<連載記事>