同じ日にべつのAdvent Calandarの投稿が被ってしまって泣きそうになっている大橋です。
初日には最近のGASの傾向を書きその中で、GASでGoogleのService Account認証が可能になったことを触れました。
今回はこのService Account認証を利用して、AppEngineのデプロイ済みバージョン一覧を取得してみたいと思います。
なおService Accountを利用することで今までのOAuth2の様にわざわざ画面や、トークン保存のためのコールバックを必要とせず、
直ぐに利用が可能になるところが非常に良い点です。
準備
1. Service Accountの作成
まず今回はService Accountの作成が必要です。
作成方法は めんどく 他の皆さんが既にいっぱい書いているので適当にQiitaで検索してService Accountを作成してください。
作成する際はJSONコードをダウンロードして下さい。
なおついでにGoogle App Engine Admin APIもDeveloper Console上で利用可能状態にしておいてください。
2. GASプロジェクトの作成
適当なGASプロジェクトを作成してください。
SpreadsheetからでもStandaloneでも構いません。
3. ライブラリの読み込み
細かくService Accountの認証方法を書いてもいいのですが正直めんどくすばらしいライブラリが既にあるので、ライブラリを使いたいと思います。
以下のライブラリを読み込んでください。
- コード
- ライブラリキー
- MJ5317VIFJyKpi9HCkXOfS0MLm9v2IJHf
読み込み方法は「GASのライブラリを使って楽したい① とりあえず使ってみる_ (:3」∠)_ 」を参考にしてください。
4. 認証キー情報の保存
1.で取得したJSONコードをGASのスクリプトプロパティにKEY名jsonKey
などで保存しておいてください。
コード
それではコードです。
//APPIDを設定
var APP_ID = "APPID";
//モジュールIDを設定
var MODULE_ID = "default";
function myFunction() {
// 認証情報のJSONを取得
var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));
// GSAppの準備 Scopeを https://www.googleapis.com/auth/cloud-platform に設定
var serverToken = new GSApp.init(jsonKey.private_key, ["https://www.googleapis.com/auth/cloud-platform"], jsonKey.client_email);
//トークンを取得するユーザを設定して、トークンを取得
var tokens = serverToken.addUser(jsonKey.client_email).requestToken().getTokens();
//リクエストの設定
var fetchOptions = {method:"GET",muteHttpExceptions:true, contentType:"application/json", headers:{Authorization:"Bearer "+tokens[jsonKey.client_email].token}};
//リクエストURLを作成
var url = "https://appengine.googleapis.com/v1beta4/apps/" + APP_ID + "/modules/" + MODULE_ID + "/versions";
//fetch
var res = UrlFetchApp.fetch(url, fetchOptions);
// ログ
JSON.parse(res.getContentText()).versions.forEach(function(versionData){
Logger.log(Utilities.formatString("ID: %s\tRuntime: %s\tdeployer: %s\tcreationTime: %s", versionData.id || "", versionData.runtime || "", versionData.deployer || "", versionData.creationTime || ""));
});
}
これだけで認証してAppEngineのバージョン一覧が取れちゃいます。
もちろんうまく作ればデプロイや、バージョン切り替えなども実装可能です。
素晴らしですね!
まとめ
サービスアカウントを利用することでより様々なGoogle APIを利用可能になります。
更に自動化したりSlackなどからChatOpsがやりやすくなりますね!