如何将数据从云功能流传输到云存储

时间:2020-05-17 23:15:35

标签: google-cloud-firestore cloud

我正在尝试创建一个云功能,该功能将一些数据(来自Firestore的文档)保存到云存储中。

以前曾编写过一些云功能,但对云存储,存储桶等来说是新的。 根据我的读物,我必须将这些数据“流式传输”到存储桶中。

我希望看到一个简短的代码片段:)

2 个答案:

答案 0 :(得分:1)

对于您要实现的目标,应该不会太复杂,所以希望能为您提供帮助。

要执行此操作,我将按照文章Backup Firestore data to storage bucket on a schedule in GCP中介绍的示例进行操作-如果您感兴趣,可以完全按照其进行操作-着重从Firestore到Cloud Storage的上传。我将说明要使用哪些部分以及如何使用它们,以达到您的理想状态

创建了Cloud Storage存储桶后-它应在设置中配置Multi-regionalNearline-您需要使用下面的代码,如下所示。

index.js文件:

const firestore = require('@google-cloud/firestore');
const client = new firestore.v1.FirestoreAdminClient();
// Replace BUCKET_NAME
const bucket = 'gs://<bucket-id>'
exports.scheduledFirestoreBackup = (event, context) => {
  const databaseName = client.databasePath(
    process.env.GCLOUD_PROJECT,
    '(default)'
  );
return client
    .exportDocuments({
      name: databaseName,
      outputUriPrefix: bucket,
      // Leave collectionIds empty to export all collections
      // or define a list of collection IDs:
      // collectionIds: ['users', 'posts']
      collectionIds: [],
    })
    .then(responses => {
      const response = responses[0];
      console.log(`Operation Name: ${response['name']}`);
      return response;
    })
    .catch(err => {
      console.error(err);
    });
};

package.json文件:

{
  "dependencies": {
    "@google-cloud/firestore": "^1.3.0"
  }
}

这些文件应使用Cloud Function中的配置创建,如下所示:唯一名称; Cloud Sub/Pub作为触发器;主题名称类似于或等于initiateFirestoreBackup;使用Node.js,源代码将是上述文件,其功能是执行scheduledFirestoreBackup

上述代码足以让您从Firestore导出到Cloud Storage,因为它会获取所有集合-或者您可以定义详细信息-并将其发送到您已经创建的存储桶。< / p>

此外,如果您需要有关使用Cloud Functions将文件上传到Cloud Storage的更多信息,也可以在此处进行检查:Uploading files from Firebase Cloud Functions to Cloud Storage

让我知道信息是否对您有帮助!

答案 1 :(得分:1)

感谢@gso_gabriel,我能够为我的文档创建部分备份。 对于任何有兴趣的人,这是我的代码的简化版本:

#!/usr/bin/env python3

import cv2
import numpy as np


def useLUT(im, grayList):
    """Make LUT and apply to image"""
    LUT = np.arange(256, dtype=np.uint8)    # Straight no-op LUT 0..255
    LUT[grayList] = 255                     # Values in list get changed to 255
    res = cv2.LUT(im, LUT)                  # Apply LUT
    return res

def useIsin(im, grayList):
    """Make pixels in grayList into white"""
    im[np.isin(im, grayList)] = 255
    return im

# Load image as greyscale
im = cv2.imread('image640.png',0)

# Your graylist
grayList = [102,103,104,105,106,107,108,109,110,111,112,113,114,115]

# Time and compare results
%timeit resA = useIsin(im, grayList)
%timeit resB = useLUT(im, grayList)