クラウドデータのコストを最適化する:先手を打ってクラウドデータプラットフォームのコストを削減する4つの手順

クラウドデータプラットフォームを管理した経験があれば、きっとこんな電話を受けことがあるでしょう。電話してくるのは十中八九、財務部かCFO(最高財務責任者)室。内容は毎月の支出に関する問い合わせで、たいていは次のどちらかです。

  • 使用量が年間予算と契約量を超えそうな勢いです。いったい何が起こっているのですか?

  • 使用量はどうなっているのですか?先月は30%も跳ね上がっています。

どちらも、クラウドデータプラットフォームの管理者にとっては明白で緊迫した問題ですが、回避できないことではありません。この記事では、クラウドデータプラットフォーム(CDP)のコスト管理機能を支える4つのポイントについて説明します。CDPの例としてSnowflakeを取り上げますが、機能や原理は他のCDPにも当てはまるはずです。 

クラウドインフラストラクチャーの財務管理(FinOps)は、今日の組織にとって喫緊の課題の1つです。Gartnerによると、全クラウドデータのなかで、クラウドデータの消費量は2016年の10%未満から、75%にも達すると予測されています。それを考えると、CapitalOne SlingShotCloudZeroのように、Snowflakeデータプラットフォームのコストを管理する新しい製品が登場しているのは当然といえるでしょう。この状況は、サードパーティーツールとCDPのツールのどちらを使っていても、あるいはカスタムソリューションを構築していても変わりません。

可視性

「測定できないものは管理できない」という有名な言葉があります。これはコスト管理にも当てはまり、コスト管理機能を推進するうえでも出発点です。使用量とコストの可視性を追求するなかで、CDPプロバイダーは、観測可能性を高めることが顧客にとってもベンダーにとっても望ましいことに気づきました。その多くが、可視性の向上を図るためのダッシュボードやユーザーインターフェイスを実装し始めています。リアルタイム、またはほぼリアルタイムで使用量の指標を把握できる一元的な可視化機能は不可欠ですが、コスト管理の機能はさらに徹底したものでなくてはなりません。大規模なクエリーが原因で2万ドルもの超過料金が発生することも、珍しくはないからです。

使用量に関するインサイトを可視化するうえで欠かせないのが、リソースに追加のメタデータをタグ付けすることです。クラウドデータプラットフォームでは、ベンダー各社が豊富なメタデータ機能を顧客に提供しています。粒度の高い使用量データにメタデータつまりタグを付加すれば、使用量、パフォーマンス、コストに関する貴重なインサイトが得られます。リソースに関する使用量とコストについて理解を深め、それを事業部門とすり合わせて、その価値を理解できるようになります。コンピューティング、タスク、ストレージのようにコストの原因となるリソースすべてに、必ずメタデータを設定しましょう。Snowflakeの場合、ユーザーレベルとセッションレベルでクエリーへのタグ付けがサポートされています。クエリーを実行するたびに、クエリー履歴にメタデータが記録されます。

ALTER USER sonnyrivera SET query_tag = ‘finops analysis’;
ALTER session SET query_tag = ‘finops analysis’;

SELECT query_id,
       query_tag
FROM   snowflake.account_usage.query_history
WHERE  query_tag = ‘finops analysis’

タグのために質の高いタクソノミーを確保すると、コスト管理や使用量管理にとどまらない活用が可能になります。ぜひ覚えておいてください。たとえば、プライバシーやアクセス管理のポリシーを動的に適用するメタデータドリブンのポリシーをプラットフォームが提供しています。

クラウドデータのコストのなかでは、コンピューティングコストがかなりの部分を占めることが多いので、それを綿密に追跡しておくことは重要です。ここでも、仮想ウェアハウス(エラスティックコンピューティング)に追加のメタデータを付加すると、インサイトが強化されます。また、dbtのようなツールを使えば、データモデルを開発する際にメタデータのタグ付けが可能になります。 

タグを付けて確認すべきリソースは、仮想ウェアハウスだけではありません。いわゆる「サーバーレス」プラットフォーム機能にも、特に注目してください。サーバーレス機能は、使い方が簡単という点では優れていますが、目に見えない、管理の届かないコストが発生する原因にもなります。サーバーレス機能は、以下のカテゴリに分類されます。

  • SnowflakeにおけるSnowpipeのような自動インジェスチョン

  • バックグラウンドタスクやスケジュールタスク

  • 自動の再インデックスまたは再クラスタリング

いくつかヒントをご紹介します。

  • 仮想ウェアハウスには、必ず自動停止や自動再起動を設定してください。

  • 使用量のトレンドを可視化します。簡単な予測でも、数千ドル、数万ドルの削減になることがあるものです。

  • 仮想ウェアハウスの総数を、時間経過に沿って可視化して追跡し、コンピューティングの無秩序な拡大を防ぎます。

  • ウェアハウスの使用量を測定します。一般的に、多すぎる場合には同時実行数または一定サイズ未満のリソースが多いと判断でき、少なすぎる場合は消費量を無駄にしていると判断できます。

  • あらゆる環境(開発、QA、本番)について使用量とコストを可視化します。

  • 他のコンピューティングサービス(分析用ウェアハウス、データフィードなど)からのリアルタイムストリーミングまたは変更データキャプチャ(CDC)は、別々にタグ付けして監視します。

  • 実験を重ねて単純化します。 

監視と管理

インサイトを可視化できたら、次はそれを実行に移しましょう。まず、コスト管理の機能にはプロアクティブな監視と自動の管理が必要になります。

コスト管理に欠かせない要素が、リソースの監視とアラートですが、その機能はCDPごとに異なります。したがって、正しく機能させるためには、まずCDPについて監視とアラートの機能を確認してください。  

一例として、Snowflakeのアプローチを調べてみましょう。Snowflakeには、アカウントレベルとウェアハウスレベルでリソースモニターの機能があります。リソースモニターは、使用量を監視し、クオータと比較したうえでアクションを実行します。複数のリソースを1つのリソースモニターにグループ化できるので便利です。Snowflakeのリソースモニターでは、次の3種類のアクションがサポートされています。

  • 通知のみ

  • 通知と停止

  • 通知と即時停止

監視とアラートについては、以下のベストプラクティスを参考にしてください。

  • アラートのみを実施する組織アカウントごとにリソースモニターを作成する

  • クオータ、通知、サービス停止のアクションまたはルールを使って、コストの原因となるリソースすべてを監視する。

  • リソース監視の範囲外となるサーバーレス機能については、すべてメタデータタグを追加する。 

  • 必要な場合には、追加のカスタムアクションを使用して、アラートとサービス停止に対応する。

最適化

コストパフォーマンスとは、コストとパフォーマンスの関係を表す尺度ですが、それを理解して解釈するのは、必ずしも容易ではありません。消費量ベースの価格設定の場合、コストパフォーマンスはコスト管理の一形態ともいえます。下の図を見てください。XS規模のコンピューティングのほうが、XL規模のコンピューティングより高コストで、しかもパフォーマンスが劣っているのは、なぜでしょうか。2XLから3XLへと進むと、コストが60%も跳ね上がる一方でパフォーマンス上のメリットがほとんどないのは、なぜなのでしょうか。1つ目については、コンピューティングリソースによるデータ流出、つまり事実上のスラッシングが原因になっている可能性があります。2つ目については、コンピューティングの過剰プロビジョニングが原因で、ジョブに対してコンピューティングリソースが過大になっていました。

こうした現状を認めましょう。データソリューションでは、クラウドファーストまたはクラウドネイティブのアプローチをとる必要があります。オンプレミスソリューションに使ってきた古い手法はクラウドに適さないからです。実行時間の長いクエリー、設計に不備のあるモデル、不必要にスケジュールされたデータパイプラインといったものが、コスト管理の対象候補となり、ひいてはステークホルダーを満足させる機会につながります。 

一定のリファクタリングをパフォーマンスの最適化に集中させると、コンピューティングコストを15~20%削減できる可能性があります。クラウドコストの最適化については、以下のヒントを参考にしてください。

  • データ流出に注意してください。コンピューターでスラッシングが発生している、つまりメモリー不足のためにディスクへのデータの書き出しが発生しているということです。これはCDPでも起こり、通常はコンピューティングのサイズ不足を意味します。

  • ワークロードに応じて適切なサイズのコンピューティングを確保します。小規模なクエリーに対して過剰にプロビジョニングしても、パフォーマンスは向上しません。同様に、プロビジョニングを控えても、大規模なクエリーのコストが削減されるわけではありません。上述の「データ流出」によって、通常はコストがかさみます。  

  • お使いの分析ツールが「ジョイン最適化」(必要最小限のジョインのみ含めること)をサポートしていることを確認してください。

  • 環境ごとに、パイプラインとレプリケーションのスケジュールは別々に設定します。各環境のサイズを適切に設定すると、削減の効果は絶大です。たとえば開発環境と統合環境では、必要なコンピューティングリソースが少なく、データパイプラインも少数・小規模になる可能性があります。そのため、コストのかかるリアルタイムレプリケーションの頻度を減らして日次実行やオンデマンド実行のレプリケーションにできるかもしれません。

  • これは常にそうですが、できるところでは必ず簡素化を図ります。

コラボレーション

1にコラボレーション、2にコラボレーション、3にコラボレーションです。アーキテクチャ、エンジニアリング、分析、ビジネスの各部門からステークホルダーを集めてコスト管理チームを作りましょう。グループが多様であれば、どんなコスト管理計画でも影響力は大幅に増します。所要時間は一般的に1週間あたり30分で、実際にプロセスが始まればもっと短くなります。こうしたチームによって優先順位が設定され、技術的な専門性が発揮され、ステークホルダーからも賛同が得られるようになります。

チームが長期的に成功するには、短期的な成果が重要です。たとえば私は、30日、60日、90日という挑戦的な目標をチームに設けています。 

プロフェッショナル向けのヒント:マネジメントの大御所Jim Collins氏がいうところのBHAG、つまり「社運を賭けた大胆な目標」を果敢に設定しましょう。容易に達成できる目標が多いため簡単に達成できることも少なくありません。たとえば私が金融サービスにおけるデータリーダーを務めた前回の経験でいうと、コンピューティングクレジットを30日で15%削減というBHAGを定めました。何か月かたったとき、「いったいどうやったんだ?コンピューティングの拡大を、データインジェスチョンの進捗と生産性に関する代用の尺度にしたのか?」、と同僚に尋ねられたくらいです。データインジェスチョンの進捗に関して誤った指標を強調しただけでなく、コスト管理における初期の短期的な成果が大きな成功要因でした。  

システマチックなコスト削減という長期的な目標を立てて、こうした短期的な成功の勢いをつかみましょう。CFOとCDOは、クラウドデータの世界でもっと共生的な関係を築く必要があるので、コストの透明性と、この短期的な成功とを組み合わせれば、さらに大きい効果が得られます。

これからどうするか?

どんなコスト管理機能でも、以上のすべてが重要になります。サードパーティーツール、CDPの機能、カスタムのサービスセット、あるいはそれらの組み合わせのどれを使う場合でも同じです。どんな問題でも、1つのソリューションで解決できることはほぼありません。今すぐチームを結成し、少しでも早く取りかかりましょう(監視されていないリソースが1つでもあるなら、機は熟しています)。そのうえで、適切なリソースでクラウドのコストと使用量を可視化し、監視して最適化しましょう。

次にCFOから電話があったら、こんな言葉が聞けるかもしれませんね。「よくやってくれました。今月の削減量は素晴らしいの一言です」

最新のデータスタックについて詳細をご希望の場合は、LinkedInTwitterで私をフォローしていただき、投稿やブログ記事、ライブストリームによるインタビューなどをぜひご覧ください。