Використання хмар з кожним роком зростає і у 2022 році фахівці прогнозують збільшення попиту мінімум на 25%. Сервіси, що пропонуються з хмари – це аналогічні сервіси, які надає власна ІТ-служба компанії: пошта, офісний пакет, CRM, бізнес-додатки тощо. Але керовані хмарні служби беруть на себе частину навантаження з технічного обслуговування, залишаючи більше можливостей на розвиток. А ще вони дозволяють швидше впроваджувати та модифікувати програми, забезпечують високу доступність за рахунок масштабування відповідно до поточного попиту та призводять до оптимізації витрат завдяки розрахункам з оплатою за фактом використання хмарного ресурсу. Особливою популярністю у цьому сегменті користуються послуги з лінійки Compute & Serverless – послуги віртуальних машин та платформ розробки за допомогою хмари.
Compute & Serverless: обчислювальна потужність хмари від Google
Як отримати безпечне, стійке до відмов, легко масштабоване середовище для запуску коду без великих фінансових вкладень? Один із способів – створити це середовище на базі платформних хмарних сервісів за допомогою безсерверних обчислень (serverless computing). Так вам не доведеться думати про обслуговування ІТ-інфраструктури та пошук вузькоспеціалізованих співробітників. Обчислювальні ресурси масштабуватимуться автоматично, у міру зростання або зниження навантажень. Замість завантаження своєї програми на конкретну віртуальну машину, постачальник хмарних обчислень, у даному випадку Google, надає точний рівень ресурсів, необхідний для виконання операції. Як тільки це буде зроблено, ці ресурси зникнуть, тому ви платите лише за те, що ви використовуєте в кожний конкретний момент часу.
Обчислювальні та безсерверні послуги включають також:
- Compute Engine – сервіс віртуальної машини в моделі Infrastructure as a Service,
- App Engine — платформа розробки для написання та розгортання коду з автоматизованими процесами підтримки інфраструктури,
- Google Kubernetes Engine – Kubernetes у хмарі, тобто платформа для управління контейнерами та кластерами,
- Cloud Run — безсерверний сервіс, призначений для створення та розробки додатків у контейнерах,
- Хмарні функції — сервіс моделі Function as a Service, який дозволяє розміщувати, викликати та виконувати код функції у відповідь на певну подію.
Що таке Cloud Run?
Google Cloud Run – це керована обчислювальна платформа, що базується на Knative і дозволяє запускати контейнери, які можна викликати за допомогою запитів HTTP. Це безсерверне рішення, тобто користувачеві не потрібно контролювати будь-який компонент інфраструктури – технічне обслуговування фізичної машини, оновлення програмного забезпечення, балансування навантаження або масштабування. Він фокусується тільки на написанні коду в будь-якій технології на ваш вибір, використовуючи ваші улюблені бібліотеки або ваші власні двійкові файли.
Не маючи інфраструктури для керування, команда може зосередитися на написанні програми, дозволяючи керованій обчислювальній платформі від Google керувати виділенням ресурсів для задоволення попиту. Отже, давайте подивимося, як вона працює на платформі Google Cloud Platform, коли саме його використовувати, плюси та мінуси та кроки для початку роботи.
Google Cloud Run та необмежена масштабованість сервісів
У хмарних обчисленнях масштабування – це автоматизований процес, який додає або видаляє сервіси, сховища та мережеві функції відповідно до робочого навантаження або запитів. По суті, масштабованість гарантує, що програма або служба працюватимуть незалежно від кількості користувачів. Масштабування зазвичай означає додавання або зменшення кількості активних серверів або екземплярів, які використовуються відповідно до вимог ресурсів.
Cloud Run гарантує, що в міру розширення або скорочення бізнесу ІТ-програмне забезпечення буде відповідати цим тенденціям. У Google Cloud Run кожна ревізія автоматично масштабується до кількості екземплярів контейнера, необхідного для задоволення запитів. У разі відсутності руху корти автоматично обнуляються. Тим не менш, ви можете встановити граничну кількість екземплярів контейнера, з якого слід почати і як далеко просунутися, щоб спробувати ефективно керувати фінансовими ресурсами.
Щоб уникнути ситуацій, що здатні уповільнити роботу ваших служб, хмарні служби Google надають можливість розподіляти динамічні ресурси. Зокрема, Google Cloud Run підтримує ваші програми незалежно від кількості запитів або трафіку, гарантуючи цю допомогу в гнучкій формі оплати в міру використання.
Які існують функції хмарного запуску
Запуск будь-якої технологія. Оскільки сервіс працює з контейнерами, він дозволяє створювати код програми за допомогою будь-якої мови програмування (включаючи Go, Python, Java, Ruby або Node.js), бібліотек або двійкових файлів.
Використання можливостей контейнерів. Cloud Run завантажує будь-які образи контейнерів та добре інтегрується з такими технологіями, як Cloud Build, Artifact Registry та Docker.
Інтеграція з іншими хмарними послугами. Оскільки Cloud Run є елементом Google Cloud Platform, легко створити одне інтегроване середовище, використовуючи кілька або навіть десяток інших сервісів GCP.
Не обмежується одним хмарним сервісом. Сервіс заснований на технології з відкритим вихідним кодом Knative та на контейнерах, завдяки чому ресурси переносяться, що виключає залежність від одного хмарного провайдера (cloud lock-in).
Повністю керований сервіс. Після налаштування він не вимагає повторних оновлень для правильного керування середовищем програм.
Миттєве автоматичне масштабування. У ситуаціях підвищеного навантаження сервіс масштабується для забезпечення високої доступності, а при зниженні трафіку скорочує кількість функціонуючих інтентів, забезпечуючи таким чином витрати, адекватні споживанню.
Стабільність завдяки резервуванню. Ресурси, що працюють у Cloud Run у регіональній моделі, постійно передаються між подружжям, щоб забезпечити збереження даних навіть у разі збою серверної кімнати Google Cloud.
Безпека. З двійковою авторизацією можна розгорнути лише довірені образи контейнерів. Ресурси працюють у ізольованих середовищах з певними ідентифікаторами та рівнями доступу. Ви можете використовувати власний зашифрований ключ для забезпечення безпеки та керувати даними доступу через службу Secret Manager.
Контроль та моніторинг. Сервіс інтегрований з інструментами Cloud Monitoring, Cloud Logging, Cloud Trace та Error Reporting для забезпечення працездатності програм. Рівень використання служби можна відстежувати у GUI Metrics разом із журналами з контейнерів. Крім того, у Cloud Run є вбудований функціонал, що дозволяє швидко відновити попередню версію контейнера (відкат).
Мови програмування в Cloud Run
Вибір певної мови програмування не вплине на створення та запуск корпоративних програм за допомогою Cloud Run. Платформа підтримує всі мови програмування, які можна запустити в контейнері і рекомендується у налаштуваннях вибрати фреймворк, з яким команда вже знайома.
Сфери застосування Cloud Run
Веб-сервіси: адміністрування бек-офісу
Для адміністрування бек-офісу часто потрібні документи, електронні таблиці та інші спеціальні інтеграції, а також запуск веб-програми, яка надається постачальником. Розміщення контейнерної внутрішньої веб-програми в Cloud Run означає, що воно завжди готове для застосування і ви сплачуєте лише тоді, коли вона використовується.
Обробка даних: спрощене перетворення даних
Створюйте програми для обробки даних Cloud Run, які перетворюють спрощені дані по мірі їх надходження та зберігають їх у вигляді структурованих даних. Перетворення можна запустити з джерел Google Cloud. При створенні файлу .csv запускається подія та доставляється до служби Cloud Run. Потім дані вилучаються, структуруються та зберігаються в таблиці BigQuery.
Автоматизація: генерація документів за розкладом
Заплануйте щомісячне завдання за допомогою Cloud Scheduler для створення рахунків за допомогою служби Cloud Run. Оскільки контейнери, що містять двійкові файли, можуть бути розгорнуті в Cloud Run, він може працювати в інструменті створення PDF-файлів, такому як LibreOffice, без сервера, що означає оплату тільки при створенні рахунків.
Інтернет служба
Використовуючи службу Cloud Run, ви можете створювати HTTP-сторінки, що динамічно відображаються, з використанням таких технологій, як nginx, ExpressJS або django, і мати базу даних в Cloud SQL.
Розгортання контейнерних програм за допомогою Cloud Run: короткий гайд
В короткій інструкції ми покажемо, як розгорнути зразок контейнера, який вже завантажено в репозиторій Container Registry в Cloud Run.
Перш ніж ви почнете
- Якщо ви новачок у Google Cloud, створіть обліковий запис, щоб оцінити, як продукти від Google працюють у реальних сценаріях.
- У Google Cloud Console на сторінці вибору проекту виберіть або створіть проект Google Cloud.
- Переконайтеся, що білінг увімкнено для вашого хмарного проекту. Дізнайтеся, як підтвердити, що оплата включена для вашого проекту.
Розгортання зразка контейнера
Для того, щоб розгорнути контейнер необхідно:
- Перейти до Cloud Run
- Натисніть кнопку ➡Створити службу, щоб відобразити форму «Створити службу».
У вигляді,
- Виберіть ➡Розгорнути одну версію з наявного відображення контейнера.
- Використовуйте us-docker.pkg.dev/cloudrun/container/hello як відображення контейнера.
- У текстовому полі ➡Ім’я служби вкажіть Ім’я, яке потрібно призначити службі.
- У розкривному меню «Регіон» виберіть регіон, в якому ви хочете розмістити службу.
- У розділі ➡Аутентифікація виберіть ➡ Дозволити дзвінки без автентифікації.
- Натисніть ➡Створити, щоб розгорнути образ у Cloud Run, і дочекайтеся завершення розгортання.
Щоб запустити розгорнутий контейнер, клацніть відображену URL-адреси.
Вітаємо! Ви щойно розгорнули у Cloud Run контейнер, який відповідає на вхідні веб-запити. Cloud Run автоматично масштабує ваш контейнер для обробки отриманих запитів, а потім масштабує його, коли попит знижується. Ви сплачуєте лише за ЦП (СРU), пам’ять та мережу, що споживаються під час обробки запиту.
Як створити веб-програму за допомогою Cloud Run — посібник
У наступному посібнику ми покажемо вам, як створити простий додаток Hello World, обернути його в образ контейнера, а потім впровадити образ у Cloud Run. Підтримуються всі мови програмування, які можна запустити у контейнері.
Коротко: Application.py → Container → Cloud Run
Перш, ніж ви почнете
1. Увійдіть до консолі Google Cloud Platform — console.cloud.google.com.
2. Переконайтеся, що платежі у вашому проекті увімкнені (вкладка «Оплата»).
3. Встановіть та ініціалізуйте Cloud SDK.
Створення програми Hello World
- Створіть каталог та перейдіть до нього.
mkdir helloworld
cd helloworld
- Створіть файл main.py та вставте в нього наступний вміст:
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
name = os.environ.get("NAME", "World")
return "Hello {}!".format(name)
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Наведений вище код запускає простий веб-сервер Gunicorn з програмою, яка повертає текст Hello World після отримання HTTP-запиту. Порт, який прослуховує програму, визначається змінною середовища або дорівнює 8080.
3. Далі створіть файл requirements.txt , до якого ви вводите залежності (модулі), необхідні для запуску програми. Нижче наведено вміст файлу:
Flask==2.0.1
gunicorn==20.1.0
4. Dockerfile – це файл, який визначає контейнер, у тому числі і те, що має статися після його випуску. У цьому випадку запустіть веб-сервер Gunicorn, який прослуховує порт, визначений змінною середовища PORT.
Як базовий образ використовується офіційний образ Python – https://hub.docker.com/_/python.
FROM python:3.9-slim
Наступна директива дозволяє негайно відображати журнали Python у журналах Knative:
ENV PYTHONUNBUFFERED True
Використовуйте цю функцію, щоб скопіювати локальний код у образ контейнера:
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
Установка виробничих залежностей виконується за допомогою:
RUN pip install --no-cache-dir -r requirements.txt
Веб-сервер Gunicorn запускається під час запуску контейнера.
Для запущених середовищ із багатоядерним процесором рекомендується збільшити кількість робочих (гармат) до значення, що дорівнює кількості ядер. Тайм-аут тренування встановлено на 0, щоб дозволити Cloud Run масштабувати екземпляр:
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
5. Потім додайте файл .dockerignore , щоб уникнути копіювання певних файлів. Вміст файлу:
Dockerfile
README.md
*.pyc
*.pyo
*.pyd
__pycache__
.pytest_cache
Спосіб 1. Розгорніть програму в Cloud Run з локального середовища.
Для реалізації сервісу Cloud Run необхідно мати відповідні права на проект GCP – Власник або Редактор.
1. У каталозі програми введіть таку команду:
gcloud run deploy
2. Якщо вам запропонують увімкнути API, введіть y, щоб запустити його.
3. Коли буде запропоновано вказати розташування вихідного коду, натисніть клавішу Enter, щоб розгорнути поточну папку.
4. За запитом імені служби натисніть клавішу Enter, щоб прийняти ім’я helloworld за промовчанням.
5. Якщо вам буде запропоновано увімкнути Artifact Registry API, просто натисніть y .
6. За запитом регіону виберіть назву розташування (наприклад, Центральна Європа2). Ось перелік регіонів Cloud Run.
7. Коли вас запитають про виклики без аутентифікації, дайте відповідь y. Завдяки цьому будь-хто, хто знає URL-адресу сервісу, зможе отримати доступ до нього.
8. Потім почекайте, поки реалізація завершиться. У разі успіху в командному рядку з’явиться URL-адреса служби.
9. Переконайтеся, що служба дійсно запущена, вставивши URL-адресу, яка повернулася, до браузера.
10. Якщо ви досягли цього моменту, вітаємо! Ви тільки-но реалізували вихідний образ контейнера в Cloud Run. Cloud Run автоматично збільшує кількість послуг зі збільшенням попиту, тобто ви додаєте більше екземплярів. При зниженні навантаження зменшується кількість інстансів, тому доплачувати за послугу не доведеться.
Спосіб 2: Консольна реалізація реєстру контейнерів
Cloud Run програми також можуть бути реалізовані інакше, ніж графічний інтерфейс консолі. Як вихідний код можна вибрати образ, попередньо підготовлений та відправлений до репозиторію (Cloud Artifacts Registry або Cloud Container Registry), а можна вибрати репозиторій вихідного коду. Нижче наведено коротку інструкцію з розгортання з використанням сховища образів:
1. Перейдіть до папки Hello World, яку ви підготували раніше.
2. Зберіть образ, ввівши команду збирання docker .
Після коректної побудови образу має з’явитися таке повідомлення:
Successfully built [ID obrazu]
У випадку з нашим підручником це:
Successfully built ad890e53825e
3. Варто перевірити, чи правильно запускається образ локально. Для цього скомандуйте:
docker run -p 8080 -e PORT=8080 [ID obrazu]
Після переходу на адресу локального хоста після раніше визначеного порту (в даному випадку 127.0.0.1:8080) ви повинні побачити результат реалізації:
4. Наступний крок — позначити зображення, щоб його можна було надіслати до реєстру контейнерів:
docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/IMAGE
У випадку, описаному в посібніку, команда виглядає так:
docker tag ad890e53825e eu.gcr.io/preemptible-vm-instances/helloworld-2
5. Потім відправляємо образ у регістр контейнера:
docker push eu.gcr.io/preemptible-vm-instances/helloworld-2
Щоб перевірити, чи зображення знаходиться в сховищі, просто введіть:
gcloud container images list-tags eu.gcr.io/preemptible-vm-instances/helloworld-2
Термінал повинен повернути значення:
DIGEST: 44682cb07278
TAGS: latest
6. Якщо у вас є образ в реєстрі, все, що вам потрібно зробити, це зайти в графічну консоль і розгорнути контейнер.
Після доступу до консолі на вкладці Cloud Run натисніть кнопку Create Service.
7. На панелі конфігурації натисніть Вибрати.
… І виберіть образ контейнера.
8. Потім виберіть регіон, у якому мають бути реалізовані послуги:
9. Наступним кроком буде вибір процесора. Вкажіть, чи процесор повинен призначатися лише під час запиту чи завжди. Якщо ви бажаєте платити лише за фактичне споживання, рекомендуємо перший варіант.
Також визначте значення автоматичного масштабування – мінімальну та максимальну кількість екземплярів. Якщо ви встановите мінімальний ліміт 1 (або вище), ви платитимете за послугу навіть тоді, коли вона не використовується, але послуга запуститься швидше, пропустивши холодний старт. Якщо ви не бажаєте платити за невикористану послугу, встановіть нижню межу на 0. Поверніть конкретну послугу до верхньої межі масштабування – безпечно встановити невелику кількість екземплярів
10. Визначте, чи повинен трафік до сервісу проходити автентифікацію та чи дозволено внутрішній трафік (через VPS) чи загальнодоступний трафік.
11. Натисніть кнопку «Створити» та дочекайтеся запуску служби.
12. Якщо дисплей виглядає як на скріншоті нижче, це означає, що служба активна.
Ви можете перевірити його роботу, звернувшись до згенерованої URL-адреси. У навчальному прикладі це https://helloworld-2-4xrlbe3dfq-lm.a.run.app.
13. Програма успішно впроваджена в Google Cloud Run. На наступному етапі ви можете налаштувати безперервне розгортання для Cloud Run, щоб автоматизувати свої розгортання. Ви також можете керувати трафіком версій для проведення A/B тестування. Окрім обробки HTTPS-запитів, ви можете визначити події, які будуть запускати зображення – в даний час доступно більше 90 подій різних сервісів GCP.
Який прайс на Cloud Run?
Cloud Run стягує плату тільки за використовувані вами ресурси із заокругленням до найближчих 100 мілісекунд. Зверніть увагу, що кожен з цих ресурсів має рівень безкоштовного користування. Ваш загальний рахунок за Cloud Run дорівнюватиме сумі ресурсів у таблиці цін.
Ви можете використовувати калькулятор цін Google Cloud Platform для оцінки вартості використання Cloud Run.
Якщо ви бажаєте перевірити можливості Cloud Run або ознайомитись з іншими сервісами GCP та отримати професійний та 24/7 супровід на кожному етапі вашої хмарної пригоди – ви можете звернутись до нас. FOTC також пропонує вам річний ваучер на 500 доларів, який можна використовувати для будь-якої служби Google Cloud Platform. Крім того, ви матимете можливість покрити частину витрат на обслуговування інфраструктури в процесі міграції і скористатися додатковими знижками при довгостроковій співпраці.