Идея заключается в следующем:
Вместо сборки и повторного развертывания при каждом изменении, при каждом запросезагружайте файл main.py и запускайте это. Несколько кратких вопросов:
Где бы я разместил свой основной файл?
Облачное хранилище Google / AWS S3
Не увеличится ли время обработки при извлечении файла после запроса?
Не совсем. В идеале вы должны развернуть Google Cloud Storage и Cloud Run в одном регионе. Преимущества включают хранение и обработку в одном месте. Это выгодно, так как бесплатно.
Время ответа на запрос также ничтожно мало, так как поездка туда и обратно осуществляется из одного и того же места. Типичный файл Python для микросервиса не такой большой; минимизация времени запроса.
Как я буду запускать это в моей предпочтительной среде разработки?
Вот мясо и картошка из него.
Теперь откройте свой любимый редактор; мы будем использовать наш предыдущий код.
main.py:
# main.py # pip install fastapi uvicorn import uvicorn from fastapi import FastAPI app = FastAPI() @app.get("/") def root(): return {"message": "Hello World"} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8080)
Докерфайл:
FROM --platform=amd64 ubuntu:20.04 RUN apt-get update RUN apt-get install -y python3-pip RUN pip3 install python-multipart RUN pip3 install fastapi RUN pip3 install uvicorn RUN apt-get install -y tini RUN apt-get clean COPY . /app EXPOSE 8080 ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["python3", "app/main.py"]
Нам нужно отправлять наш файл main.py каждый раз, когда мы запускаем наш код из редактора. В документах Google есть отличный стартовый код.
from google.cloud import storage import os, sys def upload_blob(bucket_name, source_file_name, destination_blob_name): # where to find the credentials. if sys.platform == 'linux': os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/app/creds.json' else: os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'creds.json' """Uploads a…