はじめに
この記事はQiita:Workato Advent Calendar 2022 20日目の記事です。
はじめまして、サービス運用開発部・業務改善Gの永井です。普段は、業務改善推進チームのメンバーとして主にコーポレート部署の業務改善対応、またその中でのWorkatoのレシピ構築などの業務を行っています。
検証の経緯
どの会社でも社内のSaaSの利用ライセンス数を最適化したい、管理を自動化したいといったニーズはあると思います。当社では一定期間SaaSの利用がなかったアカウントに対して、該当するライセンスを削除する一連のオペレーションをWorkatoを使って自動化しています。
Workato導入当初は、ライセンス管理のための公式のアクセラレータが提供されておらず、自社で独自に開発して運用していました。
そんな中、2022年9月にWorkato公式のLicense Optimizationのアクセラレータ(以下、アクセラレータ)が提供されました。独自開発のものでは実装していなかった便利なライセンス管理機能をWorkatoのご担当者様からご提供頂けたため、公式のアクセラレータの利用を検討することにしました。
アクセラレータは以下のことを行います。
-
設定した頻度で定期的にライセンスの棚卸を行います
-
SaaSのアクティビティログから削除対象を抽出します
-
削除前に対象者にビジネスチャットで利用継続意思を確認します
-
不要と回答された場合はライセンスを削除します
-
必要と回答された場合は上長にも確認し、処理します。
便利な機能と感じた部分として、3つ挙げられます。
-
ライセンス削除前に、ユーザにSaaS継続利用の要望をSlackで確認する機能がある
-
自社で開発したレシピより細かい管理を行うことができる(ライセンス要否の判断にLast activityだけではなく、Zoomのミーティングをホストした日なども指定できるなど)
-
自社で開発したレシピの追加開発・保守工数を削減でき、これらのことが2レシピで複数のSaaSを対象に実現できる
今回、本番導入前の検証を行ったので、検証内容と実装方法について記載します。
対象者
- Workatoを導入しており、SaaSのライセンス管理の最適化を検討されている方
-
Workatoレシピビルダーとしての一連の知識があり、アクセラレータの導入を検討している方
当社で実現したいライセンス管理
- 対象 SaaS の拡張として、今回は Miro を追加できること
-
ライセンスの追加、削除はOktaのグループに対してユーザアカウントの出し入れで行う
-
上長の特定はジョブカンを利用する
アクセラレータの処理概要
アクセラレータは大きく5の処理で構成されています。
-
trigger(Main):License Optimizationの実行タイミングを設定します
-
trigger(HRData):HRDBから最新の人事情報を取得し、Lookup Table を更新するタイミングを設定します
-
Discovery Engine: ライセンス削除候補者を検索する
-
Calculation: ライセンス削除候補者をスコアリングする
-
optimization engine: 上位スコアの社員にSlackで継続利用要否を確認する
レシピ追加修正箇所
1. Miroのライセンス削除部分の実装
- Accelarator / 3. Optimization Engine / 3. Optimization Actions 配下にMiroのフォルダを作成
- 同じ階層にあるSalsforceのフォルダ内のレシピをMiroのフォルダ内にコピー
- レシピ名を AOPT | FUNC | Optimize User Licenses in Miro にリネーム
- AOPT | FUNC | Optimize User Licenses in Miro のStep8を編集します
- 当社ではOktaのMiroグループからの削除がライセンス削除にあたるため、Step8をOktaの Remove user from group アクションに置き換えます
2. ジョブカンから承認者情報を取得する実装
アクセラレータは定期的に HRDB から従業員一覧とその承認者情報を取得し、Lookup Table に保管しています。
当社で HRDB はジョブカンを利用するため、以下のカスタマイズをしていきます。
- Accelarator / Admin / Sync HR Data / Customize フォルダにあるAOPT | FUNC | Map Custom CSV file to AOPT HR Data File formatをコピー
- AOTP | FUNC |Map Jobcan Data to AOPT HR Data file format にリネーム
- Step2でジョブカン (Custom Connecter) のユーザー一覧取得 actionを追加(当社ではユーザー一覧に承認者が含まれるように作っています)
- Lookup Table の HR Dataへ出力するために、まずはStep3でジョブカンのユーザー一覧をCSV形式に変換
-
Step4ではStep3で作成したCSV形式のデータをParametersに指定してHR Dataへ出力するfunctionをCall
3. MiroのUsage data作成
Miroの利用状況を取得して、専用のLookup tableに出力する処理です。処理としてはLookup Tableに出力する処理とそれを呼び出す処理の2つを作成する必要があります。
Miro の利用状況として、ユーザー一覧についてくる Last activity の値を利用し、45 日以上前のアカウントをライセンス削除対象として抽出されるようにします。
(1)出力処理
- Accelarator / 2. Discovery Engine / 2. Data Collection のSalesforceフォルダをコピー
- フォルダ名をMiroでリネーム Accelarator / 2. Discovery Engine / 2. Data Collection / Miro
- AOPT | FUNC | Salesforce User Data Collection using last login dateを
AOPT | FUNC | Get days ago for Active Miro Users にリネーム - Step3でMiroのユーザー一覧を取得
- Step4で出力対象のデータを蓄積するListを作成
- Step5-9で直近のActivityから現在まで何日間立っているかの計算を行っていきます
- Step7ではActivityがnilではないユーザーの日数を計算。 Days ago の計算式については、後述の 5.Lookup table で詳細を説明していますが、 (現在日時 - 直近のactivityの日時) としています
- Step9ではActivityがnilの場合、ライセンス付与されてから一度も利用していないユーザーになるため、処理対象とするためにdays agoに999を設定
- Step10でこのアクセラレータの処理から除外するユーザーをListから削除(除外対象のユーザーは後述の Lookup Tableで管理しています)
- Step11でユーザー一覧から処理対象ユーザーを抽出してjson形式へ変換
- Step12でStep11で作成されたjson形式のデータをParametersとして設定して、Usage Data出力のfunctionをコール
(2)呼び出し処理
- AOPT | FUNC | Collect Salesforce Usage Dataを
AOPT | FUNC | Collect Miro Usage Data にリネーム - Step5のfunction callを(1)のAOPT | FUNC | Get days ago for Active Miro Usersに変更
4.Main処理にMiroを追加
- Accelarator / 2. Discovery Engine / 1. Main 内の AOPT | FUNC | Data Collection
Step18〜Step20にMiroの判定と処理を追加(ZoomやSalesforceの処理をコピーして作成します)
この追加によってMiroのUsage DataがLookup tableに出力されます
5. Lookup tableの設定
- Lookup tableのAOPT | LT | Optimization ConfigurationsのActions.enable_auto_optimization_forにMiroを追加
- Lookup tableのAOPT | LT | Data Collection ConfigにMiroを追加
- Lookup tableのAOPT | LT | Calculation FormulaにMiroのレコードを追加、有効期間を設定
- 計算式の仕様について
- 前回利用した日から45日を超過したアカウントに対し、通知を送りたい
- 数式の注意事項
- operaterが「<」記号以外は有効にはならないため、登録する数値には工夫が必要
- マイナス値をLookup Tableに登録しても、計算上はプラス値処理される
- 設定した判定式
- 1000をデフォルト値として、現時点から45日前の直近ログ日付の日数の差分であるを955に設定
- (1000-現在時刻から直近利用日付を引いたScore) < 955 がtrueであるならばoptimisetionの対象とする
- Lookup tableのAOPT | LT | App AdminにMiroのレコードを追加
- Lookup tableのAOPT | LT | SchedulerにMiroを追加
- Lookup tableのAOPT | App LicensingにMiroを追加
5. 検証結果と所感
- 現在運用している機能に影響を与えず、Miroのライセンス管理の機能を追加することができ、検証の目的は達成できました。
- Workatoでこれからライセンス管理を実施したい方はこのアクセラレータを活用するのが機能も充実しているため候補の1つとした方がいいと思います。
- 公式から提供されたアクセラレータの拡張だったため、短期間で開発ができました。他のライセンス管理が必要になったとしても応用がききそうです。
- 一方で、アクセラレータのマニュアルが英語であったり、Salesforce/Zoom以外のSaaS製品に関する記述がなく、初回のライセンス追加では慣れが必要といった点もあると思います。
- 今後、公式でサポートするライセンスが増えるはずなので、この辺りは楽になってくるものと期待しています。
以上、ご覧いただきありがとうございました。