1. Введение

Cloud Run — это управляемая платформа, позволяющая запускать контейнеры без сохранения состояния, вызываемые через HTTP-запросы. Cloud Run — бессерверная платформа: она абстрагирует все управление инфраструктурой, позволяя вам сосредоточиться на самом важном — создании превосходных приложений.
Он построен на основе Knative , что позволяет вам выбирать между запуском контейнеров либо в полностью управляемом режиме с помощью Cloud Run, либо в кластере Google Kubernetes Engine с помощью Cloud Run на GKE.
Цель этого практического занятия — помочь вам создать образ контейнера и развернуть его в Cloud Run.
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Google Cloud Shell
Хотя Google Cloud можно запускать удалённо с ноутбука, в этом практическом занятии мы будем использовать Google Cloud Shell — среду командной строки, работающую в облаке.
Cloud Shell — это онлайн-среда разработки и эксплуатации, доступная из любой точки мира через браузер. Вы можете управлять своими ресурсами с помощью онлайн-терминала, в который предварительно загружены такие утилиты, как инструмент командной строки gcloud, kubectl и другие. Вы также можете разрабатывать, собирать, отлаживать и развертывать свои облачные приложения, используя онлайн- редактор Cloud Shell .
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает непосредственно в облаке Google, что значительно повышает производительность сети и аутентификацию. Это означает, что для выполнения этого практического задания вам понадобится только браузер (да, он работает и на Chromebook).
- Для активации Cloud Shell из консоли Cloud Console просто нажмите кнопку «Активировать Cloud Shell» :

Если вы запускаете Cloud Shell впервые, вам будет показан промежуточный экран с описанием его содержимого. Если вам был показан промежуточный экран, нажмите «Продолжить».

Подготовка среды займет всего несколько секунд:

После подключения к Cloud Shell вы увидите, что уже прошли аутентификацию:
gcloud auth list
вывод команды
Credentialed Accounts ACTIVE: * ACCOUNT: <my-account>@<mydomain>
В настройках проекта также должен быть указан ваш PROJECT_ID (при условии, что вы выбрали проект в веб-консоли):
gcloud config list project
вывод команды
[core] project = <PROJECT_ID>
Если по какой-либо причине проект не создан, просто выполните следующую команду:
gcloud config set project <PROJECT_ID>
Ищете свой PROJECT_ID ? Воспользуйтесь выпадающим списком в верхней части Cloud Console:

Вы также можете просмотреть подробную информацию о своем проекте в разделе «Настройки и утилиты»:

Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.
echo $GOOGLE_CLOUD_PROJECT
вывод команды
<PROJECT_ID>
- Наконец, вы можете установить зону по умолчанию:
gcloud config set compute/zone us-central1-f
Вы можете выбрать различные зоны. Для получения дополнительной информации см. раздел «Регионы и зоны» .
Включите API Cloud Run
В Cloud Shell включите API Cloud Run:
gcloud services enable run.googleapis.com
В результате должно появиться сообщение об успешном завершении, похожее на это:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Напишите пример приложения.
Мы создадим простое ASP.NET C# приложение, обрабатывающее HTTP-запросы.
Для создания приложения используйте инструмент командной строки dotnet в Cloud Shell:
dotnet new web -o helloworld-csharp
Перейдите в каталог helloworld-csharp :
cd helloworld-csharp
Далее обновите Program.cs , приведя его в соответствие со следующими данными:
var builder = WebApplication.CreateBuilder(args);
var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды PORT , и отправляет в ответ сообщение Hello World .
Вы можете протестировать приложение, запустив его локально в Cloud Shell. Вы должны увидеть, что оно прослушивает порт 8080:
$ dotnet run Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json... Hosting environment: Development Content root path: /home/atameldev/helloworld-csharp Now listening on: http://0.0.0.0:8080 Application started. Press Ctrl+C to shut down.
4. Развертывание в Cloud Run
Разверните ваше приложение в Cloud Run с помощью следующей команды:
gcloud run deploy hello-world \
--allow-unauthenticated \
--region us-central1 \
--source .
hello-world— это название сервиса.- Флаг
allow-unauthenticatedразвертывает сервис как общедоступный сервис без требований к аутентификации. -
us-central1— это регион, в котором будет развернуто приложение. - Флаг
sourceопределяет местоположение исходного кода для сборки. Cloud Run использует buildpacks для автоматического создания контейнера из исходного кода.
Подождите пару минут, пока развертывание завершится. В случае успеха в командной строке отобразится URL-адрес службы:
Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic. Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app
Теперь вы можете получить доступ к развернутому контейнеру, открыв URL-адрес сервиса в веб-браузере:

Поздравляем! Вы только что развернули приложение, упакованное в образ контейнера, в Cloud Run. Cloud Run автоматически и горизонтально масштабирует ваш образ контейнера для обработки полученных запросов, а затем уменьшает масштаб при снижении спроса. Вы платите только за ресурсы ЦП, памяти и сети, потребляемые во время обработки запросов.
5. Пора убираться.
Вы можете либо удалить свой проект GCP, чтобы избежать списания средств, что прекратит выставление счетов за все ресурсы, используемые в этом проекте, либо просто удалить сервис Cloud Run:
gcloud run services delete helloworld
6. Что дальше?
Следующим хорошим шагом было бы развертывание в облаке с использованием GKE .
Для получения дополнительной информации о создании HTTP-контейнера без сохранения состояния, подходящего для Cloud Run, из исходного кода и его загрузке в Container Registry, см.: