GCPインスタンスをNode.js8のCloud Pub/Subでスケジュール起動停止(2)
前回「GCPインスタンスをNode.js8のCloud Pub/Subでスケジュール起動停止」で書いたNodejs8におけるGoogle公式リファレンスでのエラーについて。
以下のページのやり方ではNodejs8でエラーが発生してしまう。
https://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule?hl=ja
なんとかインスタンスの起動・停止は操作するような対応を書いたが、それでもなお、callback関数のエラーログをはいていた。
Contents
Nodejs8 Cloud Pub/Subの書き方
今回、callback関数のエラーも発生させないように修正したので書き残す。
const Buffer = require('safe-buffer').Buffer; const Compute = require('@google-cloud/compute'); const compute = new Compute(); exports.stopInstancePubSub = (event) => { try { const payload = _validatePayload( JSON.parse(Buffer.from(event.data, 'base64').toString()) ); compute .zone(payload.zone) .vm(payload.instance) .stop() .then(data => { // Operation pending. const operation = data[0]; return operation.promise(); }) .then(() => { // Operation complete. Instance successfully stopped. const message = 'Successfully stopped instance ' + payload.instance; console.log(message); }) .catch(err => { console.log(err); }); } catch (err) { console.log(err); } return 0; }; function _validatePayload(payload) { if (!payload.zone) { throw new Error(`Attribute 'zone' missing from payload`); } else if (!payload.instance) { throw new Error(`Attribute 'instance' missing from payload`); } return payload; }
特に大した変更はないのだが、pub/sub関数の第2引数にあったcallbackを無くし、関数の終了ポイントでのcallbackも削除した。
最後に「return 0;」を書いているのは、関数はnumberをリターンした方が良いとの情報があったからである。これもおそらくPromiseの解決を待たずにreturnしているのは正解ではないかもしれないが。
また、エラーキャッチ時には「return 1;」とした方が良さそうではある。
何はともあれ、上記のコードでCloud functions(Cloud Pub/Sub)をデプロイするとNodejs8でもスケジュールでインスタンスの起動・停止を動作させられた。同時に公式リファレンスコードをそのまま使用することによるエラーも回避できた。
ディスカッション
コメント一覧
まだ、コメントがありません