Google cloud firestore 如何将数据从云功能流式传输到云存储
我正在尝试创建一个云函数,将一些数据(来自firestore的文档)保存到云存储中 以前写过一些云函数,但对云存储、存储桶等有点陌生。 根据我所读到的,我必须将这些数据“流”到一个存储桶中Google cloud firestore 如何将数据从云功能流式传输到云存储,google-cloud-firestore,cloud,Google Cloud Firestore,Cloud,我正在尝试创建一个云函数,将一些数据(来自firestore的文档)保存到云存储中 以前写过一些云函数,但对云存储、存储桶等有点陌生。 根据我所读到的,我必须将这些数据“流”到一个存储桶中 我很想看到一个简短的片段,可以做到这一点:)为了让您实现这一点,它不应该是非常复杂的事情,所以我希望我能帮助您 为了实现这一点,我将遵循本文中介绍的示例—如果您感兴趣,可以完全遵循该示例—重点关注从Firestore到云存储的上传。我将解释使用哪些部件以及如何使用它们,以实现您的目标 一旦您创建了云存储桶-它
我很想看到一个简短的片段,可以做到这一点:)为了让您实现这一点,它不应该是非常复杂的事情,所以我希望我能帮助您 为了实现这一点,我将遵循本文中介绍的示例—如果您感兴趣,可以完全遵循该示例—重点关注从Firestore到云存储的上传。我将解释使用哪些部件以及如何使用它们,以实现您的目标 一旦您创建了云存储桶-它应该在设置中配置了
Multi-regional
和Nearline
-您需要使用下面的代码,如下所示
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);
});
};
{
"dependencies": {
"@google-cloud/firestore": "^1.3.0"
}
}
应该创建这些文件,云函数中的配置如下:一个唯一的名称<代码>云订阅/发布作为触发器;主题名称类似或等于initiateFirestoreBackup
;使用Node.js,源代码将是上面编写的文件,并执行scheduledFirestoreBackup
以上代码应该足以让您从Firestore导出到云存储,因为它将获取您的所有集合(或者您可以定义具体信息)并发送到您已经创建的bucket
除此之外,如果您想了解有关使用云功能将文件上载到云存储的更多信息,也可以在此处查看:
如果这些信息对你有帮助,请告诉我 多亏了@gso_gabriel,我才能够为我的文档创建部分备份。 对于任何感兴趣的人,这里是我的代码的简化版本:
const bucketName = 'myproject.appspot.com';
exports.backup = functions.https.onCall(async (data, context) => {
const userDoc = await admin.firestore().collection('users').doc('abc123').get();
await writeFile('temp', 'user.json', JSON.stringify(userDoc.data()));
}
async function writeFile(dirName, fileName, content) {
var bucket = admin.storage().bucket(bucketName);
const destFilename = dirName + '/' + fileName;
const file = bucket.file(destFilename);
const options = {
destination: destFilename,
metadata: { contentType: "application/json" }
};
await bucket.file(destFilename).save(content, options);
}
是的,这个解决方案也可以在这里找到:不幸的是,它导出的数据比我想要的多(子集合等),这意味着高成本。使用您的第二个链接,我能够实现部分备份—这非常适合我的需要。令人惊叹的!非常感谢:)当然,我理解你的观点,@user6097845是有道理的。我很高兴它帮助了你!