Обязательно отвечать на HTTP-запрос. Это контракт Cloud Run.
- Stateless (к контейнеру не прикреплен том)
- Ответ на HTTP-запрос
Однако, если у вас уже есть python скрипт, его легко обернуть в веб-сервер flask. Допустим, у вас есть что-то вроде этого (я предполагаю, что имя файла main.py
-> важно для Dockerfile в конце )
import ....
var = todo(...)
connect = connect(...)
connect(var)
- Сначала оберните это в такой функции
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 ГБ памяти (опять же, скоро больше).