クラウドコストの削減、終わりのないこの問いに悩まされている方は多いのではないでしょうか?クラウドコスト増大の原因を特定するには、インフラだけでなく、アプリケーションの側面からも見ることが効果的です。本ブログではNew Relicを活用したコストの可視化、コスト増大の要因となるインフラやアプリケーションの問題を特定する方法や事例をご紹介します。
クラウド市場の拡大とコストに関わる課題
現在のビジネスに必要不可欠なインフラ基盤となっているクラウドの市場は目覚ましい成長を遂げており、国内のクラウド市場規模は2029年には2024年の約2倍になるとも言われています。(参照)これは単なる市場の拡大を表しているだけでなく、クラウド利用に伴うコストの増大やその管理の重要性も同時に示しています。
一方で、一部調査データによるとクラウド予算の使途を正確に理解できていない企業が多く、また、全体の利用コストのうち、少なくない部分が浪費コストであるということも報告もあります。これはクラウドが柔軟であるが故に自由にリソースを導入できるため、シャドーITや未使用リソースの放置といった無駄を生み出していることが一つの原因です。また、ビジネスニーズの高度化や技術の進化に伴いシステム構成は複雑化しており、コスト増加の要因が見えづらくなっていることも理由として挙げられるでしょう。
技術的な負債がクラウドコストの増加を招き、企業の財務状況を圧迫し、最終的には業績悪化へと繋がります。クラウドコスト管理は今や重要なビジネス戦略のテーマの1つです。
New Relicを活用したクラウドコスト適正化のアプローチ
クラウドコスト適正化の第一歩は、コストの正確な可視化と問題の特定です。サービスやチームごと、特定の環境ごとにコストを詳細に把握して、予算超過しているサービスを特定し、原因を探っていく必要があります。
New Relic Cloud Cost Intelligence はAWS CUR (Cost and Usage Reports)などのデータを取り込み、生のコストデータに対してチームや環境などのタグ付けを行い、分析しやすい形で可視化します。これにより組織はコストの全体像を把握し、どこに非効率な支出があるかを迅速に見極められます。
サービスごとのクラウド支出が把握できたら原因を追求していきます。New Relicはコストとテレメトリーデータを一つのプラットフォームに統合できますから、複数のツールを行き来することなく原因追求までの時間を大幅に短縮し、意思決定のスピードを上げることができます。
クラウドコスト増大の要因は、インフラやアーキテクチャに由来するものもあれば、アプリケーションの作りに由来するものもあります。順にみていきましょう。
インフラ・アーキ視点でのコスト適正化
過剰なリソース割り当てとスケールの適正化
ピークを想定した過剰なリソース割り当ては、クラウドコスト増大の大きな要因の1つです。オーバースペックなオンプレのシステムをそのままクラウドリフトしていたり、オートスケールするような設計になっておらずピーク時を見越して余分にマシンリソースを割り当てている場合がこの問題に陥りがちです。
アプリケーションに対する負荷と、インフラリソースの使用状況を合わせて観測することで、過剰な割り当てを特定できます。サービスレベルを維持できるような適度な割り当てにすることでコストを削減できます。
以下の記事では、負荷試験でアプリケーションの性能に余裕があることを特定し、インフラのキャパシティを見直してAWSコストを60%削減した例が紹介されています。
不要・非効率なリソースの特定と削減
利用実態のない、もしくは利用頻度にあっていないリソース割り当てにより無駄にコストがかかっているケースもあります。クラウドはリソース割り当てが容易にできますが、その後確実に落とさないとアクセスされていないサーバーやデータベースなどが残ることで余計なコストになっている場合もあります。また、例えばアクセス頻度の低いデータを高いティア(ストレージクラス)のストレージに保存していたり、過剰な頻度のバックアップを取得しているという場合も要求仕様以上のスペックにコストをかけてしまっていることになります。
New Relicでは、クラウドリソースの利用状況を可視化することで利用実体のない、もしくは利用実体とあっていないクラウドリソースを特定し、解放することを可能にしますのでクラウドコストを削減することができます。
以下の記事では、New Relicでメトリクスを詳細に分析し、不要なリソースの特定や効率的なリソース構成への最適化などを通じてクラウドコストの削減に成功した例が紹介されています。
ネットワーク転送量・CDNの適正化
想定外のデータ転送量や、CDNのキャッシュヒット率の低さも、コスト増の要因となり得ます。例えば、クラウドプロバイダやクラウドサービスによってはクラウド外に出ていくアウトバウンド通信に対して課金がされるものがありますので、意図しない通信が外部に発生していたりするとコストが無駄に発生してしまいます。また、システムに入ってくるインバウンド通信に間しても例えばCDNにキャッシュを設定することでオリジンサーバーへの負荷を抑え、結果的にクラウドリソースのコストを抑えられることもあります。
New Relic NPM は、クラウドの通信を可視化することで予期しない外部への通信が発生しているかも簡単に把握することができます。
また、アプリケーションへの通信とCDNのキャッシュヒット率のデータを組み合わせることで、より良いキャッシュ戦略を立て、結果としてクラウドのコストを削減することが可能になります。
以下の記事では、CDNのキャッシュを効率的に利用することで、コンピュートリソースを減らしてコストを削減した例が説明されています。
ここまではインフラやアーキテクチャの観点からコスト増加の要因を特定し改善する方法、およびその事例を紹介しました。ご紹介した方法はアプリケーションの中身を深く理解していなくても実施可能な類のものです。これだけでも十分にクラウドコスト削減効果はあります。
一方で、アプリケーションの実装の問題がクラウドコストの増加の要因になっているケースは救うことはできません。例えば、そのような場合、問題の原因究明ができないのでクラウドリソースをスケールアップしたりスケールアウトして急場を凌ぐような、お金のかかる対応が必要となり、結果的にクラウドコストは増加してしまいます。
以降では、アプリケーションに起因してコストが膨らむケースと、その対応、事例についてご紹介します。
アプリケーション視点でのコスト適正化
繰り返しになりますが、クラウドコストの増大はインフラだけでなく、アプリケーションの非効率なコードや設計にも深く起因しています。アプリケーションの中身や挙動をよく理解し、コスト増加の要因を掴むことが重要です。
非効率なコード・クエリの改善
アプリケーションの非効率な処理は過剰にコンピューティングリソースを必要とします。また、アプリケーションからクラウドサービスの利用も増えるのでコスト増加の要因となります。
たとえば、典型的な例としては、データベースからデータを取得する際に、不必要なクエリが大量に発行されてパフォーマンス上の問題が発生することがあります。これは一般的にN+1問題と呼ばれていますが、パフォーマンス上の問題が発生するだけでなく、処理時間が長くなることでコンピューティングリソースも必要としますし、データベースアクセスが増えるのでデータベースサービスのコストもかかります。
New Relic APM は、アプリケーションをソースコードレベルで可視化し、解析可能にすることで、非効率な処理を発見することを可能にします。非効率な処理を排除できればリソース割り当てを減らしたり、マネージドサービスの呼び出しも減りコストが削減できます。
以下の記事は、アプリケーションの処理をAPMによって可視化して、N+1問題を検出・改善することで性能改善とコスト削減を実現した例が紹介されています。
DBクエリ・DB設定の見直し
非効率なデータベースクエリは高スペックなDBを必要とし、結果的にサービス利用コスト増加の原因となります。インデックスが貼られていないテーブルへのクエリ、逆に必要以上にインデックスを貼っている、非効率なテーブルの結合、SELECTで必要以上の属性を取得している、などなど、負荷をかける要因はいくらでもあります。
New Relic APM は、アプリケーションの処理をソースコードレベルで可視化しますが、同様にデータベースクエリやその実行プランも把握可能です。処理時間の長いクエリ、インデックスが貼れれていないクエリなどを特定し、改善することでデータベース、およびデータを処理するアプリケーション側の負荷を下げることを可能にします。
以下の記事では、New RelicによってDB負荷の高騰を検出、改善してDBへI/Oを減らし、コストを大幅に削減した例が紹介されています。
ログ量適正化によるコスト削減
過剰なログ出力は、ログ保管コストを増大させるだけでなく、ログ出力に伴ってマシンパワーを必要とします。現状、ログ中心のトラブル対応をしている場合はありとあらゆる情報をログで送っておりログの保管コストや調査コストが膨らんでいるケースも多くみられます。
New Relic APM は、アプリケーションの処理の詳細やパラメータ、スタックトレースなどのエラーの情報など多様な情報を取得しますので、ログを見なくてもパフォーマンスボトルネックやエラーの分析が可能になります。メソッドの開始終了、スタックトレース、パラメータなどそのようなログはもはや個別に作り込んで出力する必要すらありません。最低限必要なログに止めることでログ保管コストも大幅に削減することが可能になります。
まとめ
この記事ではクラウドコストの削減のためのアプローチや事例についてご紹介しました。特にアプリケーションの最適化は、コスト削減と、高いパフォーマンスを同時に実現できる非常に重要な活動です。これまでインフラ視点でのみコスト削減の可能性を探っていた方や、この記事で取り上げた方法を試してみたことがない方は是非アプリケーション視点でのコスト適正化もお試しください。
また、コストの適正化は一度実施して終わりではありません。アプリケーションの改修などが簡単にコスト増加の要因になりえます。システムの状況をリアルタイムで把握し、継続的に改善していきましょう。
その他
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!