Firebae Function (Google Cloud Function) を使用して、 Firetore の特定のデータ更新をトリガーに Google Cloud Scheduler を設定したいと思っています。
以下のようなコードで試したのですが、 認証の部分でこけているのか、エラーが出てしまいます。
typescript
1import { CloudSchedulerClient } from "@google-cloud/scheduler"; 2 3export const someFunction = functions 4 .region("asia-northeast2") 5 .firestore.document("/path/to/document") 6 .onUpdate(async (change, context) => { 7 8 // 処理開始 9 functions.logger.info("start"); 10 const client = new CloudSchedulerClient(); 11 12 // インスタンス生成 13 const pjid = await client.auth.getProjectId(); 14 functions.logger.info("pjid", pjid); 15 16 // ジョブを作成 17 const [res] = await client.createJob({ 18 job: { 19 pubsubTarget: { 20 topicName: "some-topic", 21 data: Buffer.from("test") 22 }, 23 schedule: "* * * * *" 24 }, 25 parent: client.locationPath("some project", "asia-northeast1") 26 }); 27 28 // 終了 29 functions.logger.info("name: ", res.name) 30 });
Error
1Error: 7 PERMISSION_DENIED: Cloud Scheduler API has not been used in project XXXXXX before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudscheduler.googleapis.com/overview?project=XXXXXX then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. 2 at Object.callErrorFromStatus (/workspace/node_modules/@google-cloud/scheduler/node_modules/@grpc/grpc-js/build/src/call.js:31:26) 3 at Object.onReceiveStatus (/workspace/node_modules/@google-cloud/scheduler/node_modules/@grpc/grpc-js/build/src/client.js:176:52) 4 at Object.onReceiveStatus (/workspace/node_modules/@google-cloud/scheduler/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:342:141) 5 at Object.onReceiveStatus (/workspace/node_modules/@google-cloud/scheduler/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:305:181) 6 at process.nextTick (/workspace/node_modules/@google-cloud/scheduler/node_modules/@grpc/grpc-js/build/src/call-stream.js:124:78) 7 at process._tickCallback (internal/process/next_tick.js:61:11)
ここで、エラーの方に出ている XXXXXX
(数字)と、ソースの方にある pjid
(文字列) の出力は全く違うものを指しています。
new CloudSchedulerClient()
の引数に keyFilename
や projectId
も入れて試してみたのですが、全く同じエラーが出ました。
もしかすると keyFilename
の指定方法が Firebase Functions に乗る事によって若干変わるのかもしれませんが、調べきれませんでした。
エラーにある
https://console.developers.google.com/apis/api/cloudscheduler.googleapis.com/overview?project=XXXXXX
ですが、そのままアクセスすると閲覧権限が無い旨が表示されます。XXXXXX
に正しいプロジェクトID (pjid)
を入れると、正しくダッシュボードが表示されて、APIが有効になっていることが分かります。
別フォルダで CloudSchedulerClient
を単体で試した時はうまくいったので、やはりAPIが有効になっていないという事はないと思います。
ご存じの方いらしゃいましたら、ご教授頂けますと幸いです。
あなたの回答
tips
プレビュー