2015年5月27日水曜日

AzureVMの起動・停止自動化によるコストの最適化【準備編】

みなさんこんにちは。

社内のボウリング大会で米5キロがあたって歓喜している鷲尾です。


さて、みなさん「Azure」はご存知ですよね。
Azureとは、Microsoftが提供するクラウドサービスのことです。


先月のブログでAWSインスタンスの起動・停止自動化について書きましたが、今回はAzureVMの起動・停止自動化について書いていきます。

AWSではインスタンスを起動している間は料金がチャージされ、停止している間は料金はかからないというものでしたが、Azureも基本的には同じ要領で課金されます。

しかしAzureは、AWSとくらべて課金に関して少し癖があります。
それは、「VM(インスタンス)が停止していても、リソースの割り当てが解除されていない限り、課金は継続される」というものです。

例えば、AzureにもAWSのコンソール画面のように、「ポータル」と呼ばれるWebページがあります。このポータルから該当のインスタンスをシャットダウンした場合は、課金されません。
しかし、リモートデスクトップなどで実際にインスタンスにログインしている状態で、「OSの中から」シャットダウンした場合、実は課金の対象になってしまうんです。
これは気をつけなければいけませんね。

インスタンスを課金されないようにシャットダウンするには、ポータルから直接操作する他に、Microsoftで用意されている「コマンドレット」を使用し、WindowsPowerShellから該当のインスタンスをシャットダウンさせるという方法があります。

そこで今回は、このコマンドレットとWindowsPowerShellを使って、A-AUTO 50でAzureVMの起動・停止を自動化していきたいと思います。






ボリュームがあるので、2回に分けて書きたいと思います。

第1回:準備編
第2回:コマンドレット利用編(A-AUTO設定含む)


なお、本連載では、社内環境からAzure上に作成したWindows Server 2012R2のVMの起動・停止を行います。ローカル環境からだとファイアウォールの設定などが原因で外部へアクセスできないという場合は、常時稼働するAzureVMから操作する形をとっていただければと考えます。

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

・接続先(Azure)
Windows Server 2012R2
※ AzureのVMは、MicrosoftAzureの公式サイトからMicrosoftアカウントでポータルにログイン後、種類やサイズを自由に設定して作成することができます。


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

準備編
AzureVMの起動・停止を制御するためには、AzureVMをコマンドレットで制御するための「Windows Azure PowerShell」、実際に起動処理もしくは停止処理を行うスクリプトファイルMicrosoftアカウントによる認証が必要です。
また、A-AUTOからPowerShellを実行するためのバッチファイルを用意します。

準備編では、AzureVMの起動・停止を行うために必要となる事前準備と、動作確認を行います。AzureVMを操作するには別途Windows Azure PowerShellという別のソフトウェアが必要です。このソフトウェアをインストールすることで、Azure上のVMに自由にコマンドを実行することが出来ます。
※Windows Azure PowerShellインストール後は、Windows PowerShellからも、コマンドレットを実行できるようになります。


ということで、第1回目の目標は、「Windows Azure PowerShellからAzureVMにコマンドを実行できるようにするところまで」です。


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

1.Windows Azure PowerShellとは
2.Windows Azure PowerShellのダウンロードとインストール
3.認証情報(クレデンシャル)の設定と、動作確認
4.Windows PowerShellの実行ポリシー設定
5.自動化するための前提


1.Windows Azure PowerShellとは

"Azure PowerShell は、Azure のワークロードの展開と管理の制御および自動化に使用できる強力なスクリプト環境です。Windows PowerShell を使用したことがあるかないかにかかわらず、仮想マシンのプロビジョニング、仮想ネットワークおよびクロスプレミス ネットワークの設定、Azure でのクラウド サービスの管理を始めるための手順が示されます。(公式サイトより)"

→  ・・・ちょっとわかりにくいですね。簡単に言うと、AzureVMを操作するためにいろいろなものが揃っている、Windows PowerShellの強化版 みたいな感じです。Windows Azure PowerShellをインストールすると、Windows Azure PowerShellもしくはWindows PowerShell上から、コマンドレットを使ってAzureVMを操作することが出来ます。操作範囲も、Azureのポータル画面から行えることは基本的に行うことが出来ます。


2.Windows Azure PowerShellのダウンロードとインストール
(1)ダウンロード
Windows Azure PowerShellを、公式ページからダウンロードします。
"インストール"をクリックするとダウンロードが始まるので、任意の場所にダウンロードします。




(2)インストール
ダウンロードしたファイルを実行すると、自動的にWeb Platform Installerが起動し、Windows Azure PowerShellがインストールされます。
※前提となるWindows PowerShellのバージョンについては、「5.自動化するための前提」を参照のこと。




【インストール】をクリック



【同意する】をクリック



インストール欄が【インストール済み】になっていることを確認




上図のように、Web Platform Installerで"Windows Azure PowerShell"のインストール欄が"インストール済み"になっていれば、Windows Azure PowerShellのインストールは完了です。

続いて、認証情報の設定を行います。


3.認証情報(クレデンシャル)の設定と、動作確認
Windows Azure PowerShellをインストールしただけでは、コマンドは実行できません。コマンドレットを使うためには、操作を行うマシン内のWindows Azure PowerShellからあらかじめ認証を行っておく必要があります。この時に使用する認証情報のことをクレデンシャル(credential)といいます。

認証方法には、大きく2パターンあります。





1つめは、Microsoftのアカウント情報を使って認証する方法です。
これは現在Microsoftが推奨する認証方法で、認証作業はWindows Azure PowerShell上からMicrosoftのアカウント情報(サブスクリプション取得後)を入力するのみです。非常に簡単ですが、最もセキュリティが強固だと言われています。

2つめは、認証情報や鍵情報などをポータル画面にアップロードし、ローカル環境に秘密鍵情報などを保持しておく方法です。以前はこちらの認証がメインでしたが、セキュリティの観点などから、現在は推奨されていません。
どうしてもという理由がないかぎり、できるだけ1つめの方法で認証することをおすすめします。


今回は、1つめの方法、Windows Azure PowerShell上からの認証を行っています。
なお、Windows Azure PowerShell上からの認証は、以下のコマンドで行います。

Add-AzureAccount


このコマンドを実行すると、画面上に認証画面が立ち上がります。
認証には、Azureのポータル画面にログインするアカウント情報(メールアドレス、パスワード)が必要になります。なお、別途Windows Azure Active Directoryのアカウントなどを作成している場合は、そちらでもかまいません。





認証が成功すると、以下のように表示されます。



それでは、認証できていることを確認するために、試しに"Get-AzureVM"という
インスタンスの一覧を表示するコマンドを実行してみましょう。



Azure上に1つもインスタンスを作成していない場合は何も表示されませんが、エラーメッセージが表示されていなければ問題ありません。
※上記サンプル画像はインスタンスを3つ作成している状態のイメージです。

【補足】
Add-AzureAccountコマンドでの認証ですが、Microsoft側で設定された有効期限(不定期)があります。認証が切れたら再度認証を行う必要があります。

認証に失敗した、もしくは認証前の状態で上記と同じ"Get-AzureVM"を実行した場合は、このように表示されます。赤字のところがエラーメッセージです。



4.Windows Azure PowerShellの実行ポリシー設定 ※2015年5月29日更新
拡張子".ps1"のスクリプトファイルを実行するためには、Windows Azure PowerShellの実行ポリシーの設定を確認、変更する必要があります。なお、実行ポリシーの変更対象は、"Windows Azure PowerShell"のみです。
Windows Azure PowerShellのコンソールを起動して、そこから実行ポリシーを設定してください。


Windows Azure PowerShellでは以下の4つのポリシーが存在しますが、ここでは"RemoteSigned"を選択します。
  • Restricted - 実行できるスクリプトはありません。Windows PowerShell は対話型モードでのみ使用できます。
  • AllSigned - 信頼できる発行元が署名したスクリプトのみを実行できます。
  • RemoteSigned - ダウンロードしたスクリプトは信頼できる発行元が署名した場合にのみ実行できます。
  • Unrestricted - 制限なし。すべての Windows PowerShell スクリプトを実行できます。

(1) はじめに、現在のWindows Azure PowerShellの実行ポリシーの確認は、以下のコマンドで行います。

Get-ExecutionPolicy


(2) Windows Azure PowerShellのポリシーの変更は、以下のコマンドで行います

Set-ExecutionPolicy RemoteSigned


(3) 再度、(1)で使用したコマンドで実行権限が変更されたことを確認してください。
"RemoteSigned"が表示されていれば、変更できています。


5.自動化するための前提
・AzureのIPアドレスに関して
AzureVMのグローバルIPアドレスは、基本的に再起動するたびに変更されます。
AzureVMに固定のグローバルIPアドレスを使用したい場合は事前に予約IPアドレスを作成し、割り当てる必要があります。なお、予約IPアドレスは料金が発生する場合もありますので、ご自身の判断で使用に応じて使用してください。
※本記事は、固定IPアドレス(RIP)を設定している前提です。


・Windows PowerShellのバージョンについて
※Azureではバージョン3.0未満のPowerShellはサポートしていないため、バージョン3.0以上のものを使用する必要があります。例えばPowerShellのバージョンが2.0だった場合は、以下のようなエラーメッセージが表示されます。

requires a minimum PowerShell version of '3.0' to execute.


お疲れ様でした。
第2回では、実際にAzureインスタンスを起動・停止させるスクリプトの紹介と、A-AUTOとの連携方法をお伝えします。


第2回 AzureVMの起動・停止自動化によるコストの最適化【コマンドレット利用編】 こちらです。


0 件のコメント:

コメントを投稿