【问题标题】:Run Java Jar within Python Google Cloud Function在 Python Google Cloud Function 中运行 Java Jar
【发布时间】:2021-05-14 09:29:44
【问题描述】:

我正在尝试将一些以前在 Heroku 上运行的旧 Ruby 代码移植到基于 Python 的 Google Cloud Function。

此代码运行 Apple 的 Reporter 工具,该工具是“一个命令行工具,可用于下载销售和趋势报告以及付款和财务报告”。文档可以在here找到。

Ruby 代码多年来一直运行良好,直到昨天,在带有 Ruby + Java 构建包的 Heroku 上运行。一个小的 sn-p,其中接收到 args 选项:

options = [
    vendor_id,
    file_type,
    sub_file_type,
    'Daily',
    trimmed_date,
    version
]
Dir.chdir("#{Rails.root}/tmp/") do
  stdout, stderr, status = Open3.capture3("java -jar #{Rails.root}/public/jars/Reporter.jar p=Reporter.properties m=Robot.XML Sales.getReport #{options.join(', ')}")
  return {:status => status, :error => stderr.to_s, :stdout => stdout.to_s }
end

没有代码或堆栈更新后我在 Heroku 上看到的错误是 Network is available but cannot connect to application. Check your proxy and firewall settings and try again.

我们的大多数其他类似流程已移至 Google Cloud Functions,因此在出现上述错误后,我想我也将其移走。

所以这次在 Python 中使用了类似的 sn-p:

from subprocess import Popen, PIPE

def execute_reporter_jar(vendor_id, trimmed_date, file_type, api_version):
    process = Popen(["java -jar Reporter.jar p=Reporter.properties Sales.getReportVersion Sales, Detailed"], stdin=PIPE, stdout=PIPE, shell=True)
    out, err = process.communicate()
    print("returncode = %s", process.returncode)
    print("stdout = %s", out)
    print("stderr = %s", err)

这在本地运行良好,但是当我部署到 Google Cloud 时,它似乎在几毫秒内成功运行,但是,实际上什么也没发生,当我深入挖掘时,似乎子进程返回了 127 - command not found 错误。所以看来云功能无法访问Java。

在 24 小时后,我遇到了这个问题。任何人都可以帮忙吗?我的 Java 知识为零,我知道云函数有 Java 运行时,但我更愿意坚持使用 Python。

最终目标是让 Apple 的记者运行并将请求的文件保存到 Google Cloud Storage。

提前致谢!

【问题讨论】:

    标签: java python ruby google-cloud-platform google-cloud-functions


    【解决方案1】:

    Cloud Function 的 Python 运行时(3.7 和 3.8)的执行环境目前基于 Ubuntu 18.04(查看信息in this link)。

    运行时仅包含以下system packages,由于包含的系统包有限,通常不推荐运行子进程。

    如果坚持使用 Python 对您来说至关重要,您可以尝试使用 BuildPack CLIextending the builder image 部署您的函数以在 Python 运行时安装 Java,或者如果您的应用程序可以 docker 化,请考虑自己构建一个包含 Java 的映像和deploying your application in Cloud Run

    【讨论】:

    • 谢谢,丹尼尔。我将查看您提供的链接,但我开始对部署到云运行的 dockerized 图像得出相同的结论。 Python 不是最重要的,但团队中没有人具备 Java 技能。
    • 如果您被困在图像构建中,请提出一个新问题!
    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多