本文介绍了如何通过 Cloud Function 执行用 java 编写的管道。但是,我正在尝试使用用 python 编写的管道来完成此操作。
在使用 python 的 virtualenv 环境执行本地云函数时,我能够成功地做到这一点。这是在打包为 zip 之前。
exports.foo = function(event, callback) {
var spawn = require('child_process').spawn;
var child = spawn(
'ENV/bin/python',
["pipeline.py",
"--project $PROEJCT_ID",
"--temp_location gs://$BUCKET/temp",
"--staging_location gs://$BUCKET/staging",
"--runner DataflowRunner"],
{cwd: __dirname}
);
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
child.on('close', (code) => {
console.log(`child process exited with code ${code}`);
callback();
});
};
但是,当我将函数实际部署到 GCP 并从那里运行时,管道永远不会执行。
对此的任何见解将不胜感激。
以下是运行已部署函数时的日志:
D foo vxvt93uc415v 2017-03-05 00:56:43.639 Function execution started
D foo vxvt93uc415v 2017-03-05 00:56:57.945 Function execution took 14308 ms, finished with status: 'ok'
更新:
有一个错误,我没有正确注销:
ENV/bin/python is not a supported ELF or interpreter script
我已经联系了 Cloud Functions 团队,他们随后提交了一份错误报告。