我只需要每天运行一个数据流管道,但在我看来,像 App Engine Cron Service 这样需要构建整个网络应用程序的建议解决方案似乎有点太多了。
我正在考虑从 Compute Engine Linux VM 中的 cron 作业运行管道,但也许这太简单了:)。这样做有什么问题,为什么没有人(我猜除了我之外)建议这样做?
最佳答案
这就是我使用 Cloud Functions、PubSub 和 Cloud Scheduler 做到的
(这假设您已经创建了一个 Dataflow 模板并且它存在于您的 GCS 存储桶中的某处)
const google = require('googleapis');
exports.triggerTemplate = (event, context) => {
// in this case the PubSub message payload and attributes are not used
// but can be used to pass parameters needed by the Dataflow template
const pubsubMessage = event.data;
console.log(Buffer.from(pubsubMessage, 'base64').toString());
console.log(event.attributes);
google.google.auth.getApplicationDefault(function (err, authClient, projectId) {
if (err) {
console.error('Error occurred: ' + err.toString());
throw new Error(err);
}
const dataflow = google.google.dataflow({ version: 'v1b3', auth: authClient });
dataflow.projects.templates.create({
projectId: projectId,
resource: {
parameters: {},
jobName: 'SOME-DATAFLOW-JOB-NAME',
gcsPath: 'gs://PATH-TO-YOUR-TEMPLATE'
}
}, function(err, response) {
if (err) {
console.error("Problem running dataflow template, error was: ", err);
}
console.log("Dataflow template response: ", response);
});
});
};
package.json 看起来像
{
"name": "pubsub-trigger-template",
"version": "0.0.1",
"dependencies": {
"googleapis": "37.1.0",
"@google-cloud/pubsub": "^0.18.0"
}
}
https://cloud.google.com/scheduler/docs/tut-pub-sub
关于google-cloud-dataflow - 安排 Google Cloud Dataflow 作业的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43816707/