从GCF功能下载文件



我正在本地机器中使用puppeteer运行NodeJS脚本,以从Internet下载一些资产。我希望该脚本作为谷歌云功能运行。

我只是想知道,是否有任何与GFC相关的本地空间,我们可以在那里保存这些文件并在以后访问,或者我们可以指定任何云存储桶URL来保存下载。

#!/usr/bin/env node
const { program } = require('commander');
const puppeteer = require('puppeteer');
program
.option('-e, --email <email>', 'Login Email Address', process.env.LOOKER_EMAIL || '')
.option('-p, --password <password>', 'Login Password', process.env.LOOKER_PASSWORD || '')
.option('-d, --dashboard <id>', 'Dashboard To Download');
program.parse(process.argv);
const fs = require('fs');
const basePath = 'C:\card\'
(async () => {
const loginEmail = program.email;
const loginPassword = program.password;
const dashboardId = program.dashboard;
// used puppeteer to download some files
const browser = await puppeteer.launch({
headless: true
})
let pages = await browser.pages();
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 1080 });
await page.goto(loginUrl);
await page.waitForSelector(loginEmailSelector);
await page.type(loginEmailSelector, loginEmail);
await page.type(loginPasswordSelector, loginPassword);
await Promise.all([
page.waitForNavigation(),
page.click(loginButtonSelector)
]);
await page.goto(`https://somewebsite/${dashboardId}`);
await page.waitForSelector(menuSelector, {
visible: true
});
await page.click(menuSelector);
await page.waitForSelector(downloadSelector, {
visible: true
});

const ts = Date.now()
const downloadLoc = basePath + ts + '\'
console.log('downloadLoc ', downloadLoc)
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: downloadLoc 
})
console.log(`your file's on the way!`)

})();

所以在脚本中,我只是在C驱动器中下载文件,如果可能的话,我想把它存储在一些云存储中,如果你有任何建议,请告诉我。

云函数的概念假设代码应该是无状态的,这意味着任何数据都应该存储在外部,尽管有可能使用/tmp目录,但这只是暂时的目的。推荐的解决方案是云存储(参考(。

但是,不仅可以使用云存储来保持状态。这在二进制对象(即文件(的情况下是最好的。

另一方面,如果这些文件包含数据,您可以尝试选择Google NoSQL数据库中的一个,如Firestore、Datastore(实际上是数据存储模式下的Firestore(和Firebase Realtime数据库。所有这些语言都有很好的API,用于多种语言,当然包括node.js。此外,如果您计划创建更大的解决方案,甚至可以将BigTable用于海量数据,如果您需要分析,则可以使用BigQuery。所有这些都取决于你需要什么。

上面提到的Google API很好也很方便,因为在云功能中,不需要对特定产品进行身份验证,从而节省了大量代码和资源。所有的解决方案都是无服务器的,所以当您的解决方案增长时,您不必关心底层服务器和扩展。此外,当你在GCP内部进行时,你可以在资源之间获得极快的网络速度。

最新更新