FireBase sendMessage函数更新到v1 Google Cloud Endpoint

时间:2019-11-08 03:20:59

标签: firebase google-cloud-functions google-cloud-endpoints

所以...今天早上...我收到一封电子邮件,说:

  

我们的记录表明您拥有使用App Engine应用程序或   仍在调用GA前v0.1和v1beta1版本的云功能   App Engine和Cloud Functions元数据服务器的端点。

     

我们谨在此通知您,这些旧式端点是   计划于2020年4月30日关闭。2020年4月30日之后,   对v0.1和v1beta1端点的请求将不再   支持,并且可能返回HTTP 404 NOT FOUND响应。

我仅使用Firebase函数发送消息...,然后电子邮件继续标识出sendMessage函数为罪魁祸首。但是我不能...为了我的生命...弄清楚我需要在哪里更新端点。我的sendMessage函数如下:

exports.sendMessage = functions.database.ref('/messages/{receiverUid}/{senderUid}/{msgId}')
    .onWrite(async (change, context) => {
      const message = change.after.val().body;
      const receiverUid = change.after.val().receiverUid;
      const senderUid = change.after.val().senderUid;
      const msgId = change.after.val().msgId;
      if (!change.after.val()) {
        return console.log('Sender ', senderUid, 'receiver ', receiverUid, 'message ', message);
      }
      console.log('We have a new message: ', message, 'for: ', receiverUid);

我尝试遵循以下链接中的一些卷曲建议:https://cloud.google.com/compute/docs/migrating-to-v1-metadata-server

...但是每次尝试其中之一,我都会得到:

  

卷曲:(6)无法解析主机“ metadata.google.internal”

所以...在这一点上...我不知道我应该改变什么或者应该去哪里看。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

我在https://github.com/firebase/firebase-functions回购最新版本(3.3.0)中进行搜索,然后找到了文件:spec / fixtures / https.ts。在该文件中,有一些模拟函数,它们使用旧的/ computeMetadata / v1beta1端点。

这可能意味着应该将firebase-functions模块软件包更新为使用/ computeMetadata / v1端点。

答案 1 :(得分:0)

以前,我发现package.json中的旧依赖性正在拖入其他非常老的软件包中:

"@google-cloud/functions-emulator": "^1.0.0-beta.6",

尤其是它带来了gcs-resumable-upload v 0.10.2,低于google建议的v 0.13.0(请参阅https://cloud.google.com/compute/docs/migrating-to-v1-metadata-server#apps-to-update)。可能也是其他人。

解决方法是:

  • 删除@google-cloud/functions-emulator,或
  • 切换到现代的替代产品@google-cloud/functions-framework

答案 2 :(得分:0)

我遇到了同样的问题,但没有列出here列出的我正在使用的库。

就我而言,罪魁祸首是firebase-admin。我使用的是7.3.0版,并且找到了这个宝石:

$ grep -rni "computeMetadata/" *
firebase-admin/lib/auth/credential.js:30:var GOOGLE_METADATA_SERVICE_PATH = '/computeMetadata/v1beta1/instance/service-accounts/default/token';

因此,我更新了Cloud Functions库,如here所示:

npm install firebase-functions@latest --save
npm install firebase-admin@latest --save-exact

然后,瞧!

$ grep -rni "computeMetadata/" *
node_modules/firebase-admin/lib/auth/credential.js:30:var GOOGLE_METADATA_SERVICE_PATH = '/computeMetadata/v1/instance/service-accounts/default/token';

然后我重新部署并解决了问题。