Amazon EC2 利用コストを可視化してリザーブドインスタンス(RI)を使い倒す
Amazon Elastic Compute Cloud (EC2) を対象に、リソースがどの程度使われているのかを把握し、Amazon EC2の割引サービスであるリザーブドインスタンス(RI)の活用につなげるアプローチについて紹介します。
APIを活用したクラウドの「コストの見える化」改革
- 2019年08月20日公開
APIを活用したクラウドの「コスト見える化」改革
第1回 Amazon EC2 利用コストを可視化してリザーブドインスタンス(RI)を使い倒す
- AWS管理者アカウント 1個
- Linuxマシン(VM) 1台
- :60分
- 効果:
さて、みなさまクラウド活用されていますか? このブログでは国内で利用の多いクラウドサービスについて、APIを利用したクラウドサービスの利用状況の確認、および無駄なリソースの把握によるサービス利用費用削減をテーマに執筆していきます。 対象クラウドサービスは以下を予定しています。 今回はAmazon Elastic Compute Cloud (EC2) を対象に、リソースがどの程度使われているのかを把握し、Amazon EC2の割引サービスであるリザーブドインスタンス(RI)の活用につなげるアプローチについて紹介します。 第1回ということで、必要となる環境の構築方法や必要となる前提知識なども合わせて説明していきます。 どうぞよろしくお願いいたします。 一般的にRDSとEC2の割合が多いので、まずはこれらを対象に状況を把握するのがコスト削減の近道です。 AWSのRIは、特定のインスタンス(サーバ)リソースに紐づくものではなく、一つのRI契約で複数のインスタンスリソースに適用されます。1時間単位で精算され、リザーブドインスタンス契約を使い切るまで複数のインスタンスに適用されます。 AWSのRIは、インスタンスサイズ(large,smallなどの性能スペック)が異なっていても適用されます。※mediumをRI契約したらsmall×2でもOK。 各インスタンスサイズは正規化係数という数値で管理され、契約したRIの正規化係数分割引されます。※mediumは[2]、smallは[1] インスタンスタイプ(t3,m5など)は合わせる必要があります。※t3のRI契約がm5に適用されることはない。 AWSのマネジメントコンソール画面からにログインし、IAMのサービスを開きます。 AWSのIAMサービスから、APIによるデータ取得に利用するユーザを作成します。ユーザー作成時に「プログラムによるアクセス」にチェックを入れてください。 上記画面で表示された「アクセスキーID」と「シークレットアクセスキー」を後ほど利用しますのでcsvファイルのダウンロードなどで保管してください。 ユーザーを作成後、API実行に必要な権限を割り当てます。上記画面で「AmazonEC2FullAccess」の権限を付与してください。 API実行はLinuxのコマンドを利用して実行します。今回は仮想化ソフトウェアのVirtualBoxとCentOS7を利用します。 AWSのAPIはJSON形式のデータです。Linux上でJSONデータを整形するためのツールである「jq」を以下コマンドでLinuxのコマンドラインからインストールしてください。 $ sudo yum -y install epel-release $ sudo yum -y install jq AWSからAPIを実行するためのSDKが提供されています。今回はJavaScriptSDKを利用しますので以下コマンドでLinuxのコマンドラインからインストールしてください。 $ sudo yum -y install npm $ npm install aws-sdk さて、それではAPIを使ってデータを取得していきましょう。 まずは現状どの程度のEC2リソースが利用されているのかをAPIを使ってデータを取得します。 APIは「AWS.EC2.describeinstances」を利用します。 AWSのマネジメントコンソール画面でユーザーを作成した際に取得した認証ファイルから以下のファイルを"credential.json"として作成します。"XXX"となっているそれぞれの値は環境に合わせて修正してください。 実際にAPIを実行するスクリプトファイルを上記の認証ファイルが存在する同フォルダ内に"sample.js"として作成します。以下の内容をコピーして利用ください。 作成したスクリプトを以下のコマンドで実行します。 JSON形式出力 $ node sample.js | jq -r '.[].Instances[] | [.InstanceId, .LaunchTime, .InstanceType, .State.Name]' CSV形式出力 $ node sample.js | jq -r '.[].Instances[] | [.InstanceId, .LaunchTime, .InstanceType, .State.Name] | @csv' スクリプト実行時の結果のサンプルを以下に示します。このデータを整形して、長時間停止されていないサーバのリソースを調べます。 前述したとおり、RIについてはインスタンスを跨って割引が適用されるため、細かく停止、起動を繰り返すサーバについても割引が適用されます。 今回の記事ではEC2のAPIではこのようなサーバの正確な情報を取得することが難しいため、割愛します。CloudTrailやCloudWatchのAPIを利用することで、サーバの起動タイミングや停止タイミングのイベント情報を取得可能です。 上記のデータを加工して、長時間起動している各インスタンスタイプの正規化係数を求めます。CSV形式の出力データをExcelで加工するのが簡単だと思います。 c5については、リニアに利用量が上がっており、将来増加する可能性が高いと思われます。 t3については、この1か月に急激に利用量が上がっており、t3というCPU処理バースト向けのインスタンスタイプを利用していることから、短期間の起動でバッチ処理などに利用されている可能性が高いでしょうか。この利用方法が一時的なものなのか、定常的なものなのかを判断してRIの計画を立てる必要があります。 m5については、ほぼ一定でインスタンスIDが変わらないことから、定常的に永続起動しているものということが容易にわかります。RIを優先的に適用すべきデータとなります。 上記のデータから、今回はc5は24xlarge(正規化係数:192)、m5のxlarge(正規化係数:8)を契約することとしました。 AWSのコンソール画面、EC2サービスの画面から、「リザーブドインスタンスの購入」ボタンから購入します。 3年のRI契約の場合ほぼ半額程度の金額となるため、少し計画より利用サーバ数が少なくとも十分採算は取れますが、万が一計画したRIから大きく予定が崩れる場合、RIの残期間の権利を他者へ販売することも可能です。
必要な知識を得る
AWSの費用内訳
RIの仕組み②
RIの仕組み③
作業に必要な準備をする
AWS管理者アカウントの手配①
AWS管理者アカウントの手配②
AWS管理者アカウントの手配③
AWS管理者アカウントの手配④
Linuxマシンの手配
jqツールのインストール
AWS SDKのインストール
APIを使ってデータを取得する
1.今回利用するAPI
2.認証情報ファイルの作成
{
"accessKeyId": "XXXXXXXXXXXXXXXXXXX",
"secretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
3.スクリプトの作成
const AWS = require('aws-sdk');
//認証情報の読込 AWSの日本Regionを指定
AWS.config.loadFromPath('credential.json');
AWS.config.update({ region: "ap-northeast-1"});
//params
const params = {};
//EC2 obj
const ec2 = new AWS.EC2();
//APIの実行
ec2.describeInstances(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(JSON.stringify(data.Reservations)); // successful response
});
4.実行
5.結果の確認(JSON形式)
[
"i-XXXXXXXXXXXXXXXXX",//インスタンスIDが出力されます
"2018-07-13T00:34:08.000Z",//最終起動時刻が出力されます
"m5.large",//インスタンスタイプが表示されます
"running"//サーバの状態が表示されます。
]
[
"i-YYYYYYYYYYYYYYYYY",
"2018-07-10T05:30:02.000Z",
"t3.micro",
"stopped"
]
InstanceType
12month+
6month+
3month+
2month+
1month+
c5
8.0
40.0
104.0
154.0
202.0
t3
4.0
8.0
12.0
15.0
168.0
r5
4.0
16.0
40.0
48.0
56.0
m5
10.0
10.2
10.3
10.5
10.5
RIを契約する
NTTテクノクロス株式会社
ビジネスソリューション事業部