オンプレミス(自社運用)よりもコストを削減できると思ってアマゾン ウェブ サービス(AWS)に移行したが、意外と費用が高くて困っている。そんな声を聞くことがよくあります。
この記事では、難しい説明はできるだけ少なくして、AWSコスト削減のプロセスと方法を初心者向けに説明します。
なぜ費用が高くなるのか? どんなコスト削減方法があるのか? といった概要をざっくり把握したい方はぜひお読みください。
(2021年8月時点の情報です)
AWSの利用料が高くなる理由
利用状況により異なるので一概にAWSの料金は高いとか安いとか決めつけることはできませんが、実際にAWSのコストが増加する原因としては例えば次のようなケースが考えられます。
- クラウドの活用方法が多様化して、AWSのさまざまなサービスを利用し始めたため、その利用料が付加されている
- AWS環境へのアクセスが予測を超えた量になったため、事前の想定を超えた支払いが発生している
- 長期的に利用しているうちに状況が変化し、実際にはほとんど使わなくなった部分にも費用を払い続けている
従量課金制のサービスは利用量が増えれば当然料金も高くなります。上記の1や2のようにAWSの活用が増えたことにより料金が高くなるのは仕方ないことだといえます。
しかし、中には3のように本来不要なところにもコストが発生してしまっているケースもあります。
「無駄を削減する」という意味では、その「本来不要なコスト」に注目して改善に取り組んでいくことが大切です。
AWSコスト削減に取り組むプロセス
「無駄を削減する」ために何をすべきか?
そのプロセスは簡単で、まず現状分析に努め、高コストの原因がわかったら対策を施すという手順になります。
ただし、一度対策したら完璧になり二度と無駄が発生しないというものではないので、定期的に分析・対策に取り組むのがお勧めです。
まずは現状分析
現状分析のもっとも単純な方法はAWSからの請求内容を見ることで、それだけでもどこにコストがかかっているかを知ることはできます。
さらに、AWSはコスト削減に役立つサービスも提供しているので、それらを使って高コストの原因を探ることもできます。
ここでは代表的なものを2つ紹介します。
- AWS CostExplorer:AWS CostExplorerを使うと、サービスごとのコストが簡単に把握できます。グラフ化もできるので、視覚的にわかりやすく分析することが可能で、大まかなコストの把握から使用量の詳細な分析まで活用できます。
- AWS Budgets:AWS Budgetsを使うと、複数の条件に基づいてコストと使用状況を表示したり、カスタム予算を設定して、予算を超えたとき(あるいは、超えると予測されたとき)にアラートを受け取ったりすることができます。
その他にもさまざまなものがあるので詳細はAWSのWEBサイトでご確認ください。
削減できるコストに対策を施していく
高コストの原因がわかったら、次にそれらに対策を施していきます。
具体的な方法は後ほど紹介しますが、AWSコスト削減のためにすべきことは大きく分けると次の3つがあると言えます。
1.不要なリソースの削除や停止
現状分析で不要なリソースが見つかった場合は、削除や停止をすることで無駄な支払いを止めます。なお、これは管理の面でも重要な取り組みだといえます。
意外と、昔使っていたものが削除されないまま残っていて、今は必要ないのに費用だけは払い続けているというケースも多いようです。
2.削除できないものは使い方を改善
利用している(削除できない)リソースは必要以上のスペックを設定していないか確認して最適化を図ります。
具体的には、EC2やRDSのサイズの再検討や、利用が少ない曜日、時間がある場合は定期起動・停止の自動化を設定するなどして改善に取り組みます。
3.長期利用による割引を活用
長期間利用し続けるサービスは、一定期間継続して利用することを前提に大幅な割引を受けられる料金モデルを利用してコストを抑えます。
AWSコスト削減の具体的な方法
ここまでは大まかなプロセスを説明してきましたが、次に、いよいよ具体的なAWSのコスト削減方法の説明に入ります。
AWSのWebサイトに「AWSのコストを削減する9の方法」という解説記事があるので、それを引用しつつ、初心者向けの説明を加えてわかりやすく紹介していきたいと思います。
Amazon Web Services ブログより
AWSのコストを削減する9の方法
AWSのコストを削減する9の方法 第二回
AWSのコストを削減する9の方法 第三回
リンク先の記事で紹介されている9の方法とは下記の通りです。
#1 未使用状態のAmazon EC2やAmazon RDS インスタンスへの支払いを止める
#2 未使用状態の Amazon Redshift クラスターへの支払いを止める
#3 Amazon S3 Intelligent-Tieringを有効にする
#4 Amazon DynamoDB にはオンデマンドのキャパシティーモードを利用する
#5 十分に活用されていないEC2 インスタンスへの支払いを止める
#6 十分に活用されていないネットワークリソースを削除する
#7 EC2 スポットインスタンス を利用する
#8 Compute Savings Plans を利用する
#9 リザーブドインスタンスを利用する
この後は基本的にAWSの公開資料を初心者向けに要約する内容となります。どんなコスト削減方法があるのか、専門用語は控えめにして概要を把握したい方(初心者の方)はぜひお読みください。
初心者以外は(専門用語の多い説明を理解して自分で設定できる人は)、この記事を読まずにAWSの公式な記事を読んで実行してみても良いと思います。
また、この先の解説を読んでコスト削減の方法を把握できたとしても「AWSの知識に不安があって自社で実施するのは難しい」という課題が出てくるかもしれません。
NCDCでは成果報酬型でお客様のAWSのコストを削減するサービスも提供していますので、そうしたお悩みがある方はぜひ一度ご連絡ください。
自社で管理できるならその方が良いですが、設定変更の意味を理解せずにやってしまうと後々デメリットが生じることもあるので、自信がない場合は当社(もしくは既存のITパートナー企業等に)まず相談してみることをお勧めします。
前置きが長くなりましたが、ここから各方法の説明に入ります。
#1 未使用状態のAmazon EC2やAmazon RDS インスタンスへの支払いを止める
この方法はAmazon EC2やAmazon RDSを利用している方が対象です(一般的によく利用されるサービスなのでほとんどの方が対象になると思います)。
たとえばテスト環境や平日に自社の社員しか使わないシステムなど、夜間や休日には利用しないとわかっているものがある場合、使わない曜日や時間帯はAWSサービスの利用を停止するのがお勧めです。そうした設定をしておかないと、実際には必要ない夜間や休日の分までEC2やRDSの費用を支払うことになってしまいます。
AWSでは、AWS Instance Schedulerを用いることで、EC2およびRDSインスタンスの開始と停止のスケジュールを簡単に設定できます。
この方法は「使わない時は自動的に停止する」ようにスケジューリングするだけなので導入が容易で、かつ長期的・安定的なコスト削減が期待できます。
なお、この設定の効果についてAWSのWEBサイトではこのように説明されています。
このソリューションを使用して、金曜日の午後 6 時から月曜日の午前 6 時までインスタンスをシャットダウンする場合、週末のインスタンスを実行する場合と比べて最大 35% の節約が可能です。
#2 未使用状態のAmazon Redshift クラスターへの支払いを止める
この方法はAmazon Redshiftを利用している方が対象です。
Amazon Redshiftはクラスターごとにサイズ変更や、一時停止、再開のスケジュールを作成できます。
適切な設定をしていないと使っていない分まで無駄なコストを支払っている可能性があるので、「未使用」状態のAmazon Redshiftクラスターがないか確認して、必要であればAWSコンソールからサイズ変更や一時停止・再開のスケジュールを設定してください。
なお、この設定の効果についてAWSのWEBサイトではこのように説明されています。
金曜日の午後6時から月曜日の午前6時までクラスターを一時停止しているお客様は、週末のクラスターを実行する場合と比較して、最大35%の節約が可能です。
#3 S3Intelligent-Tieringを有効にする
この方法はAmazon S3標準ストレージクラスを利用している方が対象です(一般的によく利用されるサービスなのでほとんどの方が対象になると思います)。
Amazon S3は、適切なライフサイクルポリシを設定することでコストを削減することが可能です(具体的には、アクセスが少ないオブジェクトを定期的に自動で低コストのクラスに移行させるという設定ができます)。
こうしたライフサイクルポリシを設定していない場合、本来は節約できる無駄なコストを支払っている可能性があります。
ライフサイクルポリシを設定していない、もしくはアクセスの多寡が未知でライフサイクルポリシを設定するのが難しい場合、S3 Intelligent-Tieringというストレージコストを自動的に最適化する機能を有効にしてください。
S3 Intelligent-Tieringはアクセスパターンを監視し、2つのアクセス階層間で(頻繁にアクセスがあるデータを保存するための標準クラスと、低コストでデータを保存できる低頻度アクセス用のクラス間で)自動的にデータを移動し、コストを最適化してくれます。
なお、この設定の効果についてAWSのWEBサイトではこのように説明されています。
S3Intelligent-Tieringを利用した多くのお客様が20~30%のコストを削減することができており、理論的には最大40%節約できます。平均のデータ使用量が大きいほど、節約できます。
#4 Amazon DynamoDB にはオンデマンドのキャパシティーモードを利用する
この方法はAmazon DynamoDBを利用している方が対象です。
DynamoDBのキャパシティーモードを「プロビジョンド」に設定している場合、余分な料金を支払っている可能性があります。
キャパシティーモードが「プロビジョンド」の場合、実際のリクエストの有無は関係なく予定していたキャパシティに対しての課金になります。これを「オンデマンド」に変更すると、実際の読み取り・書き込みリクエストに対しての課金(使用した分だけの支払い)となるため、コストを削減できる可能性があります。
なお、この設定の効果についてAWSのWEBサイトではこのように説明されています。
コスト削減額はアプリケーションがDynamoDBのテーブルで実行する読み取りと書き込みの数によって異なります。
#5 十分に活用されていないEC2 インスタンスへの支払いを止める
Amazon EC2を利用している方が対象です。
EC2インスタンスのCPU使用率が40%未満の場合、必要以上のスペックを設定して無駄な料金を支払っている可能性があります。
Cost Explorerのリソース最適化の推奨事項を使用することで、過剰な設定になってしまっているEC2インスタンスを特定し、ダウンサイジングや削除が推奨されるものがないか確認することができます。
#6 十分に活用されていないネットワークリソースを削除する
AWSを利用しているすべての方が対象です。
Trusted Advisorというサービスを使用することで、削除が必要なリソースを特定することができます。Trusted AdvisorはAWS環境を検査し、システムパフォーマンスの向上、セキュリティに関する推奨事項等を提示するサービスですが、重要な検査項目のひとつにコスト最適化も含まれています。
特に、Route 53、ELB、EIP等のネットワークリソースで削除できる可能性のあるものの発見に役立ちます。
もし全く使用していないリソースをそのままにしていると、実際は使っていないものにコストを支払い続けていくことになるので、Trusted Advisorを使ってそうした無駄がないか確認し、もしあればそれらのリソースを削除または停止することをお勧めします。
#7 EC2スポットインスタンスを利用する
Amazon EC2を利用している方が対象です。
Amazon EC2には、利用されていないインスタンス(AWSが保有している余剰リソース)の一部を低コストで利用できる「Amazon EC2 スポットインスタンス」という購入オプションがあります。スポット料金は変動式で長期的な需給に基づいて随時調整されており、「オンデマンド」の料金よりも大幅に割安です。
スポットインスタンスは安価である一方、AWSが持つ余剰リソースに依存するため使いたい時に使えなくなる可能性がありますが、この点を考慮して問題のない用途の場合はまずスポットインスタンスの利用を検討することをお勧めします。
例えば、テスト環境のようなものであればスポットインスタンスの利用で問題ないでしょうし、商用利用しているシステムでも、うまく「オンデマンド」と「スポット」を組み合わせる設計をすればスポット料金のメリットを享受できます。
なお、スポットインスタンスを利用する効果についてAWSのWEBサイトではこのように説明されています
スポットインスタンスは、オンデマンド価格と比較して最大で90% の割引でご利用いただけます。今すぐ導入すれば、コスト削減を開始できます。
#8 Savings Plansを利用する
Amazon EC2、AWS Lambda、AWS Fargate、Amazon SageMakerを利用している方が対象です。
※参照元のAWSの記事では「Compute Savings Plans」が紹介されていましたが、この記事では新しく導入されたSageMaker Savings Planも含めて紹介しています。
上記の各サービスには、1年または3年の期間で特定の使用量を契約するかわりに、「オンデマンド料金」より低コストで利用できる「Savings Plans」という料金モデルがあります。
一定のリソースを継続的に利用しており、オンデマンド料金を支払っている場合、Savings Plansを利用することでコストを削減できます。
ただし、購入後のキャンセルはできません。
Savings Plansには、「全額前払い」、「一部前払い」、「前払いなし」の3種類の支払い方法が用意されており、前払いが多いほど割引率も高くなります。
なお、このSavings Plansを利用する効果についてAWSのWEBサイトではこのように説明されています。
オンデマンド価格と比較して、1年間の前払い無しのCompute Savings Plansは最大で54%の割引を提供し、購入後数時間以内にコスト削減を実現できます。このコスト削減アプローチはAWSとの1年間のコミットメントが必要ですが、損益分岐点は通常7~9か月です。
Savings Plansは長期的な利用を前提に割引を受けるため、長期契約したのに実際にはその半分しか使わなかったというような場合は逆に無駄なコストを増加させてしまう可能性もあります。単価を下げる代わりに「いつでも利用停止できる」というクラウド利用のメリットのひとつを犠牲にしていることになるので、その点には気を付けて利用してください。
#9 リザーブドインスタンスを利用する
Amazon EC2、Amazon RDS、Amazon ElasticSearch Service、Amazon DynamoDB、Amazon ElastiCache、Amazon Redshiftを利用している方が対象です(EC2やRDSは一般的によく利用されるサービスなのでほとんどの方が対象になると思います)。
※参照元のAWSの記事では「リザーブドインスタンス」が紹介されていましたが、この記事では同様の仕組みである「リザーブドキャパシティ」「リザーブドキャッシュノード」「リザーブドノード」の対象サービスも含めて紹介しています。
上記の各サービスには、1年契約または3年契約で利用を予約することで「オンデマンド料金」に比べて大幅な割引を受けられる「リザーブドインスタンス」という料金モデルがあります。
一定のリソースを常時・継続的に利用しており、オンデマンド料金を支払っている場合、リザーブドインスタンスを利用することでコストを削減できます。
ただし、購入後のキャンセルはできません。
リザーブドインスタンスには、「全額前払い」、「一部前払い」、「前払いなし」の3種類の支払い方法が用意されており、前払いが多いほど割引率も高くなります。
なお、このリザーブドインスタンスを利用する効果についてAWSのWEBサイトではこのように説明されています。
1年間の前払い無しのリザーブドインスタンスの場合、オンデマンド価格と比較して最大 42%の割引を提供します。この割引は購入から数時間以内に実現されます。このコスト削減アプローチは、AWSとの1年間のコミットメントが必要ですが、損益分岐点は通常7~9か月です。
リザーブドインスタンスも「いつでも利用停止できる」というクラウド利用のメリットのひとつを犠牲にして単価を下げる契約になるので、下手をすると無駄なコストを増加させてしまう可能性もあります。その点には気を付けて利用してください。
以上が具体的なAWSコスト削減の方法です。
成果報酬型でAWSのコストを削減する方法
いかがでしたでしょうか。もしこうしたコスト削減(最適化)の設定にまったく取り組んだことがない方がいればぜひ挑戦してみてください。
ただし、設定変更の意味を理解せずにやってしまうと後々デメリットが生じることもあるので、自信がない方は当社(もしくは既存のITパートナー企業等に)まず相談してみることをお勧めします。
「自社でやるならともかく、外部に相談するとコストを削減するためにまた新たなコストが発生してしまうのではないか?」と心配な方はぜひ一度NCDCにご相談ください。
NCDCでは成果報酬型でお客様のAWSのコストを削減するサービスを提供しています。このサービスは実際に削減できたコストに応じてその一部を報酬としていただくので、お客様は新たなコストの心配をする必要なくコスト削減のメリットのみを享受できます。