在云上运行非 Web 应用程序有意义吗?

Tyl*_*ler 0 google-cloud-platform google-cloud-run

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

gui*_*ere 5

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

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

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

import ....

var = todo(...)
connect = connect(...)
connect(var)

Run Code Online (Sandbox Code Playgroud)
  1. 首先,将它包装在这样的函数中
import ....

def my_function(request):
  var = todo(...)
  connect = connect(...)
  connect(var)
  return 'ok',200

Run Code Online (Sandbox Code Playgroud)
  1. 其次,添加一个flask服务器
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)))
Run Code Online (Sandbox Code Playgroud)
  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" ]
Run Code Online (Sandbox Code Playgroud)
  1. 构建(例如使用 Cloud Build)并在 Cloud Run 上部署服务

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

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