4

本文介绍了如何通过 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 团队,他们随后提交了一份错误报告。

4

1 回答 1

1

对于为 MacOS 编译的二进制文件,我遇到了同样的问题。云函数容器使用 Debian,linux 和 MacOS 可执行文件不兼容(参见https://stackoverflow.com/a/9439548)。

我安装了Cloud functions docker container,并在容器中下载并编译了我需要的二进制文件,然后将其复制到容器中并使用云函数进行部署。但是在您的情况下,您可能只需使用预编译的与 Debian 兼容的 python 解释器就可以逃脱惩罚。

于 2017-05-07T14:44:04.087 回答