Help us understand the problem. What is going on with this article?

Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~

More than 3 years have passed since last update.

同じ日にべつの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でも構いません。

https://script.google.com

3. ライブラリの読み込み

細かくService Accountの認証方法を書いてもいいのですが正直めんどくすばらしいライブラリが既にあるので、ライブラリを使いたいと思います。
以下のライブラリを読み込んでください。

読み込み方法は「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がやりやすくなりますね!

 

soundTricker
Google API、GSuite、GCP、Angular(1&2)、Google Apps Scriptらへんの人 一応Google Developer Expert(Apps Script)です。 https://developers.google.com/community/experts/directory/profile/profile-keisuke_oohashi
https://plus.google.com/u/0/112329532641745322160/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away