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の動作確認



1.Amazon EC2 API Toolsとは
Amazon Web ServicesAmazon EC2APIで操作するためのコマンドラインツールです。



2.Amazon EC2 API Toolsのダウンロード
Amazon EC2 API ToolsAWSの公式ページからダウンロードします。
"Download the Amazon EC2 API Tools" をクリックするとダウンロードが始まるので、任意の場所にダウンロードします。




※なお、Amazon EC2 API ToolsJavaによって動作しているため、Amazon EC2 API Toolsを動作させる環境にJavaがない場合は事前にJavaの1.7以降をインストールしておきます。

※2015年4月現在、AWSの公式サイトではJavaの1.7以降を使ってくださいと記載されています。




3.Amazon EC2 API Toolsのインストール
ダウンロードしたAmazon EC2 API Toolsを展開して、インストールするコンピュータのローカルドライブ内に配置します。
※今回はCドライブ直下に展開しています。





4.Amazon EC2 API Toolsからインスタンスへ接続するための準備
WindowsのコンソールからAmazon EC2 API Toolsを使ってインスタンスへアクセスするためには、事前に以下の情報を準備しておく必要があります。以下の情報は、すべてAWSマネジメントコンソールから取得します。

なお、AWSマネジメントコンソールにログインする際には、以下の情報が必要です。
・AWSアカウントID
・パスワード

■4.1 事前に準備しておく情報

  1.アクセスキーID
  2.シークレットアクセスキーID
  3.インスタンスID
  4.リージョンコード
  5.ElasticIP

※2015年4月現在、Amazon EC2 API Toolsを使用してAWSに作成したインスタンスに接続する方法は、アクセスキーIDとシークレットアクセスキーIDを用いた認証方法のみ使用できます。
以前はX.509証明書を利用して認証を行うことができていましたが、現在はX.509証明書を利用した認証方法は廃止されており、アクセスキーIDとシークレットアクセスキーIDを用いた認証方法へと移行されています。
  

4.1.1 アクセスキーID、シークレットアクセスキーID
アクセスキーIDとシークレットアクセスキーIDは、ユーザごとに発行されます。AWSマネジメントコンソールにログイン後、権限を制限した別のユーザアカウント(子ユーザアカウント)を複数作成することができ、その子ユーザアカウントごとにアクセスキーIDとシークレットアクセスキーIDが発行されます。

Amazon EC2 API Toolsを使ってインスタンスのStartStopを行うだけであれば、子ユーザアカウントの作成は必須ではありませんが、セキュリティ面などを考えて権限を適切に切り分けた子ユーザアカウントを作成しておいたほうがよいでしょう。

今回は、管理者と同等の権限を持った子ユーザアカウントを作成し、その子ユーザアカウントに付与されたアクセスキーIDとシークレットアクセスキーIDを使用してAmazon EC2 API Toolsから認証を行っています。

補足】 子ユーザアカウントの作成
子ユーザアカウントを作成する手順を補足しておきます。
(1) AWSマネジメントコンソール画面右上のアカウント名が表示されている箇所をクリックし、プルダウンメニューから、「Security Credential」を選択します。
  



(2) Security Credential選択後、左のメニューから「User」を選択します。
Create New Users」からユーザを新規追加すると、以下の画面が表示されます




Show User Security Credentials」をクリックすると、この子ユーザアカウント専用のアクセスキーIDとシークレットアクセスキーIDが表示されます。





※このタイミングでのみ、アクセスキーID・シークレットアクセスキーIDが記載されたCSVファイルをダウンロードすることができるので、忘れずにダウンロードしておきます。

※画面を消してしまったり、キーを無くしてしまった場合はキーを「Delete」することで再び作成できますが、「Delete」するとアクセスキーを使ったウェブサービスは使えなくなるので注意が必要です。



(3) 作成した子ユーザアカウントへ権限を設定します。
左のメニューから「User」を開き、先ほど作成した子ユーザアカウントをクリックし、「Managed Policies」内の「Attach Policy」をクリックします。





(4) 権限の付与
付与できる権限の一覧が表示されるので、「AmazonEC2FullAccess」にチェックを入れ、「Attach Policy」をクリックして権限に関する登録を完了します。(用途に合わせて付与する権限は変更してください)


以上で子ユーザアカウントの作成は完了です。
今回Amazon EC2 API Toolsからは、この子ユーザアカウントの認証情報(アクセスキーID、シークレットアクセスキーID)を使用して通信を行います。


4.1.2 インスタンスID
作成するインスタンス毎にユニークに割り当てられるIDです。AWSマネジメントコンソールから確認することが出来ます。Amazon EC2 API Toolsを用いてインスタンスを制御する際に、操作したいインスタンスIDを指定します。


4.1.3 リージョンコード
インスタンスが存在する国(地域)を指しています。この地域毎にリージョンコードというものが割振られているので、Amazon EC2 API Toolsを利用する際には自分が操作するインスタンスが存在するリージョンコードを指定します。
AWSの公式サイトから、操作するインスタンスが存在するリージョンコードを確認します。
※ 2015年4月現在の各リージョンコードは以下のとおりです。


リージョンコード
名前
ap-northeast-1
アジアパシフィック (東京)
ap-southeast-1
アジアパシフィック (シンガポール)
ap-southeast-2
アジアパシフィック(シドニー)
eu-central-1
欧州 (フランクフルト)
eu-west-1
欧州 (アイルランド)
sa-east-1
南米 (サンパウロ)
us-east-1
US East (N. Virginia)
us-west-1
米国西部(北カリフォルニア)
us-west-2
米国西部(オレゴン)


4.1.5 Elastic IPアドレス
固定IPアドレスのことです。Amazon EC2 API Toolsを使用する上ではElastic IPアドレスの取得は必須ではありませんが、ここではインスタンスにElastic IPアドレスを適用しているケースを想定して進めます。

EC2(Classic)ではインスタンスを停止するとElastic IPアドレス とインスタンスの関連付けが解除されるため、インスタンスを起動した際は、インスタンスIDとElastic IPアドレスの関連付けを再度行う必要があります。
なお、EC2 VPCであれば、停止時に関連付けが解除されないため、Elastic IPアドレスを控える必要はありません。


4.2 環境変数の設定
Amazon EC2 API Toolsを利用するために必要な環境変数に情報を追加します。
環境変数には、以下の6つを指定します。

1. JAVA_HOME
2. EC2_HOME
3. Path
4. EC2_URL
5. AWS_SECRET_KEY
6. AWS_ACCESS_KEY

上記1~3は、Amazon EC2 API Toolsを使用するために必要な環境変数で、4~6はインスタンスの起動・停止に必要となる環境変数です。



4.2.1  JAVA_HOMEの設定
Amazon EC2 API Toolsをインストールした環境のJavaのパス(※)を指定します。
例えばJAVA_HOMEにはC:\"Program Files"\Java\jdk1.8.0_40と指定します。

Javaのパスを通す際、基本的にはbinフォルダを指定する考えますが、私がやってみた結果としては、binフォルダの一つ上の階層のフォルダを指定して動作しました。


4.2.2 EC2_HOMEの設定
Amazon EC2 API Tools解凍し、配置したフォルダを指定します。
例えば、EC2_HOMEには”C:\ec2-api-tools-1.7.3.2”と指定します。


4.2.3  Pathの設定
Amazon EC2 API Toolsフォルダ内のbinフォルダを指定します。
例えば、C:\ec2-api-tools-1.7.3.2\binと指定します。


4.2.4  EC2_URL(リージョン)の設定
自分が操作したいインスタンスが存在するリージョンを設定する必要があります。
指定する際は、httpから始まる以下のURLで指定します。
下記”コード”部分には、操作したいインスタンスが存在しているリージョンコードを指定してください。

リージョン指定フォーマット  :  https://ec2.コード.amazonaws.com


例えば、インスタンスを作成したリージョンがオレゴン(us-west-2)だった場合、
EC2_URLにはhttps://ec2.us-west-2.amazonaws.com

東京(ap-northeast-1)だった場合は
EC2_URLにはhttps://ec2. ap-northeast-1.amazonaws.com

と指定します。


4.2.5  シークレットアクセスキーの設定
4.1.1 アクセスキーID、シークレットアクセスキーID」で取得したシークレットアクセスキーIDを指定します。


4.2.6  アクセスキーの設定
4.1.1 アクセスキーID、シークレットアクセスキーID」で取得したアクセスキーIDを指定します。


今回はバッチでの実行を考えているので、以上6つの環境変数に値をセットするバッチファイルを作成します。

envSetup.bat
set JAVA_HOME=C:\"Program Files"\Java\jdk1.8.0_40
set EC2_HOME=C:\ec2-api-tools-1.7.3.2
set PATH=%PATH%;%EC2_HOME%\bin
set EC2_URL=https://ec2.us-west-2.amazonaws.com
set AWS_SECRET_KEY=XXXXXXXXXXXXXXXX
set AWS_ACCESS_KEY=YYYYYYYYYYYYYYYY



5.Amazon EC2 API Toolsの動作確認
まずは、ローカル環境に展開したAmazon EC2 API Toolsが動作できる状態にあることを確認します。
コマンドプロンプトからenvSetup.bat実行後、続けて”ec2ver”コマンドを実行します。
バージョンが表示されればAmazon EC2 API Toolsが正常に利用できる状態にあることが確認できます。






バージョンが表示されれば、「準備編」は終了です。
お疲れ様でした。


次回「API利用編」に続きます。
※ 「API利用編」では、実際に起動・停止のバッチファイルの作成まで行います



0 件のコメント:

コメントを投稿