2015年4月17日金曜日

AWS EC2インスタンス起動・停止自動化によるコストの最適化【自動化編】

こんにちは、井下です。
本日は、集中連載企画の第3回目【自動化編】となります。


前回のあらすじ
● ステータス確認、起動・停止、Elastic IPの関連付けといったAPIを実際に実行してみる
● インスタンスの起動・停止バッチを作成し、そのバッチで実際にインスタンスを起動・停止してみる
※ 過去のブログはこちらをご参照ください。
  第1回 準備編



今回は集中連載企画の最終回ということで、いよいよA-AUTO 50でインスタンスの起動・停止のスケジュール、実行を自動化し、最適化を図ります。


今回のAgendaは次のとおりです
  9.カレンダーの作成
 9.1 年間定休日を定義する
 9.2 カレンダーを作成する
10.スケジュール情報の登録
11.ジョブネットワーク情報の登録
12.ネットワークスケジュールの作成
13.バッチファイルの配置
14.インスタンスの起動・停止の監視


では、さっそく説明に入っていきますが、以降の説明は、既に基本ライセンスのインストール手順に従って、インストールが完了している前提で話を進めます。
このため、予めインストール手順に従ってインストールを完了させておいてください。

・ Webクライアントにログインできる状態にある
・ 監視ウィンドウのテンプレートを作成済みで監視画面が表示できる状態にある
・ 動作確認まで完了している



9.カレンダーの作成
はじめに、お客様独自の営業日カレンダーを作成します。

先ずは、カレンダー作成を考えるにあたり、いつが休みかを決めていきます。
一般的な休みの種類は、大きく以下の3つに分類できると思います。

(a) 週間定休日 : 毎週土曜日や毎週日曜日といったように毎週繰り返しやってくる休日
(b) 年間定休日 : 国民の祝日など毎年繰り返しやってくる休日
(c) 不特定の休日 : 会社固有の休日
             例えば、夏季休暇や年末年始休暇、GWを大型連休にするために
             休みを振り替えたりすることがあると思います。
             ※ 年末年始休暇などは、企業によっては毎年期間が同一だったりもしますね


次にA-AUTOのカレンダーを作成するうえでの休日の種類は次のようになります。

(ア) 週間定休日 : 毎週土曜日や毎週日曜日といったように毎週繰り返しやってくる休日
(イ) 年間定休日 : 毎年n月n日と言うように日付が固定され毎年やってくる休日
            元旦(1月1日)、建国記念日(2月11日)などがこれに相当します
            また、年末年始休暇が毎年12月29日~1月4日と固定されているようであれば、
            これも年間定休日として考えます
(ウ) 不特定の休日 : ハッピーマンデーや春分の日、秋分の日といった毎年日付が変わる国民の休日や、
            夏季休暇、GWの連休設定など、月日で固定化できない休日がこれに該当します

先ずは、一般的な休みの種類とA-AUTOの休日の種類で若干異なる部分があることが分かっていただけたかと思います。
※ 現時点でA-AUTOでは、”毎年n月のn週目のn曜日”といったハッピーマンデーには未対応としているため、不特定の休日に分類します




9.1 年間定休日を定義する
先ずは、A-AUTOの休日の考え方のうち(イ)の年間定休日を登録します。
年間定休日は、マスタメンテナンスメニュー[ホリデー]-[休日]を選んで表示される[休日定義一覧]から登録します。

A-AUTO 50をインストールした状態では、日付固定の国民の休日は予め登録してあります。
このほかに会社固有の年間定休日があれば、はここで登録してください。

  ※ 旧 日付固定の国民の休日も登録されているので、不要でしたら削除してください



会社固有の年間定休日は、[新規登録]ボタンをクリックして登録します。

”日付”フィールドで月日を入力または選択してください。
下記のサンプル画像は、「1月2日」を登録しています。”コメント”フィールドに「年末年始休暇」など後から見て分かるようなコメントを入れておくとよいです。


なお、[振り替え]チェックボックスがありますが、指定した日付がカレンダー上休日の日曜日であった場合、休日を翌日に自動振り替えするか否かを選択するためのものです。
※ 上記サンプル画像では、会社固有の休日であるため[振り替え]の設定は行っていません

下の画像は、同様に「1月3日、1月4日、12月29日~12月31日」も休日として定義した後の画像となります。



※ [振り替え]を行う設定をしている休日は、一覧表示をしたときに、日付の右横にアイコンが表示されます


9.2 カレンダーを作成する
お客様固有のカレンダーを作成します。
カレンダーは、マスタメンテナンスメニュー[ホリデー]を選んで表示される[ホリデー定義一覧]から登録します。

[新規作成]ボタンをクリックして、インスタンスの起動・停止用に新たにカレンダーを作成します。





9.2.1 週間定休日の設定

ホリデーID(必須)とコメントを入力します。
※ それぞれのカレンダーが何用であるかが分かるようコメントを入れます

次にA-AUTOの休日の考え方の(ア)にあたる”週間定休日”を選択します。
下のサンプル画像では、土曜日と日曜日を週間定休日としてしています。


※ 登録画面では、各種休日を設定すると右側のカレンダーに設定した休日を赤色の背景色で反映表示し、いつが休日であるかを視覚的に確認することができます



9.2.2 年間定休日の設定
次に、[休日設定]タブで予め登録しておいた年間定休日の中から、登録するカレンダーに適用する年間定休日を選択します。
選択する年間定休日は、[未選択]一覧から[選択済み]一覧に年間定休日を移動することで行います。


上記サンプル画像は、予め登録したすべての年間休日を適用している例となります。


【年間休日の振り替えに関する注意事項】
年間定休日を登録したときに、「振り替え」チェックボックスがありましたが、個々のカレンダー毎に年間定休日の振り替えを有効にするか否かを指定します。
2つ上のサンプル画像にあるように[ホリデー詳細]タブに[振替を有効にする]チェックボックスがあるので、選択した年間定休日群の振り替えを有効化したい場合は、必ずチェックしてください。



9.2.3 不特定の休日の登録
ハッピーマンデーやGWの振り替え、夏季休暇といったA-AUTOの休日の考え方(ウ)にあたる不特定の休日を14ヶ月分設定してください。
※ A-AUTO 50では、『”当月-1ヶ月” ~ 14ヶ月分』のカレンダーを保持していて、毎月自動で追加していきます

不特定の休日は、右側のカレンダーで休みとしたい日付をダブルクリックすることで設定していきます。
もう一度ダブルクリックすると逆に休日を取り消せます
下記のサンプル画像は、今年の”海の日”を追加したものです。


※ 年間定休日や週間定休日で休日設定した日付をダブルクリックするとその日付も休日ではなくなるので、注意してください





以上でインスタンスの起動・停止用カレンダーの作成が完了です。

登録が完了すると作成したカレンダーが一覧に追加されます。






10.スケジュール情報の登録
次は、スケジュール情報を登録します。
スケジュール情報では、”どんな周期で”、”いつから”インスタンスの起動・停止を行うかの情報を登録します。

スケジュール情報は、マスタメンテナンスメニュー[スケジュール]を選んで表示される[スケジュール定義一覧]から登録します。

[新規作成]ボタンをクリックして、インスタンスの起動・停止用に新たにスケジュール情報を作成します。




ここでは、先ほど作成したカレンダー上”休日でないすべての日”にインスタンスの起動・停止を行わせるスケジュール情報の登録について説明していきます。
※ 実際には細かなスケジュール条件を設定できますが、説明は省略します

先ずは、[新規登録]ボタンをクリックして表示されたダイアログの[スケジュール]タブの指定について説明します。

  • スケジュールID
    任意のIDを入力してください(想像できるIDがよいかと思います)
  • コメント
    登録するスケジュールが何用のスケジュール情報かが後から分かるようにコメントを入力します
  • ホリデーID
    登録するスケジュール情報が参照する休日情報をどのカレンダーのものにするのかを選択します。
    ここでは、先ほど登録したカレンダーのホリデーID(EC2HOLT)を指定します
    ※ 直接ホリデーIDを入力するか[参照]ボタンから登録済みカレンダーを選択します
  • 処理パターン : ”カレンダー”を選択します
  • 処理サイクル : ”毎日”を選択します
  • シフトパターン : ”処理しない”を選択します
  • 実行期間         : ”1日~31日”を選択します



次に、[標準処理日]タブで、いつからスケジュールするか”日付”を定義します。

(1) [標準処理日]タブ内の[新規作成]ボタンをクリックすると画面下部の日付選択が行えるようになります。
(2) [標準処理日]にスケジュールを開始する日付を選択して、[適用]ボタンをクリックします。





















【標準処理日設定における注意事項】
標準処理日は、登録している日付の翌日以降を指定するようにしてください。
※  当日も指定できますが、まずは翌日以降としてください
標準処理日を指定すると右側のカレンダーに設定したスケジュール情報で、実際にいつスケジュールされるかのシミュレーション結果を視覚的に表示するので、こちらで期待するスケジュール結果になっていることを確認してください。


※ 緑色の背景色がスケジュールされる日付を意味しています
  赤色の背景色は選択したカレンダーの休日を意味します
右側のカレンダーでスケジュールを確認していただき、よろしければ、上部の[適用]ボタンをクリックして、スケジュール情報の登録を完了させます。


これでインスタンスの起動・停止用スケジュール情報の登録が完了しました。

登録が完了すると、作成したスケジュール情報が一覧に追加されます。





11.ジョブネットワーク情報の登録
ジョブネットワークの情報を登録します。
ここでは、インスタンスの起動・停止を行うバッチジョブをスケジュールされた日の何時に実行するか指定します。

ジョブネットワーク情報は、マスタメンテナンスメニュー[ネットワーク]を選んで表示される[ネットワーク定義一覧]から登録します。

[新規作成]ボタンをクリックして、インスタンスの起動・停止用のジョブに関する情報を作成します。





A-AUTOでは、インスタンスの起動・停止を行う”ジョブの情報”をネットワーク(※1)に登録します。
※1 A-AUTO の処理の単位をネットワークと呼びます

以降で登録内容を説明していきます。 ※ 細かな設定は省略します


先ずは、[新規登録]ボタンをクリックして表示されたダイアログの[ネットワーク属性1]タブの指定について説明します。



  • ネットワークID
    任意のIDを入力してください(想像できるIDがよいかと思います)
  • ネットワーク略称
    登録するネットワークが何用であるかが後から分かるようなコメントを入力します
  • スタート時刻
    インスタンスを起動または停止する時刻を指定します
    なお、起動の場合は、インスタンスを利用する時刻が9:00であれば、8:50など少し前の時刻を指定するのがよいでしょう。
    上記サンプルでは、8:45としていますが、理由は[ネットワーク属性2]の設定と関連します
  • ジョブ並行処理
    1つのネットワークで複数のジョブを登録し、それらジョブを平行実行させたい場合にチェックします。
    今回は、1ジョブでもチェックをつけておいて下さい。



次に[ネットワーク属性2]タブの指定について説明します。
※ [ネットワーク属性2]タブの設定は必須ではありません


ここでは、以下の2つの項目を指定します

  • スタート遅延監視時刻
    指定の時刻を過ぎてもネットワークが起動されなたったときに、Webクライアントにアラート通知します。
  • エンド遅延監視時刻
    指定の時刻を過ぎてもネットワークが正常終了しなかったときに、Webクライアントにアラート通知します。


上記設定を行うことで、異常終了はしていないが、業務に影響を及ぼす可能性があるといった処理遅延に関する警告のアラートを上げさせることができます。





最後に[ジョブ]タブで、実行するバッチファイルの情報を登録します。
[ジョブ]タブを選択すると以下のような画面が表示されるので、ここで実際に実行するジョブ(バッチファイル)の情報を登録します。



[新規登録]ボタンをクリックすると1つのジョブ情報を登録する画面が表示されます。
ここでは、以下の情報を登録してください。



  • ジョブ番号
     001~999の任意の数字を指定します
    ※ 複数ジョブ登録する際は、ユニークかつ登録済みジョブのジョブ番号よりも大きい数字を指定する必要があります
  • ジョブコード
    実際に実行するバッチファイルの拡張子を除いたファイル名を指定します
    この画面では8桁以下のファイル名のみ指定可能です
      前回作成したバッチファイルが ec2start.bat ec2stop.bat  でしたので、
        
    起動であれば、EC2START
        
    停止であれば、EC2STOP
      
    を指定します
  • マックスリターンコード
    実行するバッチジョブのリターンコードによってジョブを異常終了扱いとするリターンコードを指定します
    第2回目で作成したバッチファイルのリターンコード仕様では、正常とみなしてよいリターンコードは0と1でしたので、2を指定します
    ※この指定例では、リターンコードが2以上であれば異常終了扱いとなります
  • ノーマル実行時のジョブ引渡しパラメータ
    バッチファイルに渡すパラメータを指定します
    第2回目で作成したバッチファイルの必須パラメータは、”リージョンコード”、”インスタンスID”でしたので、これを順番に指定します。
    また、起動ジョブかつEC2(Classic)の場合は、第3パラメータにElastic IPを指定します。
  • リラン実行時のパラメータ :  バッチファイルに渡すパラメータを指定します
    基本的にノーマル実行時のジョブ引渡しパラメータと同じです。
    ジョブが異常終了した後に再実行(リラン)するときに渡すパラメータを指定します



これで、実行するジョブと、ジョブに引き渡すパラメータ、異常終了の判定の設定が完了しました。
[適用]ボタンをクリックして登録内容を保存します。

登録が完了すると下図のように[ジョブ]タブの一覧に追加されます。
※複数インスタンスの起動や停止をまとめて行いたいときは、その分繰り返してジョブ登録します


 最後に、[適用]ボタンをクリックしてネットワークの登録を完了させます。

これでインスタンスを起動するジョブネットワーク情報の登録が完了しました。
登録が完了すると作成したネットワーク情報が一覧に追加されます。

停止用のネットワークも同様に登録します

以下に停止用ネットワークサンプル画像をいくつか載せておきます
※ 停止時刻を21:00(21時停止予定)、スタート遅延監視時刻は21:15とした登録例です

【ネットワーク属性1】



【ネットワーク属性2】


【ジョブ登録画面】





12.ネットワークスケジュールの作成
最後に、登録したネットワークとスケジュールの情報を関連付けることで、ネットワークのスケジュールを自動生成させます。(これをネットワークスケジュールと呼びます)


ネットワークスケジュールは、マスタメンテナンスメニュー[ネットワークスケジュール]を選んで表示される[ネットワークスケジュール]から作成します。

ネットワークスケジュール一覧で初期表示するネットワークは、既にネットワークIDとスケジュールIDの関連付けが行われているネットワーク群が表示されます。

このため、関連付けが行われていないネットワーク一覧を表示するよう表示対象の切り替えを行います。
※ 関連付けが行われていないネットワークへの表示切り替えは、画面右上に並んだ5つのアイコンのうち、左から2つ目のアイコンをクリックします



画面を切り替えると、先ほど登録した2つのネットワークIDが表示されます。



ネットワークIDとスケジュールIDの関連付けを行うために、一覧に表示されているネットワークIDのリンクをクリックします。
⇒ クリックすると下のような画面が表示されます。


この画面で、ネットワークに関連付けるスケジュールIDを選択し、未選択スケジュールIDから選択済みスケジュールIDに移動してください。
ここでは、手順の中で作成したスケジュールID ”EC2SCHE”を選択してください。

※ ネットワークのスケジュール・シミュレーション
スケジュールIDを選択すると、右側のカレンダーでネットワーク(ジョブ)がいつ実行予定となるかスケジュール・シミュレーション結果を表示します。
⇒ 緑色の背景色がスケジュールされる日付を意味しています

これでよろしければ、[適用]ボタンをクリックし、関連付けを保存し、ネットワークスケジュールを生成します。
関連付けを行ったネットワークが関連付け済みの一覧に表示され、1年間分のスケジュールが自動生成されています。




ここまでで、インスタンスの起動・停止の自動化に必要な情報の登録は完了です。



13.バッチファイルの配置
予め作成したバッチファイル  ec2start.bat ec2stop.bat  を以下の場所に配置します。

バッチファイル配置先  :  [インストールディレクトリ]\AUW\INSTALL\PRIMSCRIPT

   ※インストーラのデフォルトでインストールした場合は ”C:\BSP\AUW\INSTALL\PRIMSCRIPT”となります

※ 標準では、実行するバッチファイルは、このディレクトリに配置する必要があります




14.インスタンスの起動・停止の監視

A-AUTO 50をインストールした直後は、毎朝8:30にネットワークスケジュールでスケジュールされている当日分のネットワークを自動でキューイング(※2)する設定となっています。
また、業務監視ウィンドウで当日分のネットワークを監視できるようにする処理(ファイル転送)が8:45に実行されるようになっています。

従って、翌日の8:45を過ぎれば登録したネットワークの実行状況を監視していただくことが可能となります。

※2キューイングとは
 スケジュールされているネットワーク群中から当日実行予定のネットワークに関する情報を実行制御を司るコンポーネントサービス(A-AUTO free)に引き渡す行為をキューイングと呼びます



先ずは、当日分のデータを表示するために、監視データの表示日付を当日に合わせます。
画面右上に並んだ5つのアイコンの一番左側のアイコンをクリックします。


ネットワーク監視メニューが表示されるので、表示日付を当日に合わせ[表示]ボタンをクリックします



そうすると、以下のように監視画面にキューイングされているネットワークが表示されます。



ステータス列でネットワークの状況を表示します。
 キューイング済み : 実行待ちの状態
 実行中       : 実行中の状態
 正常終了      : 実行が正常に終了した状態
 異常終了      : 実行は終了したが、ジョブが正常に実行されていない

EC2STA、EC2STOPが実行されるとステータスが変わっていくので、正しく実行されたかどうか確認できます。




ネットワークが正常終了しなかったときに、『ジョブのリターンコードを確認する』、『ジョブログを確認する』といったオペレーションもWebクライアントから行えます。

監視画面からネットワークIDをクリックすると詳細画面が表示されるので、ジョブ詳細情報から、 終了コードを確認し、特定のジョブを選択したうえで、ジョブログを表示できます。

◆ ジョブ詳細 サンプル

◆ ジョブログ表示サンプル




以上で、A-AUTO 50を使ってインスタンスの起動・停止の自動化ができました。



短期集中連載もこれで終わりとなります。
第1回目で書きましたが、タスクスケジューラやcronでの自動化と比べ、以下のような点で優れていることが分かっていただけたのではないでしょうか!

  • 毎週月曜~金曜日といった曜日指定の自動化ではなく、お客様または部署ごとの営業日(カレンダー)に従った詳細な起動・停止スケジュールの自動化が行えます。
  • 起動・停止日といったスケジュールの調整や、当日の停止時刻の変更をマスタに手を加えずに画面から実施することができます。
  • 正常に実行できたか、異常や遅延があればA-AUTO 50が管理者の方に通知することができます。
  • ジョブログで異常終了時の問題点の確認が行えます。


また、今回は行っていませんが、あるデータが整ったときにインスタンスを起動してバッチ処理を実行する。また、バッチ処理が正常終了したらインスタンスを停止するといった、ファイルトリガーや業務間の先行関係を用いた自動化なども行っていただけます。



0 件のコメント:

コメントを投稿