こんにちは。Quipper採用担当の鈴木です。今回の記事は、@beniyama による「Looker SDK で効率化するアカウント管理」です!是非、ご覧ください!
※こちらの記事はは2019年12月6日に投稿されたものです。
こんにちは、Data Division の id:beniyama です。
今回は Looker Advent Calendar 2019 7日目の記事として、最近 Looker 6.22 としてリリースされた Looker Python SDK を使ったアカウント管理の効率化事例をご紹介します。
アカウントはカジュアルに発行して使わないようなら停止したい
エンジニアを魅了する次世代 BI ツール『Looker』を Quipper が導入した理由(わけ) - Quipper Product Team Blog から早1年余、社内で発行してきた Looker アカウントも順調に増加し、今では結構な割合のメンバーが Looker を覗けるようになりました。
毎日ログインして日々の意思決定に使っているメンバーも増えてきた一方で、アカウント申請してみたものの継続的にログインするには至らずご無沙汰になってしまう人がいるのも事実です。
コスト管理も行っている運用側としては契約しているアカウント数に対する活用率の最大化を目指したいのですが、かといって事前承認のフローを重くして入り口を狭めるということはしていません。
『データの民主化』を推進するためには、端的に言うと『いつでも会えるダッシュボード』くらいの(導線的にも心理的にも)親近感があることが大事だと思っています。
ですので、代わりに「とりあえずカジュアルにアカウント発行するよ、でも一定期間使わないと停止(Disable)するよ。また使いたくなったら復活申請してね!」というポリシーで運用をしています。削除しなくても一旦停止という状態を持てるのが良いですね。
Looker アカウントの申請フロー
上図のように Google フォームから必要事項を記入してもらい、申請が来ると Slack で通知が来るようにしています。今回ご紹介する SDK を使うとこの辺の新規ユーザー作成および権限付与も完全自動化が可能ですので、それもおいおいやっていきたいです。
Python SDK を使って一定期間ログインのないアカウントを停止する
もともと 120% カバレッジを標榜しているくらい充実している Looker の API ですが、先日公開された 6.22 では Python や Javascript & Typescript の SDK が提供されるようになりました。
例えば Python の SDK は looker-sdk · PyPI に詳しい説明があります。
さて今回は
- 全ての Looker アカウント情報を取得
- ログイン済みかどうかをチェック、していたら最終ログイン日を取得
- 最終ログイン日が指定された期間(デフォルトでは 180 日)より前であれば停止(
disable
状態に変更) - ついでに今どれだけアカウントが発行されているかをロールごとにカウント
するようなスクリプトを作っていきます。
認証情報を looker.ini として記載
sdk-codegen/python at master · looker-open-source/sdk-codegen · GitHub にも記載がありますが、Looker 側で発行した API key やエンドポイントを looker.ini
として指定し、スクリプト中からそれを読み込ませます。
特に難しいところはないですが、
Base URL for API. Do not include /api/* in the url
をちゃんと読まず以前のコードをコピペした際にサブディレクトリ以降も指定してしまって軽くハマりました…
スクリプト側では
として認証を実施します。
SDK 越しに情報を取得する
例えば、
などとすると自分自身の Looker アカウント ID を取得できます。自分を停止することが可能なのかちょっとわかりませんが、万が一にでも disable にしてしまうと目も当てられないので自分が何者なのか把握しておきます。
他にも
などとすると全ユーザーのリストが取得できます。
例えばこのリストをなめて下記のようにすると Looker 社側のアカウントかどうかを識別することが可能です。
停止されている(disabled な)アカウントかどうかは
で取得できます。
どういったプロパティがあるかは、例えばユーザー周りであれば User : Manage Users を見るとよくわかります。
ユーザーの最終ログインについては
で取得が可能ですが、ここで注意が必要なのは上記は credentials_email
、つまり email + パスワードによるログインについての情報のみとなります。
ですので、他のログイン種別をサポートしている場合は credentials_google
や credentials_ldap
なども見る必要があると思います(参考)。
SDK 越しにユーザーの状態を変更する
今回は特定のユーザーの is_disabled
フラグを立てたいので、下記のようにします。
とても簡単ですね。
実行結果
このスクリプトを実行すると下記のような結果が出力されます。
現状は逐次 yes or no の確認インプットを入れていますが、問答無用で強制停止にするのであればバッチ化して毎日回すこともできます。
また、現在の Looker の管理画面では誰がどこのロールにいて、それぞれのロールが実際何人なのか把握しづらいこともあり、利用実績と契約枠を見比べやすくするために今回ロールごとの集計機能もついでに入れました。
まとめ
余り大きなニュースになっていませんが、公式に SDK がサポートされたことで API を使った様々な運用業務の自動化が一段と行いやすくなりました。
今後はアカウント発行の自動化からのオンボーディング体験の向上、Slack 通知などによる停止前のリマインド・利用喚起など様々な施策を打って、利用率のさらなる向上を目指したいと思います。
今回作成したサンプルコード
今回作成したスクリプトは下記 Gist に公開しています。
もともとは以前から公開されていた python_api_samples/disable_users.py at master · llooker/python_api_samples · GitHub を参考に開発したもので、今回の Python SDK リリースを機に各所を書き換えています。
https://gist.github.com/beniyama/ee0a4e9c34acb293cdbcc20888a7369b#file-disable_users-py
https://gist.github.com/beniyama/ee0a4e9c34acb293cdbcc20888a7369b#file-looker-sample-ini
また、環境構築周りはこちらをご覧ください。