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

 ~A-AUTO 50とWindows Azure PowerShell(コマンドレット)を連携させた自動化~

背景

みなさまがIaaS、PasS、mBaaSなど何かしらのクラウドサービスを利用されているかと思います。
今回ご紹介するMicrosoft Azureでは、様々なサービスが提供されていますが、料金は「使用した分だけお支払い」「分単位の課金」となっています。
必要な時に必要なだけ利用できるのは便利ですが、企業としてはどれだけ無駄を省いてコストの最適化を図るかが重要な課題です。
その対策のひとつとして挙げられるのが、「無駄な利用を止めコストを最小限に抑える」ことですが、自動化+最適化されたものでなければ、十分な効果を発揮することはできません。

本活用事例では『A-AUTO 50』と『Windows Azure PowerShell(コマンドレット)』を組合せた、“無料でできるAzure VM起動・停止の自動化”によるコスト削減についてご紹介します。

2015y05m26d_172320167

なお、Azure VMの起動・停止自動化方法として、Azure Automation(有料)を利用する方法や、cron、タスクスケジューラを利用する例などもありますが、最適化を実現するという観点で考えると十分ではありません。
“運用”を考慮して最適化するうえでの一般的な最適化要件を改めて明確にしたうえで、十分でない理由を含め説明します。

 

最適化要件の整理

以下は、別の事例で整理・定義した、最適化を検討するうえでの5つの必要最低要件を引用したものです。

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

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

Azure Automationでは、①~③、タスクスケジューラやcronでは①③は実現できません。
また、④もタスクスケジューラやcron単体では無理があります。
このように、運用を最適化することを考えた場合、Azure Automation、タスクスケジューラやcronでは要件を十分に満たすことができないと言えます。
その点、A-AUTO 50ならタスクスケジューラやcronと同じく無料でありながら、①~⑤の要件すべてを満たすことができます。

 

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

自動化による最適化ターゲットは、開発環境や社内向けサービスなど連続稼働する必要性の無いシステムとします。基本的には、自社の営業日カレンダーに従い決まった時刻にVMの起動・停止を実施することで、コスト最適化を図ります。
ただし、当日の利用時間の変更や事前の稼働予定日の調整といった事態にも簡単に対応できる必要があります。

2015y05m26d_173702522最適化例イメージ図

自動化概要

  1. グループ化する
    最適化ターゲットとなるVMを“稼働日”、“起動・停止時刻”、“稼働日の変更パターンが常に同じである”といった3つの要素が一致するVM同士でグループを作成する。

  2. 自動実行スケジュールを作成する
    各社の営業に合わせたカレンダーを作成し、グループ毎に、起動・停止スケジュールを作成する。
    A-AUTO 50で、1.で作成したグループ毎に起動用と停止用のジョブネットワーク(ネットワーク)を登録し、スケジュールを自動作成する
    これだけで、営業日に従って自動起動・停止が行われます。
    また、ジョブネットワーク内で実行するジョブは、1.で作成したグループ内のVM単位に、起動または停止ジョブを作成する。
    ※ 実際のバッチジョブは、全体で起動・停止それぞれ1つずつ用意しておけばよい

  3. スケジュールの調整
    当日の停止時刻延長や稼働日の変更は、Webクライアントのスケジュール画面から直観的に変更することが可能

今回ご紹介する自動化を導入することで、Azureの時間課金コストを大幅に削減することができます。

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

 

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

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

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

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

Azure_Holt

 

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

 

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

上記「最適化例イメージ図」では、「社員向け社内サービス」、「開発プロジェクトA」、「開発プロジェクトB」と3つのグループを作成した例としています。
※ 前述の3つの要素を元にグルーピングを行います

 

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

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

なお、PowerShellを他のプロセスから起動する際には、Windows Azure PowerShellの認証を行ったアカウントから起動する必要がありますが、A-AUTOでは、“ジョブ実行ユーザID”で、実行アカウントを指定することができます。

Azure_Net

 

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

Azure_Job

上記は、サービス名“SERVICE”、VM名“VMNAME4”というVM起動用ジョブの登録例です。
また、グループ内にVMが4つあるという前提で、ジョブ(ジョブコード)を4つ登録しています。
※ジョブユーザフィールドはコメント欄として利用できるので、VM名を記載すると後で分かり易くなります

 

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

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

 

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

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

 

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

記事掲載:2015年5月28日