【问题标题】:Does it make sense to run a non web application on cloud run?在云上运行非 Web 应用程序有意义吗?
【发布时间】:2020-10-29 10:42:18
【问题描述】:

我看到文档中的所有示例都使用某种形式的简单 Web 应用程序(例如 Python 中的 Flask)。是否可以将云运行用作非 Web 应用程序?例如,部署 cloud run 以使用 python 脚本,然后使用 GCP Scheduler 每小时调用 cloud run 来运行该脚本?基本上我的想法是避免必须部署和支付 Compute Engine,并且只在通过调度程序调用云运行容器时付费。

【问题讨论】:

    标签: google-cloud-platform google-cloud-run


    【解决方案1】:

    必须回答 HTTP 请求。是Cloud Run的合约

    • 无状态(没有卷附加到容器)
    • 响应 HTTP 请求

    但是,如果您已经有一个 python 脚本,那么很容易将它包装在一个烧瓶网络服务器中。比方说,你有这样的东西(我假设文件名是 main.py -> 对 Dockerfile 很重要

    import ....
    
    var = todo(...)
    connect = connect(...)
    connect(var)
    
    
    1. 首先,将其包装在这样的函数中
    import ....
    
    def my_function(request):
      var = todo(...)
      connect = connect(...)
      connect(var)
      return 'ok',200
    
    
    1. 其次,添加一个flask server
    from flask import Flask, request
    import os
    import ....
    
    app = Flask(__name__)
    
    @app.route('/')
    def my_function(request):
      var = todo(...)
      connect = connect(...)
      connect(var)
      return 'ok',200
    
    if __name__ == "__main__":
      app.run(host='0.0.0.0',port=int(os.environ.get('PORT',8080)))
    
    1. 在您的requirements.txt 中添加烧瓶
    2. 构建标准容器,这里是 Dockerfile 的示例
    FROM python:3-alpine
    
    WORKDIR /app
    
    COPY requirements.txt .
    
    RUN pip install --no-cache-dir -r requirements.txt
    
    COPY . .
    ENV PORT 8080
    
    CMD [ "python", "main.py" ]
    
    1. 构建(例如使用 Cloud Build)并在 Cloud Run 上部署服务

    现在您有了一个可以使用 Cloud Scheduler 调用的 URL。

    请注意,最大请求持续时间目前限制为 15 分钟(很快会增加 4 倍),限制为 2vCPU 和 2Gb 内存(同样,很快会更多)。

    【讨论】:

    • 太棒了!非常感谢您的回复!正是我想要的。
    【解决方案2】:

    这取决于容器镜像中安装的内容,因为不需要安装网络服务器。对于example,有了这样的图像,我可以构建 Android 应用程序,每当存储库更改时触发(文件不包括推荐)......甚至可能为 Gradle 测试任务运行无头 Android 模拟器并将测试结果发布到 Pub/ Sub(至少在测试套件不会运行太久的情况下)。我的意思是,必须了解 Cloud Build 的可能性才能了解 Cloud Run 可以做什么。

    【讨论】:

    • 我有一个与数据库交互的 Python 脚本。我在注册表中有那个容器,并将它部署在 Cloud Run 上。但是,我遇到了问题,因为我没有运行任何 HTTP 服务(例如 Flask)。我想安排云运行每天运行这个脚本。如果不将它作为类似 HTTP 的服务运行,我似乎无法让它工作。
    • @Tyler 你的容器必须响应 HTTP 请求。这就是 Cloud Run 安排容器生命周期和运行状况检查的方式。您的容器通过 HTTP 请求开始运行,并以 HTTP 响应结束。阅读本文档:cloud.google.com/run/docs/reference/container-contract
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2020-10-03
    • 2014-08-22
    • 2012-08-04
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多