はじめに
こんにちは、KCCS デジタルプラットフォーム部の松村です。
私たちの部門ではDatabricksを活用したデータ分析基盤の構築や技術検証を行なっています。
Databricksを活用したデータ分析基盤を提供しようと考えた時に、運用上である課題が挙がったので解決方法を紹介させていただきたいと思います。
運用上で挙がった課題はクラスターの作成権限に関する課題です。
- 基盤を利用する分析者にクラスターを自由に作成できるようにしたい
- 分析者の自由作成にしてしまうと、不必要または不十分な設定でクラスターを作ってしまう危険性がある
(特に課金が無駄に発生するリスクがある) - 管理運用者が用意したクラスターだけを使用可能とした場合は、分析者の自由度が低く、要望を満たさないケースも出てくることが予想できるため、制限しすぎたくはない
制限をかけすぎれば自由度は低くなりますが、かと言って自由にし過ぎれば、たちまち環境は無法地帯になりかねません。
本記事ではこの課題に対して、管理運用者がクラスターに制限をかけつつも、利用する分析者にある程度自由度を持ってクラスターを作成できるような運用を目指して、Databricks上でどのように対処したかをご説明します。
運用管理者・分析者にクラスター作成を任せた場合の違い
運用管理者がクラスターを作成する環境と分析者が自由にクラスターを作成できる環境では、基盤の統治(ガバナンス)強化のハードルと基盤利用の自由度は以下のようになっていると考えています。
運用管理者がクラスターを作成する場合 | 分析者が自由にクラスターを作成できる場合 | |
---|---|---|
ガバナンス強化のハードル | 低い | 高い |
基盤利用の自由度 | 低い | 高い |
それぞれの理由については次で説明します。
パターン1 運用管理者が用意したクラスターを分析者が利用する場合
ガバナンス強化のハードル:低い
組織のルール、コスト管理方針を検討した管理運用者によってクラスターを作成するため、ルールを逸脱したクラスターが作成されることはありません。
そのため、管理運用者チームに対する教育のみ(複数名で運用し、人員が交代することを前提に考えた継続的な教育)でガバナンスを強化することができます。
基盤利用の自由度:低い
分析者がクラスターを利用している最中にスペックの不足やクラスター自体に設定が必要となった場合、運用管理者への申請と作業が必要となるため、分析業務自体が一時中断となります。
環境のイメージ
管理が厳しいが故にルールの逸脱は発生しにくいが、利用者にストレスのある環境になる可能性があります。
パターン2 分析者が自由にクラスターを作成して利用する場合
ガバナンス強化のハードル:高い
運用管理者よりも分析者の方が人数が多いという前提ですが、クラスター作成に関して、組織のルール、コスト管理の方針を個々の分析者が深く理解する必要があります。
そのため、ルールの制定と教育のコストが高くガバナンスを強化するためのハードルが高いと言えます。
基盤利用の自由度:高い
個々の分析者がクラスターの設定を自由にできるため、分析者としては基盤を利用する上では非常に自由度が高くなります。
環境のイメージ
利用の自由度は高いが、ガバナンス強化のハードルが高く、教育やルールが整備されていないと基盤自体がカオスな状態になる恐れがあります。
解決方法
コンピュートポリシーを作成して、標準的に作成するクラスターのテンプレートを作る
Databricksにはコンピュートポリシーというクラスターの設定を強制する機能があります。
コンピュートポリシーを管理運用者が作成し、分析者はそのポリシーに沿ったクラスターを自由に作成できるような運用とすることで、運用管理者によって必要最低限の設定を強制しつつ、分析者にもある程度自由に設定を変更できるようにしました。
そうすることで、ガバナンス強化のハードルを下げつつ、基盤利用の自由度が高まる環境を実現しました。
具体的な対応内容は以下の2点です。
利用ユーザーへ無制限にクラスターを作成する権限を付与しない
利用ユーザーにコンピュートポリシーの使用権限を付与し、ポリシーに則ったクラスター作成しかできないようにする
今回作成するポリシーには以下の設定でクラスター作成に統制をかけようと思います。
- 30分無操作の時間が続いた場合は自動で停止する
- 選択できるマシンスペックを限定する
コンピュートポリシーの作成方法
公式リファレンスはこちら
本記事では実際の操作画面を元に説明いたします。
Databricks UIのコンピュート->ポリシー->ポリシーを作成 からポリシーを作成することができます
ポリシーの設定方法
ポリシーを作成ボタンを押下すると以下のような画面に遷移します。
※ポリシー作成画面が画像と違うという方はこちらをご参照ください
一般の名前、説明には今回作成するポリシーの名称とその説明を入力します。
今回は分析者が利用する標準的スペックを持っているクラスターのコンピュートポリシーであるため、以下としました。
名前:標準コンピュートポリシー
説明:標準パフォーマンスのコンピュートポリシー
ファミリーは以下の6つから選択することができます。
カスタム以外を選択するとそれぞれのデフォルト設定が決まっており継承されます。
- パーソナルコンピュート
- 共有コンピュート
- パワーユーザーコンピュート
- ジョブコンピュート
- レガシー版共有コンピュート
- カスタム
今回はユーザーがNotebookやSQLエディタを使って自由に個人のリソースで分析をするためのクラスターとするため、パーソナルコンピュートを選択しました。
パーソナルコンピュートを選択したため、定義の項目にパーソナルコンピュートのデフォルト設定が継承されています。(画像では見切れていますが下にまだ継承された定義があります)
まずは、自動停止の設定を30分で固定したいと思います。
自動停止の設定はautotermination_minutesなので、パーソナルコンピュートから継承した定義を開きます。
デフォルト値が4320(分)になっているので30に変更します。
つづいて、作成できるインスタンスのタイプを制限します。
インスタンスタイプはnode_type_idの項目で制限できます。
タイプによって固定にするのか、いくつかの中から選択できるようにするのかなど選べますが、今回はある程度自由度を持たせるということでi3.xlarge〜i3.4xlargeまでを選択できるようにしておきました。
デフォルトはi3.xlargeとしておきます。
他にもタグやライブラリを強制することもできるため、利用者が作成するクラスターに制限を入れる用途以外にも、標準的に必要となるクラスターのテンプレを用意して、みんなで使い回すという用途にも使えるかと思います。
定義できる内容の全貌は公式リファレンスをご参照ください
ポリシーの編集を終えたら作成ボタンを押下します。
ポリシー一覧に画面が遷移し、新しいポリシーが作成されていることが確認できます。
ポリシーへの権限付与
ポリシーを作成したら、ポリシーの利用するユーザー・グループへの権限を付与します。
ポリシー一覧で該当するポリシーを押下した後に詳細画面が表示されるため、右上のメニューボタンから権限を選択します
今回ポリシーを適応したいユーザーやグループに対してポリシーの使用可能権限を付与します
これにより、ポリシーテストグループに所属するユーザーは「標準コンピュートポリシー」のポリシーを使ってクラスターを作成できるようになりました。
ユーザーによる無制限のクラスター作成の禁止
コンピュートポリシーを作成してユーザーにクラスター作成の制限をしようとしていますが、そもそもユーザーが無制限にクラスターを作れるような環境だと、ポリシーを利用せずに自由な設定でクラスターを作成することができます。
単純にテンプレートとしてポリシーを利用するのであれば問題ありませんが、ユーザーが作成するクラスター全てに制限をかけたい場合は無制限に作成することを禁止しなければなりません。
ワークスペースの設定->IDとアクセス->グループorユーザ->(制限したいグループ・ユーザ名)->Entitlementsへ画面を遷移し、Allow unrestricted cluster creation項目のチェックを外すことで、該当グループやユーザが自由にクラスターの作成ができなくなります。
Allow unrestricted cluster creation項目にチェックが入っている場合
Allow unrestricted cluster creation項目にチェックが入っていない場合
無制限のクラスター作成が許可されていた場合はポリシーでの作成以外に「コンピュートを作成」ボタンがあり、自由な設定でクラスターを作成することができますが、無制限のクラスター作成が許可されていない場合はポリシーでの作成ボタンのみとなります。
ポリシーを使ったクラスターの作成画面へ遷移すると、ポリシーで設定した通り自動停止の設定が30分で固定されており、ノードタイプはデフォルトでi3.xlargeが選択されていることが確認できます。
また、選択できるノードタイプも設定されていたものだけとなっていることが確認できます。
以上の方法でユーザーにある程度自由度を持たせつつも、最低限の設定を強制することで、Databricksの利用に統制をかけることができました。
まとめ
今回はコンピュートポリシー機能を使ってDatabricks内で作成されるクラスターの設定を強制しました。
本機能によって分析基盤内で利用者にある程度の自由度を持たせつつも、運用管理者によって統治された基盤を構築することができました。
ポイントとして、以下2点でクラスター作成に統制をかけました。
クラスター作成を制限したいユーザー・グループのAllow unrestricted cluster creation(無制限のクラスター作成の許可)を無効にする
クラスター作成を制限したいユーザー・グループが利用するコンピュートポリシーを作成し、利用権限を付与する
もっと統制を厳しくするのであれば、手動での権限付与やポリシーの作成、設定変更ではなくTerraformのようなIaCでDatabricksの基盤を作成するのが良いのだと思いますが、それはまた別の機会に検証して記事を投稿させていただきます。
おまけ:ポリシー作成画面のUI変更
ポリシー作成画面でJSONでの記述しかないという方はワークスペースの機能で「New compute policy form」を有効にすると同じ画面になります。
(New compute policy formは2025年10月時点でパブリックプレビューの機能です。閲覧されている時期によってはGA機能になっているかもしれません。)
New compute policy formが有効になっていない場合はポリシーの定義をUIで指定できず、JSONで手書きしなければいけません。
キー名をいちいち調べたり、実際に作ったクラスターの定義を元に書き起こしたりしないといけないので少し面倒です。
New compute policy formが有効になっていれば、プルダウンメニューでキーを指定できたり、値の指定もUIで制限されているため、記述ミスによるエラーは少なくなるかと思いますので有効化を検討してください。
(無効状態で検証した際にログ配信の設定に関する記載が誤っていて、どうしてエラーなるんだーと1時間ぐらい格闘しました。キー名が誤っていたのが原因ですが、UI操作であればこのミスは防げます。)
New compute policy formが無効になっている場合のポリシー作成画面