コストを下げろと言われたら~AWSでまずやること~

こんにちは。[CYBIRDエンジニア Advent Calendar](http://qiita.com/advent-calendar/2014/cybird) 9日目の[gucchon](http://qiita.com/gucchon)です。
新卒2年目、webエンジニアです。

8日目は[keitarou](http://qiita.com/keitarou)さんの[GitHubをもっと便利にするためのChrome拡張とか](http://qiita.com/keitarou/items/7810953d2d05b7a78108)でした。
全くGitHub使えてなかったんだな…と身にしみる内容でした。お恥ずかしながら…

## 本日の内容
「サーバ費、もっと下がらない？」

なかなか聞きたくない言葉ですね。サービスを継続させていく上では当然コスト面をしっかり考えて運用をしていかなくてはいけないのですが、まぁ正直めんd...少しばかり手間です。ただ、AWSならある程度簡単にコスト管理ができて、対応策も用意されているので助かりますね。それでも誰もやりたがらないけど(ﾎﾞｿｯ

ということで、コストを下げろと言われてしまったとき、CYBIRDのコストカッター、gucchonがまずやっていることをご紹介したいと思います。

## まずは現状確認
まずは本当に最初の最初、高いと言われてしまった現状のAWS費用の確認をします。

Billing & Cost Management > Cost Explorer から Launch Cost Explorer を選び、Cost Explorerを表示させます。
ここでは、月または日毎のAWS利用額をグラフで確認できます。しかも、EC2、RDSといったサービス毎の利用額が表示されるので、高コストの原因にある程度当たりを付けることができます。

![cost_explorer1.png](https://qiita-image-store.s3.amazonaws.com/0/60647/3f9ee7cc-2237-019c-6a99-a8f7da55fd81.png)

ただし、この機能を利用するためには、Billing画面でCost Explorerを有効化しておく必要があります。新しく有効化を行った場合、利用できるようになるまでには少し時間がかかる(当月課金データが閲覧可能になるまで約24時間以内)そうなので、予め設定しておきたいですね。

## 無駄を省く
続いて確認するのは無駄が発生していないかです。なんでこんなにかかってるんだ？と思ったら、誰かが立ててちょっと使ったインスタンスがずっと放置されていた…といったしょうもない理由だったりするのはよくあることです。ほんと、何台も何台も…

そんな無駄を簡単に発見できるサービスがTrusted Advisorです。
Services > Trusted Advisor を選択、Trusted Advisor Dashboardを開きます。

![trusted_adviser1.png](https://qiita-image-store.s3.amazonaws.com/0/60647/06768745-9138-d92e-89e4-666bc289ecfd.png)

Trusted Advisorについて簡単に説明すると、「AWS環境を精査し、利用者が取るべきアクションを推奨してくれるサービス」です。コスト最適化、セキュリティ、耐障害性、パフォーマンスの4つのカテゴリに分類される項目を自動でチェックしてくれます。

ただし、無料で利用できるのはほんの一部の機能のみ。今回紹介するコスト最適化についてのチェックを利用するためには、「ビジネス」または「エンタープライズ」レベルのサポートプランに加入していなければなりません。コストを下げろと言われている中、サポートプランをアップグレードするという暴挙もないだろうと思うので、「ベーシック」や「開発者」レベルのサポートを利用している場合は諦めましょう。

さて、今回は4項目の内の1つ Cost Optimization(コスト最適化) を確認します。
緑のチェックマークと、黄色の!マークは調査が推奨される項目、赤の!マークはアクションが推奨される項目です。さらにそれぞれの詳細も確認できます。

例えば「使用率の低いAmazon EC2 Instances」詳細を見てみると、インスタンス名や、使用率が低いと判断された原因についてまで、表で確認することができます。極めて便利です。

![cost_optimization1.png](https://qiita-image-store.s3.amazonaws.com/0/60647/11580b80-2a77-29ad-719e-814565c5438b.png)

もし赤の!マークの項目があった場合は、無駄が発生している可能性が高いのできちんと調査・対応しましょう。

ちなみに私の場合、「何人かで共通使用しているアカウントに、利用頻度の低いインスタンスが大量にあるけど、これって実際使ってるの？」というのを一々メンバーに確認したことがあります。Amazonさんに無駄っぽいよと判断されてはいても、それを削除しちゃっていいのかは使用している人にしかわかりませんよね。なので、結局は一人一人のコスト意識が大切なわけです。ほんとに！

## リザーブドインスタンスの購入を検討してみる
使用額を調べた結果、EC2やRDSが定常的に高コストがかかっていた…というパターンがやはり多いのかなと思います。これらのコストを削減するのならリザーブドインスタンスを購入するのが手っ取り早いです。

リザーブドインスタンス(以下、RI)は、1年または3年分の予約金を支払うことで、その期間の時間課金に割引が適応されて、時間単価が安くなる仕組みです。長期間の使用が確定しているインスタンスがあるのなら、購入するだけで "オンデマンド料金に比べて最大60%割安" という大幅なコストダウンが望めます。

RI購入は、EC2 Dashboard上のReserved InstancesからPurchase Reserved Instancesを押し、希望するインスタンスタイプを選択するだけです。RDSの場合も、RDS Dashboardから同様の手順でOKです。簡単ですね。

![reserved_instances1.png](https://qiita-image-store.s3.amazonaws.com/0/60647/48924e84-3f6b-da18-2e3e-e426352e6220.png)

注意点としては、RIは基本的に購入キャンセルができません。インスタンスタイプやMulti-AZ、利用期間など、途中で変更したくなっても変えられないので慎重に検討するべきでしょう。

## EC2 RI MarketplaceでのRI購入を検討してみる
1年も使わないんだよなぁ…という場合は、EC2 RI Marketplaceでの購入という方法もあります。

RIを購入したものの、「インスタンスタイプが合わない」「サービスが予定より早くクローズしてしまった」といった理由から、RIの利用期間が余ってしまった…という人のために、必要なくなったRIの権利をMarketplaceで売れる仕組みが用意されています。つまり、Marketplaceで出品された "利用期間1年以下の中古RI" を購入してしまえばいいわけですね。

EC2 RI Marketplaceでの購入はRIを通常購入するのと同じで、希望するインスタンスの条件を入力しSearchを押します。検索条件にマッチする中古RIがあれば、新品RIの上に一緒に表示されます。画像の通りSellerが3rd Partyとなっているものがそれですね。

![reserved_instances2.png](https://qiita-image-store.s3.amazonaws.com/0/60647/553a7e96-510b-c79a-3975-06dc16c30629.png)

ちなみに中古RIを売るということも当然可能なわけですが、その場合はアメリカの銀行口座が必要なので注意してください。また、MarketplaceでのRIの売り買いはEC2のみ可能で、RDSではできません。

その他、リザーブドインスタンスについての詳しい説明は、非常にわかりやすい[神スライド](http://www.slideshare.net/HiroshiTakayama/jawsdays20140315-publix)があるのでそちらをご覧になるのが良いでしょう。


※追記
RIについて、こちらの方が新しい情報が説明されています。
=> [[AWSマイスターシリーズ]リザーブドインスタンス&スポットインスタンス](http://www.slideshare.net/AmazonWebServicesJapan/20131023-aws-meisterregeneraterispotpublic)

また、今月(2014年12月)よりRIの販売モデルが新たに更新されています。これについては近々営業担当の方に話を聞けそうなので、またブログを書く…かも…
 => [【AWS発表】EC2のリザーブドインスタンスモデルがシンプルに](http://aws.typepad.com/aws_japan/2014/12/new-ec2-ri.html)

ご指摘いただいた[@hiroshix](http://qiita.com/hiroshix)さん、ありがとうございます！


## 最後に
AWSでコストダウンを要求されたときに、私がまず取り掛かることについて紹介しました。

他にも弊社では、負荷や時間帯にあわせたオートスケールや、スポットインスタンスの利用によってコストダウンを実施していますが、これらを導入するにあたっては、サービスの構成も含めた検討をする必要があるでしょう。ちなみにスポットインスタンスは海外リージョンの場合、結構安値で安定してたりするので、リージョンによってはおすすめです。是非ご検討を。

明日は、私の1年先輩の[asuky](http://qiita.com/asuky)さんです。わくわくが止まりませんね。