背景
以前よりアナウンスがありましたが、Cloud Functionsのnode.js6が非推奨となり、2019/4/1以降はnode.js8か10に移行する必要があります。
2019/4/1以前に作っていたnode.js6のCloud Functionsが動かなくなっていたので、node.js8に移行したのですが、その時にトリガーをStorage/PubSubにしていたFunctionsを修正するのに意外と時間が掛かったのでここに残します。
動かなかった時のエラーとしてStorageをトリガーとしていたFunctionsでは「ReferenceError: context is not defined」、PubSubをトリガーとしていたFunctionsでは「TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.」が出力されました。
対応
結論ですが、以下のページに書いていることが全てでした。
Cloud Functions を新しい Node.js に移行する
バックグラウンド関数のシグネチャが変更されているため、トリガーにStorageやPubSubを指定している場合は引数に修正が必要になります。
いずれも「(event, callback)」→「(data, context, callback)」に変更します。
トリガーがStorageのときの例
exports.sample = (event, callback) => {
const file = event.data;
const stringName = file.name;
callback();
}
exports.sample = (data, context, callback) => {
const stringName = data.name;
callback();
}
トリガーがPubSubの時の例
exports.sample = (event, callback) => {
const pubsubMessage = event.data;
const Buffer = require('safe-buffer').Buffer;
const textPayload = JSON.parse(Buffer.from(pubsubMessage.data, 'base64').toString());
callback();
}
exports.executeQuery = (data, context, callback) => {
const pubsubMessage = data;
const Buffer = require('safe-buffer').Buffer;
const textPayload = JSON.parse(Buffer.from(pubsubMessage.data, 'base64').toString());
callback();
}