Имеет ли смысл запускать в облаке не веб-приложение? - PullRequest
0 голосов
/ 09 июля 2020

Я вижу, что все примеры в документации используют некоторую форму простого веб-приложения (например, Flask в Python). Можно ли использовать облачный запуск как не веб-приложение? Например, развернуть облачный запуск для использования сценария python, а затем использовать GCP Scheduler, чтобы каждый час запускать облачный запуск для запуска этого сценария? В основном я считаю, что это нужно, чтобы избежать развертывания и оплаты Compute Engine и платить только за то, когда контейнер запуска облака вызывается через планировщик.

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

Обязательно отвечать на HTTP-запрос. Это контракт Cloud Run.

  • Stateless (к контейнеру не прикреплен том)
  • Ответ на HTTP-запрос

Однако, если у вас уже есть python скрипт, его легко обернуть в веб-сервер flask. Допустим, у вас есть что-то вроде этого (я предполагаю, что имя файла 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

Во-вторых, добавьте 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)))
Добавьте flask в свой requirements.txt Создайте стандартный контейнер, вот пример 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" ]
Выполните сборку (например, с помощью Cloud Build) и разверните службу в Cloud Run

Теперь у вас есть URL-адрес, по которому вы можете позвонить с помощью Cloud Scheduler.

Будьте осторожны, максимальная продолжительность запроса на данный момент ограничена 15 минутами (скоро в 4 раза больше) и ограничена 2 vCPU и 2 ГБ памяти (опять же, скоро больше).

0 голосов
/ 09 июля 2020

Это зависит от того, что устанавливается в образе контейнера, так как нет необходимости устанавливать веб-сервер. Для , например , с таким изображением я могу создавать Android приложения, запускаемые всякий раз, когда репозиторий изменяется (файл не рекомендуется) ... и, вероятно, даже мог бы запустить безголовый эмулятор Android для теста Gradle задачи и результаты тестов publi sh в Pub / Sub (по крайней мере, пока набор тестов не будет работать слишком долго). Я имею в виду, что нужно понимать возможности Cloud Build, чтобы понять, что умеет Cloud Run.

...