Google Apps Scriptで現在の割り当てライセンス数を調べる【GAS】
これまで、Google Workspaceの管理者として管理をしていて困ったことの1つに「残りのライセンス枠がいくつ」なのかが、管理コンソールを開かないとわからない点。そんな時に限って現場で大口の採用が決まっていざ割り当てようと思ったら、枠が足りない・・・発注しても間に合わないみたいな事が往々にしてありました。
そこで、現時点でのGoogle Workspaceのライセンス枠がどれだけあるのか?を調べる手法についてまとめました。
今回利用するスプレッドシート等
- ライセンス数確認 - Google Spreadsheet
- Enterprise License Manager API
今回のAPIは情シス管理者向けのAPIであるため、管理者権限がなければ実行することが出来ません。また、今回のAPIはライセンス割り当て数を調べるためのもので、ライセンスのトータル数はわからない為、トータル数に関しては日々自分でメンテナンスが必要です。
そう頻繁にライセンスのトータル数が変わるということもなかなか無いと思うのですが、バッファとして確保しておく空きライセンス枠の閾値が小さすぎると頻繁に発注や枠切れを起こす原因となるので、注意が必要です(かといって空き枠が多すぎてもライセンス代の支払いが馬鹿にならないので、どれくらいの空き枠数が丁度よいのか調べておきましょう)
事前準備
顧客IDや商品名を調べる
今回のスクリプトは自身のテナントの顧客IDおよび商品名(商品IDの場合もある)が事前情報として必要です。Google Worspaceは基本1テナント1プランですが、テナントによってはこの他に共存するFrontlineライセンス、Cloud Identityライセンスなどもあるので、これらも調べるとなると事前に把握しておく必要があります。
自分のケースはGoogle Workspace Business Standardなので、今回はそのケースで調べます。
- 管理コンソールにログインします
- 左サイドバーからアカウント⇒アカウント設定を開きます。
- この画面で自身のテナントの顧客IDは確認できるので控えておきます。
- こちらのサイトを開きます。
- 自身のプランのSKU NameとSKU IDがわかるので両方とも控えておきます。(今回はIDは1010020028で、品名はGoogle Workspace Business Standardでした)
図:顧客IDを調べる画面
ライセンス数合計を調べる
現在のテナントで購入してるGoogle Workspaceのプランのトータル合計ライセンス数は手動で調べる必要があります。追加で購入した場合にはその分だけこの数値を常日頃更新しておく必要があります。
- 管理コンソールにログインします
- 左サイドバーからお支払い⇒サブスクリプションを開く
- 対象のプランのライセンスの項目をクリックして詳細に入る
- ライセンスの部分に「x個購入済み」とあるのでこれが合計ライセンス数となりますのでこれを控えておきます。x個が利用可能が空きのライセンス枠数ですが、これは控えなくて良いです。
図:ライセンス合計数がわかる
サービスからAPIを有効化
今回は、GASのサービスで特殊なAPIを使うのでオンにします。
- スクリプトエディタに入り、サービスの横の+をクリックします。
- Enterprise License Manager APIを探してクリックし、追加をクリックします。
なおこのAPIはライセンスを調べるだけじゃなく、ライセンスを特定ユーザに割り当てたりすることが可能です。
図:これでスクリプトの準備はオッケー
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//ライセンス管理用変数 const total = ここにトータルライセンス数を入れる; //ライセンスのトータル合計数 const customerId = 'ここに顧客IDを入れる' //顧客ID const productId = 'Google-Apps'; //今回はGWSなのでこの値で固定 const skuName = "ここに商品名を入力する"; //商品名 //ライセンスの空き枠数を算出する function getLicenseList() { //計算用の変数 let assignLicense = []; //割り当て情報を格納する配列 let usedCount = 0 //消費してるライセンス数 let pageToken = null; //ライセンス割り当て情報をリクエスト do { const response = AdminLicenseManager.LicenseAssignments.listForProduct(productId, customerId, { maxResults: 500, pageToken: pageToken }); //ライセンス割り当て情報を取得し配列に結合 assignLicense = assignLicense.concat(response.items); //次のページトークンを取得 pageToken = response.nextPageToken; } while (pageToken); //割り当て情報からskuNameを元に消費ライセンス数を計算する for (const assignment of assignLicense) { if (assignment["skuName"] == skuName) { usedCount += 1 } } //ライセンスの空き数を調べる let slot = total - usedCount console.log(slot + "個余ってるよ!!"); } |
- AdminLicenseManager.LicenseAssignments.listForProductにて契約してる全サブスクリプションの情報を取得しています。
- 割り当て情報をassignLicenseに配列として格納する
- assignLicenseのうち、特定のskuNameの商品についてだけカウントする
- totalとの差し引きで残りの空き枠数がわかる
閾値が5として、残りの枠数が5以下になった場合には、自動でパートナーの担当者にメールで見積や発注を行うようにさらにコードを追加してみたりすると良いでしょう。