Databricks on AWS上のAWSコストを削減する技術

yoshi-taka
8 min readJan 19, 2024

--

サーバーレス(マネージド)ではなく自組織のAWS上で運用した場合です。

AWS Config代を削減する

既製品でよくある仕組みでEC2が起動終了を大量に繰り返します。それに応じて、リソースのインベントリと変更の追跡をすべくAWS Configが大量のデータを取得し料金が膨れ上がります。

年々AWS ConfigのEC2周りマネージドルールが増えており、EC2 1台あたりのConfigコストも増加傾向です。
*EC2は攻撃の対象になりがち、AWSとしても古い仕組み、ある意味なんでもできるということでルールが増えていく模様
加えて、Configデータを起点にセキュリティ系AWSサービスのコストが連鎖して上昇します。

対策としてはAWS ConfigでEC2等の記録除外設定を入れるか、即時記録ではなく定期的な記録に変更するかのどちらかです。

一方、EC2すべてに設定することから、EC2上のアプリケーションや踏み台サーバが同一アカウントにあると、AWS Configで追跡できずリスクが高まります。

S3にあるデータの保持期間を検討する

Deltaテーブルにはタイムトラベル機能があり、S3のバージョニングと競合しています。要件によりますがS3側のバージョニングは不要ではないでしょうか。

S3のバージョニングを停止してもオブジェクトの古いバージョンは残ったままです。全部削除しましょう。

Deltaテーブル側ではVACUUM処理により保持期間が切れたものを削除できます。

Databricks では、VACUUM コマンドで未使用のデータ ファイルを効果的に削除できるように、バケットのバージョン管理を無効にすることをお勧めします。

EBS代を削減する

まずEBSをgp2からgp3に変更しましょう。20%程度のコスト削減が見込めます。設定方法は以下のリンクより。

初期設定をgp3にしてもらえると嬉しいですね。

次に重要な点として、ジョブ等に大量のEBS シャッフルボリュームがアタッチされていることがあるので確認しましょう。多くのワークロードでは追加のシャッフルボリュームはいらないはず。そもそも初期設定でワーカーに30GB+150GBのEBSが準備されています。

aws_attributes.ebs_volume_type シャッフルボリュームを足すかどうか、
および足す場合の種類
aws_attributes.ebs_volume_size AWS EBS ボリュームのサイズ (GiB 単位)
aws_attributes.ebs_volume_count AWS EBS ボリュームの数

見ての通りebs_volume_count を2にすれば2倍ディスクを消費します。enable_elastic_diskでローカルストレージのautoscalingも可能です。

NAT Gatewayの通信を抑える

必ずS3 Gateway Endpointを設定し、S3との通信料金を無料にしましょう。

通信先とデータ量次第で、PrivateLinkを設定しましょう。

Savings Planを購入する

Savings Planを買ってEC2代を節約しましょう。

EC2 RIのほうが安い傾向にあるものの、ワークロードが完全に読めていない限りはSavings Planが確実です。

Spot Instanceを活用する

Spot Instance割合が設定できます。

ただしDBUは変わらないようです。

どのインスタンスを使うか決めるパラメータとしては以下が考えられます。
(インスタンスDBU + インスタンス単価 * ( Spot Instance割合 * ( 該当インスタンスRI割引後価格) + (1 — Spot Instance割合)* SavingsPlan適用時価格) + EBS代) * 該当インスタンスでの実行時間 * 該当インスタンスの数

なかなか複雑です。まずは利用したいインスタンスの割引率を見てみましょう。

インスタンスの最新化を検討する

EC2のファミリをアップグレードすればIntelなら第6世代まではコストを抑えつつ性能が上がります。

ただし、EC2インスタンスの料金とDBUが必ずしも比例しているわけではない模様。確認したところEC2料金はそのままでもDBUが上昇することがあります。DBUのほうがインスタンスあたり単価が大きいので注意。

Graviton系インスタンスも利用可能です。残念ながらドキュメントにある通り、複数の機能が利用できません。またDBUも安いということはなさそうで、パフォーマンスは向上するとは限らず検証が必要です。

その他対応事項

当然ですがクラスターのサイズを調整しましょう。Databricks料金ごと最適化できます。以下のリンクは推奨事項です。一つずつ確認しましょう。例えばクラスタの初期設定ではDBU含めアイドル2時間分追加コストがかかります。

Runtimeのバージョンを上げつつ、DatabricksやDelta Tableの最新機能に移行していきましょう。Spark側の進化も忘れずに。AWSもたまに関係ある良いアップデートがあります。

最適化はこちら。このページにもある程度記載されつつ、サイドバーやページ内リンクからさらに詳細ページに飛べます。

下記の記事は細かいtipsが載っていておすすめです

AWSと直接関係ないですが、Datadogなど3rd Partyモニタリングツールは確認しないとDatabricksのEC2分の料金が請求されます。

全体のアーキテクチャ、一般的なパフォーマンス最適化といった話は割愛します。

対応が難しいもの

CloudTrail

基本的には各種サービスのアクセスと比例します。

GuardDuty

S3 Protectionを有効にしていると、S3上のUnity Catalogのアクセス解析代が多くかかります。バケット内訳はGuardDutyの使用状況欄から確認できます。

解析の元ネタはCloudTrailです。

最後に

DatabricksでかかるAWS代を節約してDatabricksのDBUをたくさん使いましょう(?)

--

--

yoshi-taka

気合と理論で⟹安全工学/患者安全/Safety II/ICS/Cognitive System/成人教育/CoE構築/Full-Service Ownership/Enabling Team/Cloud Finance/transaction-per-user cost/Cloud Fluency/医療全般/文化人類学