39
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Apps ScriptAdvent Calendar 2015

Day 4

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

Posted at

同じ日にべつの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の認証方法を書いてもいいのですが正直めんどくすばらしいライブラリが既にあるので、ライブラリを使いたいと思います。
以下のライブラリを読み込んでください。

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

 

39
29
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?