Databricks on AWS上のAWSコストを削減する技術
サーバーレス(マネージド)ではなく自組織の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をたくさん使いましょう(?)