クラウドコストの最適化のためのベスト プラクティス
Google Cloud Japan Team
※この投稿は米国時間 2020 年 4 月 21 日に、Google Cloud blog に投稿されたものの抄訳です。
クラウドを運用する最大の利点の 1 つとして、必要に応じてスケールアップまたはスケールダウンして運用支出を節減できる点が挙げられます。この利点は、顧客のニーズに予期せぬ変化が見られるときには、特に大きくなります。
Google Cloud では、お客様がクラウドの運用費用を適正に管理できるよう、ソリューション アーキテクチャのチームが一丸となってサポートしています。長年にわたって大規模なユーザーをサポートしてきた経験を通じ、コストを最適化するうえで一般的に見落とされがちな共通事項がいくつか特定されたので、ここに紹介します。以下に挙げるベスト プラクティスは、お客様のクラウドのコストをビジネスのニーズに適合させ、今日のように先の見えない難しい状況を乗り越えるうえでも大いに役に立つはずです。
1. 請求とコストの管理ツールを理解する
クラウドのコストは、オンデマンドで変化の著しいクラウド本来の性質上、しっかりモニタリングしていないと知らぬ間に積み上がってしまう傾向があります。コストの仕組みを理解すれば、正しく制御して支出を最適化することができます。これを支援するため、Google Cloud では信頼性の高い一連の請求およびコスト管理ツールを無料で提供しています。これらを用いれば、クラウドのデプロイメントをしっかり把握するために必要な可視性と分析情報が得られます。
「どのプロジェクトがどのような理由で特に費用がかかるのか」などを知ることにより、全体像を把握しましょう。まず、ビジネスのニーズとの関係に基づきコストを体系化して整理します。そして、請求レポートを用いてサービスの詳細を掘り下げ、コストの状況が一目でわかるようにします。さらに、コストがどの部門やチームに由来するのか、ラベルを用いて明確にし、独自のカスタム ダッシュボードでよりきめ細かいコスト明細を可視化します。また、割り当て、予算、アラートを用いて、コストの現在の傾向と中長期的な予測を細かくモニタリングし、支出超過のリスクを抑えることもできます。
Google Cloud の請求およびコスト管理ツールに慣れていない場合は、期間限定の無料トレーニングをご利用ください。Google Cloud のコストを理解し、最適化するための基礎を学ぶことができます。包括的な手順については、Cloud Billing 入門ガイドをご覧ください。動画シリーズ Beyond Your Bill(英語)もご利用ください。また、ハンズオン トレーニングの Google Cloud コストを理解すると GCP コストを最適化するも必ずご確認ください。
2. 必要なコンピューティングの使用に応じた料金のみを払う
クラウドの支出状況がより明確になったところで、特に費用のかかるプロジェクトに着目し、ビジネスの価値を十分に生み出していないコンピューティング リソースを特定します。
アイドル状態の VM(およびディスク)を特定する: Google Cloud Platform(GCP)のコストを減らす最も簡単な方法は、使われていないリソースを削減することです。たとえば、優先順位の下がった概念実証プロジェクトや、削除し忘れている不要なインスタンスはありませんか。Google Cloud では、このようなリソースを最適化するいくつかの Recommender を用意しています。使われていない仮想マシン(VM)や永続ディスクを使用率に基づいて特定するアイドル状態の VM Recommender などがご利用いただけます。
なお、VM の削除には細心の注意が必要です。リソースを削除する前に、「このリソースを削除したら、どのような影響が出るのか?必要な場合は、どのように再作成できるのか?」という点を再度確認するようにしてください。インスタンスを削除すると、その根底にあるディスクとそれに含まれるすべてのデータも削除されます。削除する前に、そのインスタンスのスナップショットを取ることがベスト プラクティスとして推奨されます。あるいは、単に VM を停止し、それによってインスタンスも停止させて、ディスクや IP アドレスなどのリソースはその適用が解除されるまでそのまま保持することも可能です。
詳細については、Recommender のドキュメントをご覧ください。使用率に基づく Recommender は今後さらに追加していく予定なので、定期的に最新情報をご確認ください。
VM の起動と停止を自動化する: Compute Engine のようなプラットフォームの利点は、使用するコンピューティング リソースに対してのみ料金を支払える点です。本番環境のシステムは通常 24 時間年中無休で稼働しますが、開発やテスト環境、あるいは個人用の環境における VM は業務時間内だけ使われることが一般的で、不要時に停止させれば大きなコスト削減になります。たとえば、月曜から金曜まで毎日 10 時間だけ稼働する VM は、常時稼働の VM に比べ、月額 75% の節約になります。
これを実践するには、お客様が必要に応じて VM の自動シャットダウンを管理、計画できるように Google Cloud が開発したサーバーレス ソリューションを利用すると便利です。
VM を適正サイズに保つ: Google Cloud のユーザーは、ニーズに合わせた適正サイズの CPU と RAM でカスタム マシンタイプを作成することにより、すでに大きな節約を実現しているかもしれません。しかし、ワークロードの要件は時間とともに変化します。以前に最適化したインスタンスであっても、現在はユーザーやトラフィックが減少している可能性があります。そこで Google Cloud では、サイズ適正化の推奨により、vCPU と RAM の使用率の変化に応じてマシンタイプを効果的にダウンサイズする方法を提示しています。。このインスタンスのマシンタイプ(またはマネージド インスタンス グループ)に対するサイズ適正化の推奨事項は、Cloud Monitoring によって過去 8 日間に収集されたシステム指標に基づいて自動的に生成されます。
Infrastructure as Code で環境を管理する企業は、ぜひこちらのガイドをご覧ください。VM のサイズ適正化の推奨事項をニーズに合わせて適用する方法をご確認いただけます。
プリエンプティブル VM を活用する: プリエンプティブル VM は、通常のインスタンスより最大 80% 安く、最長 24 時間稼働するとてもコスト効率の高いコンピューティング インスタンスです。プリエンプティブル VM は、ビッグデータ、Genomics、メディアコード変換、財務モデリング、シミュレーションなど、フォールト トレラントなワークロードに最適です。特別なマネージド インスタンス グループを設定して通常のインスタンスとプリエンプティブル インスタンスを組み合わせれば、コンピューティング負荷の高いワークロードをより速く終了させてコスト効果を高めることも可能です。
しかし、プリエンプティブル VM の使用を Compute Engine 環境に限定する必要はありません。たとえば、GPU、GKE クラスタ、Dataproc の 2 次インスタンスにもプリエンプティブル VM を使用できます。さらに、柔軟なリソース スケジューリングによってプリエンプティブル VM で通常のインスタンスを補強することで、Cloud Dataflow のストリーミング(およびバッチ)の分析にかかる費用も削減できるようになりました。
3.Cloud Storage のコストとパフォーマンスを最適化する
独自のデータセンターで実行する場合、ストレージはインフラストラクチャの全体コストに埋もれる傾向があり、適切なコスト管理を行うことが難しくなります。しかし、クラウドでは、ストレージは個別の項目として請求されるため、ストレージの使用率と構成に注意を払うことで、大幅なコスト削減が可能になります。
また、コンピューティングなど、ストレージのニーズは、常に変化しています。最初に環境を設定したときに選択したストレージ クラスは、特定のワークロードに適さなくなっている可能性があります。また、Cloud Storage は発展を続けています。わずか 1 年前にはなかった多くの新機能が提供されています。
ストレージを節約したい場合に注目すべき点を紹介します。
ストレージ クラス: Cloud Storage はさまざまなストレージ クラスを提供しています。ストレージ クラスには、Standard、Nearline、Coldline、Archival があり、すべてコストが異なり、それぞれに最適なユースケースがあります。Standard クラスのみを使用している場合は、お使いのワークロードを確認して、データへのアクセス頻度を再評価すると良いかもしれません。通常、多くの企業がアーカイブ目的で Standard クラスのストレージを使用しています。こうした企業は、Nearline または Coldline クラスのストレージを利用することで、支出を削減できます。また、場合によっては、法的証拠開示などのコールド ストレージのユースケースのためにオブジェクトを保持している場合、新しい Archival クラスのストレージを使用すると、さらに節約できることがあります。
ライフサイクル ポリシー: さまざまなストレージ クラスを使用することで費用を節約できるだけでなく、オブジェクトのライフサイクル管理によりそれを自動的に実現できます。ライフサイクル ポリシーを構成することで、プログラムでオブジェクトを設定して、一連の条件に基づいてストレージ クラスを調整できます。さらに、不要になった場合は、オブジェクトを完全に削除することもできます。たとえば、あなたとチームが、データを作成してから最初の 1 か月以内にデータ分析を行い、それ以外にデータが必要になるのは規制目的のみであるとします。この場合、オブジェクトが 31 日に達した後に、ストレージ クラスを Coldline または Archival に変更するようにポリシーを設定するだけです。
重複除去: ストレージ環境におけるもう一つの一般的な無駄の原因は、重複データです。もちろん、重複データが必要な場合もあります。たとえば、ローカルチームがすばやくアクセスできるように、データセットを複数の地域に複製する必要がある場合などです。しかし、お客様と協力してきた経験から言うと、多くの重複データは、バージョン管理の怠りにより生じます。こうした重複は管理が面倒で高い費用がかかることがあります。
幸い、データの重複を防ぐ方法も、データの誤削除を防ぐツールも多くあります。検討すべき点をいくつかご紹介します。
単一の信頼できる情報源で復元力を維持しようとしている場合、さまざまなバケットに複数のコピーを作成するよりも、マルチリージョン バケットを使用する方が理にかなっていることがあります。この機能を使用すると、格納されたオブジェクトの地理的な冗長性を有効にすることができます。これにより、データを複数の場所に非同期複製できます。そのため、自然災害が発生した場合に、地域的な障害から保護できます。
多くの重複データが発生する原因は、Cloud Storage オブジェクトのバージョン管理機能を適切に使用していないことです。オブジェクトのバージョン管理により、データの上書きや誤削除を防げますが、同時に重複が実際に増えることがあります。データのコピーは 5 つも必要なく、保護されていれば 1 つでも十分かもしれません。ロールバックできなくなることが心配な場合は、オブジェクトのバージョン管理ポリシーを設定して、適切な数のコピーを確保できます。何かを誤って失うことが心配な場合は、バケットロック機能の使用を検討してください。これを使用すると、アイテムが特定の日時より前に削除されるのを防げます。これは、複数の重要な規制へのコンプライアンスの実証に非常に役立ちます。簡単に言うと、オブジェクトのバージョン管理を行う場合、スペースを無駄にすることなく、データを安全に保つために使用できる機能がいくつかあるということです。
4. データ ウェアハウスを調整する
あらゆる規模の組織が、データ分析の最新アプローチとして BigQuery に目を向けています。しかし、構成の中には高価なものもあります。BigQuery 環境の簡単なチェックを行い、コストを抑えるためのガードレールを設定しましょう。
制御の実施: 最も回避したいことは、長いクエリを永続的に実行して、コストが積み重なってしまうことです。クエリのコストを制限するには、課金される最大バイト数の設定を使用します。上限を超えるとクエリが失敗しますが、それと同時に、課金されなくなります。次に画面の例を示します。
クエリレベルでコスト管理を有効にするだけでなく、ユーザーとプロジェクトにも同様のロジックを適用できます。
パーティショニングとクラスタリングを使用する: テーブルのパーティショニングとクラスタリングを行うと、可能な限り常に、クエリの処理コストを大幅に削減し、パフォーマンスを向上させることができます。現在、取り込み時間、日付、タイムスタンプ、整数の範囲の列などに基づいてテーブルを分割できます。クエリとジョブでパーティション分割テーブルを活用できるように、[パーティション フィルタを要求] を有効にすることもおすすめします。これにより、パーティション列を WHERE 句に含めることが強制されます。
パーティショニングのもう一つのメリットは、長期ストレージの対象として個別に考慮されることです。つまり、テーブルまたはパーティションが 90 日間編集されていない場合、テーブルに保存されているデータの料金は自動的に約 50% 下がるということです。テーブルまたはパーティションを長期ストレージに移動しても、パフォーマンス、耐久性、可用性、その他の機能が低下することはありません。
ストリーミング挿入を確認する:BigQuery にデータを読み込む方法は 2 つあります。バッチ読み込みジョブとして読み込む方法と、ストリーミング挿入を使用したリアルタイム ストリーミングとして読み込む方法です。BigQuery のコストを最適化するには、最初に請求額を確認し、ストリーミング挿入に対して課金されているかどうかを確認します。次に「BigQuery でデータをすぐに(数時間ではなく数秒で)利用できるようにする必要があるか?」と「このデータを BigQuery で使用できるようになったら、リアルタイムのユースケースでこのデータを使用するか?」という点について自問します。この質問のいずれかに対する答えが「いいえ」である場合は、バッチ読み込みデータに切り替えることをおすすめします。なお、これは無料です。
Flex Slots を使用する: デフォルトで、BigQuery では、クエリによって処理されたバイト数に基づいて変動するオンデマンド料金が請求されます。多くのボリュームを使用し、ワークロードが安定している場合は、オンデマンド料金から定額料金に切り替える方がコスト効率が高い可能性があります。定額料金であれば、クエリで無制限のデータを処理できます。
急速に変化するビジネス要件を考慮し、月額と年額の定額契約に加えて、最近 Flex Slots を導入しました。これは、最短 60 秒という短時間の BigQuery スロットを購入する新しい方法です。オンデマンド料金と定額料金のこの組み合わせにより、分析の需要の変化に迅速かつコスト効率よく対応できます。
5. ネットワーク パケットをフィルタする
ロギングとモニタリングは、ネットワークとセキュリティの運用の基礎です。しかし、クラウド全体の環境とオンプレミス環境では、ネットワークの使用状況を明確かつ包括的に把握することは、先月の電子レンジの使用電量を調べることと同じくらい困難なことです。そこで、Google Cloud には、ネットワーク トラフィック(つまりコスト)を可視化できるいくつかのツールが付属しています。また、ネットワーク コストを迅速に削減できる手っ取り早い構成変更もいくつかあります。それでは見てみましょう。
トラフィック使用量が特に多いプロセスを特定する: どのサービスが帯域幅を最も消費しているのか疑問に思ったことはありませんか?Cloud Platform SKU を使用すると、特定の Google Cloud サービスに費やしている金額をすばやく特定できます。ネットワーク レイアウトと、アプリケーションとユーザー間のトラフィックの流れを理解することが重要です。ネットワーク トポロジは、Network Intelligence Center のモジュールで、グローバルな GCP デプロイメントと、公共のインターネットとのインタラクションを包括的に可視化します。これには、組織全体のトポロジのビューと関連するネットワーク パフォーマンス指標が含まれます。これにより、非効率的なデプロイメントを特定し、地域と大陸間のネットワーク下りコストを最適化するために必要な対処を行えます。Network Intelligence Center とネットワーク トポロジの概要についてはこの短い動画をご覧ください。
Network Service Tiers: Google Cloud では、プレミアムとスタンダードの 2 つのネットワーク サービス階層から選択できます。世界中で優れたパフォーマンスを実現するには、プレミアム ティアを選択することを常におすすめしています。スタンダード ティアは、パフォーマンスが低くなりますが、コストが重視される一部のワークロードには適している場合があります。
Cloud Logging: これは気付きにくいことですが、不要になったログを除外することにより、ネットワーク トラフィックの可視性を制御できます。除外できるログの一般的な例をご覧ください。同じことがデータアクセスの監査ログにも当てはまります。このログは膨大であるため、追加コストが発生する可能性があり、たとえば、開発プロジェクトでこのログは必要ありません。VPC フローログと Cloud Load Balancing は、サンプリングにも対応しています。サンプリングにより、データベースに書き込まれるログ トラフィックの量を劇的に減らせます。これは、1.0(100% のログエントリを保持)から 0.0(0%、ログを保持しない)の範囲で設定できます。トラブルシューティングまたはカスタム ユースケースについては、特定の VPC ネットワークまたはサブネットのテレメトリを収集するか、さらにドリルダウンして特定の VM インスタンスまたは仮想インターフェースをモニタリングするかをいつでも選択できます。
詳細情報
初期段階のスタートアップであれ、グローバル フットプリントを持つ大企業であれ、どの企業でも今すぐ資金を賢く使いたいと考えています。このブログ投稿のヒントに従うと、思い通りに事を進められるでしょう。Google Cloud のコストの最適化の詳細については、コスト管理動画再生リストをご覧ください。Cloud Storage、BigQuery、ネットワーキング、Compute Engine、Cloud Logging とモニタリングのコスト最適化戦略についても深く学ぶことができます。
- By プロフェッショナル サービス、テクニカル アカウント マネージャー Justin Lerma、Pathik Sharma