Рубрики
Без рубрики

Министерство глупого пробега: винтажный Python на Cloud Run

Или «Как я сделал свой собственный без сервера Python 1.x время выполнения с помощью Cloud Run». Tagged с помощью Python, Serverless, Google Cloud, Cloud Run.

Представляем облачный запуск

Сегодня Google объявил Облачный запуск , продукт, который действительно красивый в своей простоте:

1) Вы пишете службу/приложение/функцию/что бы ни слушали HTTP -запросы на $ Порт ; 2) Ты пишешь Dockerfile что наследует от любого базового изображения, устанавливает любые необходимые зависимости и запускает ваш сервис; 3) Вы развертываете изображение для Cloud Run, и оно масштабируется по требованию (даже по нулю).

По сути, это «контейнеры Docker без серверов в качестве сервиса», и это именно то, что, я думаю, сообщество разработки PaaS/FAAS может использовать прямо сейчас по ряду причин:

Самое идиоматическое время выполнения Здесь нет потенциала для странности, специфичной для поставщика. Действительно, вы не можете получить более идиоматическое, чем использовать Из Python: 3.7 , или любое другое базовое изображение, которое вы хотите использовать.

Настраиваемость без платы за виртуальные машины на холостые условия Если у вас есть определенные рабочие нагрузки, которые не вписываются в границы наиболее «распространенных» обычно предоставляемых времени выполнения, до сих пор ваш лучший вариант – развернуть пользовательскую виртуальную машину, которая не будет масштабироваться до нуля и будет тратить много времени праздный. С помощью Cloud Run вы можете использовать Dockerfile Чтобы настроить свое время выполнения до контента вашего сердца.

Контейнеризация означает переносимость Определение вашего времени выполнения со стандартным Dockerfile означает, что вы можете взять это где угодно – Даже локально – Что означает, что вы не заперты в конкретного поставщика, и что локальная разработка вашего приложения строится прямо без необходимости делать что -либо особенное.

Все это здорово, и они, безусловно, помогут разработчикам делать великие дела …

… Но что, если вы хотите что -то сделать на самом деле глупый с этим вместо этого?

Представляем первое время выполнения Python 1.x без сервера

Когда я впервые начал играть с Cloud Run, я действительно хотел проверить границы того, что я мог бы с этим сделать. Могу я действительно бежать любой Время выполнения, которое я хотел? Могу ли я запустить супер современный релиз Python 3.8.0a3 Alpha? (Да). Ну, как насчет «винтажной» версии Python? Могу ли я развернуть приложение «Hello World», работающее на Python 1.x в Cloud Run? 🤔

Поиск «винтажных» изображений

Первой проблемой было найти базовое изображение для Python 1.x. Официальные изображения Python Docker Только публикуйте изображения для 2.7 и выше, так что там не повезло. Я не мог найти его где -нибудь еще, поэтому выглядело так, как будто мне пришлось построить базовое изображение с нуля.

Поиск «винтажного» источника

Создание базового изображения с нуля означало, что я должен был:

а) найти старый исходный код для версии Python 1.x; б) получить его для компиляции на базовом изображении современного распределения; C) Публикуйте это новое базовое изображение.

Найти источник был немного сложным. Источник для современных выпусков Python опубликован на https://www.python.org/downloads/source/ , но это возвращается только к Python 2.0.1, выпущенному 22 июня 2001 года.

К счастью, я нашел https://legacy.python.org/download/releases/src/ , который включает в себя выбросы источников еще в Python 1.0.1, который был выпущен чуть более 25 лет назад 15 февраля 1994 года.

Я решил попытаться нацелиться на последнее распределение Ubuntu, и удивительно, с несколькими небольшими пятнами, я смог получить Python 1.0.1, 1.1, 1.2 и 1.3, чтобы компилировать под Ubuntu 18.04.

Публикация некоторых «винтажных» изображений

Я опубликовал эти полученные сборки как изображения Docker под Винтаж-питон Репозиторий, так что это означает, что теперь вы можете запустить винтажную переписку Python, когда захотите:

$ docker run -it dustingram/vintage-python:1.0.1
Python 1.0.1 (Feb 23 2019)
Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam
>>> print "Hello world!"
Hello world!

Это также означает, что я могу сделать От Dastyingram/Vintage-Python: 1.0.1 в моем Dockerfile , что является огромным шагом к тому, чтобы иметь мою глупую время выполнения.

Поиск HTTP -сервера

У меня было сердце на Python 1.0.1, но, поняв, что Python не поставляется с HTTP -сервером до Python 1.3, я решил использовать его вместо того, чтобы пытаться вернуть HTTP -сервер в более старую версию.

В Python 1.3 я смог написать это:

import sys
from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

class MyHandler(SimpleHTTPRequestHandler):
    protocol_version = "HTTP/1.1"

    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write("Hello from Python " + sys.version)


if __name__ == '__main__':
    print('Running...')
    HTTPServer(('0.0.0.0', 8080), MyHandler).serve_forever()

Это устанавливает базовый сервер HTTP/1.1 на порту 8080, который отвечает на каждый запрос с помощью данного сообщения. Я Действительно Хотел доказать, что это была винтажная версия Python, обслуживающего запрос, поэтому я включил Sys.version наряду с ответом.

Контейнер для винтажного питона

После сохранения этого как app.py , все, что осталось сделать, это написать Dockerfile . Поскольку в моем приложении нет никаких зависимостей, Dockerfile довольно близко к Dockerfile В облачном запуска QuickStart

FROM dustingram/vintage-python:1.3

# Copy local code to the container image.
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .

# Service must listen to $PORT environment variable.
# This default value facilitates local development.
ENV PORT 8080

# Run the web service on container startup.
CMD ["python", "app.py"]

Здесь мы наследуем от моего винтажного изображения Python, копировать в моем app.py В контейнер установите Порт переменная среды (для локальной разработки), а затем запустите сервер, запустив Python app.py Анкет

Развертывание винтажного питона

С помощью Cloud Run, есть два шага: развертывание:

Создайте и отправьте свое изображение с помощью облачной сборки:

$ gcloud builds submit --tag gcr.io/my_project_id/helloworld

Затем разверните представленное изображение в Cloud Run:

$ gcloud beta run deploy --image gcr.io/my_project_id/helloworld

А потом это было развернуто!

Смотрите в действии здесь: https://helloworld-bpzdnjbrsq-uc.a.run.app/

Вывод

Облачный запуск Определенно достаточно гибкий, чтобы запустить любое время выполнения, я мог бы бросить в него – даже одна из старейших версий Python. Очевидно, я бы не посоветовал никому использовать Python 1.x в производстве: любая версия, прошедшая его EOL, по сути, неосвященная и строго ограниченная функциями.

Отсюда вы можете:

Оригинал: “https://dev.to/googlecloud/ministry-of-silly-runtimes-vintage-python-on-cloud-run-3b9d”