Cloud FunctionsからGASを実行したい

実現したいこと

Google Cloud FunctionsからGoogle Apps Scriptの関数を実行したいと思っています。

前提条件は以下の通りです。

  • Cloud FunctionsはNode.jsで記述
  • GASの関数名は「myFunctions」
  • GCPプロジェクト内にサービスアカウントは作成済み

発生している問題・分からないこと

console.logでエラーメッセージが返ってきます。(コード500)
書いているコードのどこがよくないのか分からなくて、修正しようがなく困っている状態です。

エラーメッセージ

error

1 { 2 message: 'Internal error encountered.', 3 domain: 'global', 4 reason: 'backendError' 5 }

該当のソースコード

Node.js

1const {google} = require('googleapis'); 2 3exports.stgVisitNotification = async (req, res) => { 4 try { 5 const scriptId = '****************'; 6 7 const clientEmail = "**********@developer.gserviceaccount.com"; 8 const privateKey = "-----BEGIN PRIVATE KEY-----\n**********\n-----END PRIVATE KEY-----\n"; 9 10 const auth = new google.auth.GoogleAuth({ 11 credentials: { 12 client_email: clientEmail, 13 private_key: privateKey, 14 }, 15 scopes: ['https://www.googleapis.com/auth/script.projects', 'https://www.googleapis.com/auth/script.external_request'], 16 }); 17 18 const script = google.script({ version: 'v1', auth }); 19 const result = await script.scripts.run({ 20 scriptId, 21 resource: { 22 function: 'myFunction', // Google Apps Scriptの関数名 23 }, 24 }); 25 26 console.log(result.data); 27 } catch (error) { 28 console.error(error); 29 } 30};

試したこと・調べたこと

上記の詳細・結果

元々サービスアカウントを別で作っていたのですが、Cloud Functionsは自動的にサービスアカウントが作成されることを知りました。
確認してみると確かにサービスアカウントが2つあり(自動で作られたものと、わざわざ作ったのも)、後者の認証情報をコードに書いてしまっていたので、前者のものに差し替えました。
...のですが、それでも解決せず...。
エラーメッセージは変わりませんでした。

補足

clientEmailやplivateKeyはコードにベタ打ちするんでなく、環境変数として持たせておく方がよいと思うのですが、今回は混雑回避のためベタ打ちのコードを使わせていただいています。

コメントを投稿

0 コメント