ラベル Amazon EC2 API Tools の投稿を表示しています。 すべての投稿を表示
ラベル Amazon EC2 API Tools の投稿を表示しています。 すべての投稿を表示

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

2015年4月15日水曜日

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

みなさんこんにちは。
鷲尾です。

本日は、短期集中連載企画の第2回目【API利用編】となります。


前回までのあらすじ

● ローカル環境に Amazon EC2 API Toolsを導入
● インスタンスの操作に必要となる情報を収集し、環境変数を設定するバッチファイルを作成
● 作成したバッチファイルとec2ver”コマンドでAmazon EC2 API Toolsが利用できることを確認

今回は「API利用編」ということで、インスタンスのステータスの確認、インスタンスの起動・停止が行えることを確認し、最終的に起動・停止用のバッチファイルの作成・実行まで行っていきます。

※なお、コマンドは各環境変数に値がセットされていないと実行することが出来ないため、ここでは、前回作成した環境変数設定バッチ(envSetup.bat)を実行した状態(環境変数に値がセットされている状態)であることを前提としています。

6.インスタンスのステータス確認
先ずは、ターゲットとするインスタンスIDの操作が行えることを確認するために、特定インスタンスのステータスを取得します。

ステータスを確認する場合は、以下のコマンドを使用します。
ec2-describe-instances インスタンスID


コマンドを投入したときの表示は以下のような表示となります。
■起動時



ここまでくれば、もうAPIでの起動・停止ができたも同然です!



7.インスタンスのStartStop
次は、いよいよインスタンスの起動・停止を制御してみます。
それでは、停止状態にあるインスタンスを再起動(Start)させてみましょう。

再起動させる場合は、以下のコマンドを使用します。
ec2-start-instances インスタンスID                                                                    


startコマンド投入サンプル

      ※ i-XXXXXXXXには、実在するインスタンスIDを指定してください


今度は、起動しているインスタンスを停止(Stop)させてみます。
停止させる場合は、以下のコマンドを使用します。

 
ec2-stop-instances インスタンスID       

stopコマンド投入サンプル


これで、APIからインスタンスの起動・停止が行えるようになりました!


なお、起動・停止用のAPIは、非同期処理となっています。このため、ec2-start-instances /ec2-stop-instances から処理が戻された時点で、指定したインスタンスの起動・停止は完了していません。
このため、ec2-start-instancesec2-stop-instancesを利用した場合、正しく起動・停止したかは、前述のec2-describe-instancesコマンドなどを利用して確認する必要があります。






8.Elastic IPアドレスの関連付け(EC2 Classicの場合のみ)
EC2(Classic)では、インスタンスを停止するとその時点で、インスタンスとElastic IPの関連付けが解除されてしまいます。
このため、停止・起動の自動化を行う場合、インスタンス再起動後に再度Elastic IPの関連付けを行う必要があります。
Elastic IPの関連付けには、以下のコマンドを使用します。
ec2-associate-address -i インスタンスID Elastic IP

Amzon EC2 VPCの場合は、インスタンスを停止してもElastic IPアドレスは開放されません。




9.起動・停止用バッチファイルを作成・実行してみる
インスタンスを起動・停止するためのバッチファイルを作成します。
ここでは、起動および停止バッチをインスタンス毎に作成しないよう、1つのバッチファイルを共用する前提でバッチファイルのパラメータを定義します。

【起動バッチ : ec2start.bat】

起動バッチのサンプルはこちらからダウンロード出来ます。
作成するバッチの概要は以下のとおりです。
パラメータ
1つのバッチファイルで複数のEC2インスタンスを起動するバッチとするため、パラメータを3つ用意します。
1パラメータ : リージョンコード (必須)
2パラメータ : インスタンスID  (必須)
3パラメータ : Elastic IP     (任意)

EC2 Classic環境で、Elastic IPアドレスの関連付けをする前提としているため第3パラメータを用意していますが、EC2 VPCであれば停止後にインスタンスとElastic IPアドレスとの関連付けが解除されないので第3パラメータは不要です。

◆リターンコード
  0 : インスタンスの起動に成功した
  1 : 起動しようとしたインスタンスIDが既に起動しているため、処理を中止した
  4  必須パラメータが入力されてない
  8  インスタンスへの接続に失敗した
12  Elastic IPアドレスの関連付けに失敗した(起動バッチのみ)
16 :インスタンスの起動に失敗 した

第3回の自動化編では、リターンコードが0、もしくは1であれば正常とみなすように設定します。

2015年4月13日月曜日

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

みなさんこんにちは。

今年の新人のフレッシュな声を背中で聞きながら、しみじみ過去の1年間を回想している鷲尾です。


さて、みなさん「AWS」はご存知ですよね。

AWSを利用すると、アマゾンが提供する環境に「Linux」や「Windows」といったさまざまなOSを「インスタンス」という形で、仮想的に利用することができます。
例えば「AWS上にCentOSなどのサーバ向けOSのインスタンスを用意し、そのサーバ上でWebサイトを運営する」といった使い方ができます。

非常に便利なAWSですが、気になるサービス利用料は「使った分だけの従量課金」となっています。つまり、「インスタンスを起動している間は料金がチャージされ、停止している間は料金は掛からない」というわけです。


であれば、少しでもインスタンスの起動時間は短くしたい(コストを抑えたい)ですよね。
しかし、毎日手動でインスタンスを起ちあげては停止し、また起ちあげて・・・ということを繰り返すのは大変ですし、オペレーションミスが発生するかもしれません。

また、「会社の営業日だけ起動させたい」、「営業時間の間だけ」、「今週は起動したくない」といったインスタンス操作のタイミングが不規則で複雑な場合、すべて手動で管理するのはさらに大変です。


そこで、強力なスケジューリング機能をもった無料の「A-AUTO 50」とAmazon EC2 API Tools」を連携させてインスタンスの起動・停止をすべて自動化し、インスタンス起動日時をより細かくコントロールすることでコストを削減してしまいましょう!というのが今回のテーマです。

『cronやタスクスケジューラでできるでしょ!』と思われる方もいらっしゃると思いますが、連載を読み終えていただければ違いがわかっていただけると思います。


AWSとA-AUTO 50連携イメージ




すべてを1回で書ききるにはボリュームがあるので、全3回の短期連載とします。

第1回:準備編
第2回:API利用編
第3回:自動化編


 
なお、本連載で使用する環境は、弊社内のWindows Server 2008R2環境からAWS上のRed Hatのインスタンスの起動・停止を行います。
使用するOSAMI)は以下のとおりです。

・接続元(社内ローカル環境)
Windows Server 2008R2

・接続先(AWS上)
Red Hat Enterprise Linux 7.1 (HVM)ami-4dbf9e7d


※AMIというのは、インスタンスの元になったOSイメージのことです。例えばRedHatのインスタンスを作成するときはRed HatのAMIからコピーして作成します。




ということで、ここから第1回の「準備編」の内容に入っていきます。

準備編

インスタンスの起動・停止を制御するためには、インスタンスをAPIで操作するためのコマンドラインツールAmazon EC2 API Tools」、インスタンスを起動・停止するそれぞれのバッチファイルと、その他AWS関連の登録情報が必要です。

※注意
本投稿での「起動」という用語についてですが、便宜上“停止状態にある既に生成済みのインスタンスを再開(Startさせること”を「起動」と記載させていただきます。
なお、正式なAWSの用語は以下のとおりです

 ・ インスタンスの起動(run         AMIから新しいインスタンスを生成・起動する
 ・ インスタンスの停止(stop       起動中のインスタンスを停止する
 ・ インスタンスの再開(start)        停止中のイスタンスを再び起動する
 ・ インスタンスの削除(terminate インスタンスの起動で生成したインスタンスを削除する


ということで、第1回目の目標は、「Amazon EC2 API Tools 」を利用できるようにする所までです。


それでは以下の順に説明していきます。

1. Amazon EC2 API Toolsとは
2. Amazon EC2 API Toolsのダウンロード
3. Amazon EC2 API Toolsのインストール
4. Amazon EC2 API Toolsを使用するための準備
-  4.1 事前に準備しておく情報一覧

-  4.2 設定する環境変数の設定
5. Amazon EC2 API Toolsの動作確認