【活用事例】『AWS EC2インスタンスの起動・停止の自動化で課金コストの最適化を無料で実現する』

 ~A-AUTO 50とAmazon EC2 API Toolsを連携させた自動化~

背景

ビジネスに利用しているITの環境が激しく変化したことに伴い、時間や場所といった働き方も大きく変わり、今や多くの企業でIaaS、PasS、mBaaSなど様々なクラウドサービスを利用しています。
弊社でも、お客様向けのサービスや社内サービス、開発環境といった用途でAWSを利用していますが、AWSのサービス利用料は「使った分だけの従量課金」となっています。
このため、どの企業においても、どれだけ無駄を省いてコストの最適化を図るかが重要な課題となっていると感じています。
では、EC2で最も簡単に効果を出し易い手段は何かといえば、「利用時間を適切に制御し課金コストを最小限に抑える」ことです。
必要な時にだけEC2のインスタンスを起動し、利用しない時は停止するということです。

ここでは『A-AUTO 50』と『Amazon EC2 API Tools』を組合せた、“無料でできるAWS EC2インスタンス起動・停止の自動化”をご紹介します。

AWS インスタンスの自動起動停止イメージ図

なお、各種メディアやSNSなどで『タスクスケジューラ or cron』+『Amazon EC2 API Tools』を利用した起動・停止の自動化の記事を見たことがある方も多いかとは思います。
もちろん、この組合せでも、簡易的な自動化は可能ではありますが、最適化できているかというと答えは“NO!”(ノー!)です。
では、何故“NO!”なのかを“運用”を考慮して最適化するうえでの一般的な最適化要件を改めて明確にしたうえで説明します。

 

最適化要件の整理

はじめに、最適化を検討するうえでの必要最低要件を整理・定義します。
整理・定義してみた要件は以下の5つです。

  1. 自動化の基本的な考え方として、自社の営業日に従って適切な日付・時刻にインスタンスの起動・停止が自動で行えること
  2. 自動化のために使用するツールにはイニシャルコスト、ランニングコストを掛けないこと
    今回の要件だけのためにツールを購入するということは一般的に難しい
  3. 稼働日の変更や停止時刻の延長といった突発的な予定変更が必要な場合、直接マスタ定義に手を加えずに済むこと
    これは、一時的な変更のために直接マスタ修正が必要な場合、その後マスタ定義の戻し漏れや修正ミスを誘発する可能性があるためです
  4. 正常に起動・停止が行えない/起動停止処理が遅延しているなど問題が発生したときには、自動検知可能であること
  5. 社内環境からAWSのECSインスタンスの起動・停止をコントロールできること

※ ⑤は常時稼働するAWSからの制御でも問題はないため必須要件ではない

上記要件を見ていただければ、前述した“NO!”(ノー!)だと言った理由をご理解いただけるのではないかと思います。
①③は、タスクスケジューラやcronでは実現できません。 また、④もタスクスケジューラやcron単体では無理があります。
このように、運用を最適化することを考えた場合、タスクスケジューラやcronでは要件を十分に満たすことができないと言えます。

その点、A-AUTO 50ならタスクスケジューラやcronと同じく無料でありながら、①~⑤の要件すべてを満たすことができます。

 

A-AUTO 50を利用した最適化例

企業Eは、以下のとおり社内向けにAWS EC2を利用している

  • 社員向け社内サービスは、営業日の8:00~18:30の間サービスを提供している
    ※ 複数のインスタンスを稼働しているが、常に起動・停止時刻は同じとなる
  • 開発環境は、基本的に営業日の9:00~21:00の間利用している
  • 【例外】として
    ・開発環境は、各プロジェクトのPMが判断のうえ、当日の15:00までに該当プロジェクトが使用する利用時間を延長することがある
    ・開発環境では、営業日でない日にインスタンスを利用することがある

AWS インスタンスの自動起動停止イメージ図2最適化例イメージ図

上記「最適化イメージ例」は、”社内向けサービス郡”や開発プロジェクトA、Bのグループ単位でまとめて決まった日付と時刻にインスタンスの起動起動・停止を実施します。

この自動化導入によって、EC2の時間課金コストを50%以上削減することができます。

今回の活用事例は、”本コミュニティサイト”と”A-AUTO 50開発者ブログ”の連動企画としています。
『A-AUTO 50+Amazon EC2 API Tools』で実現する“無料でできるAWS EC2インスタンス起動・停止の自動化”の具体的な進め方や、Amazon EC2 API Toolsを使用した起動・停止サンプルバッチをA-AUTO 50のブログでまとめています。
実際の構築手順詳細はそちらも参照してください。

 

 

以降は、上記「最適化例」を実現するための6ステップを簡単にご紹介します。

「最適化例」を実現するための6ステップ

1.A-AUTO 50では、お客様毎の固有のカレンダー(休日情報)を作成します。

※ 複数カレンダー作成可能です

ホリデーマスタ

 

2.作成したカレンダーを使用して、営業日のみに起動・停止用バッチを起動するスケジュールを作成します。sche5

 

3.起動する日付や時刻で“ジョブネットワーク(ネットワーク)”としてグルーピングしていただきます。

上図の例では、「社員向け社内サービス」をまとめて1つのグループと考えることができ、「開発プロジェクト」がA、Bをそれぞれ別のグループとして考えるのが望ましいとなります。
※「最適化例イメージ図」参照のこと

 

4.グループ毎にインスタンスの起動用と停止用のジョブネットワーク(ネットワーク)を1つずつ作成します。

例えば、9:00利用開始とするのであれば、8:45にインスタンスを起動させます。
また、起動や停止処理が遅延しているときに、問題を検知したい場合は、スタート遅延・エンド遅延の検知設定を行っておくことで対応可能です。
複数のインスタンスをまとめて起動する場合は、[ジョブ並行処理]のチェックボックスをチェックしておけば並行起動させることができます

ネットワークマスタ1

 

次に実行するバッチジョブの情報を登録します。
インスタンス毎に起動・停止が正常に行われたかを確認できるようにするために、グループに属するインスタンスの分だけジョブを登録します。
インスタンス毎に異なる環境情報をバッチファイルのパラメータ化することで、ジョブ毎にA-AUTO 50からパラメータを引き渡すことができます。

ネットワークマスタ2

上記は、DEVASTAという開発プロジェクトAのインスタンス起動用の登録例です。
使用するインスタンスが4つあるという前提で、ジョブ(ジョブコード)を4つ登録しています。

 

5.ステップ2、4で作成したジョブネットワークとスケジュール情報を関連づけることで、1年分のスケジュールが自動生成されます。netsche

※この画面から処理日の変更や、当日の停止時刻延長といったスケジュールの調整が行えます

 

6.日々のインスタンス起動・停止用ジョブネットワークの実行状況は、視覚的に確認していただけます。kansi1

kansi2

実行したジョブログもWebクライアントから参照することが出来るので、問題が発生したときもすぐに確認していただくことが可能です

kansi4

 

 

実際に試してみた時に、不明な点がある場合は、コミュニティをとおして質問していただくことができるので、コストの最適化に是非ご利用ください。

記事掲載:2015年4月15日