Привет, Cloud Run с C#

1. Введение

89eb4723767d4525.png

Cloud Run — это управляемая платформа, которая позволяет запускать контейнеры без отслеживания состояния, которые можно вызвать с помощью HTTP-запросов. Cloud Run не требует серверов: он абстрагирует все управление инфраструктурой, поэтому вы можете сосредоточиться на самом важном — создании отличных приложений.

Он создан на основе Knative , что позволяет вам запускать контейнеры либо под полным управлением с помощью Cloud Run, либо в кластере Google Kubernetes Engine с помощью Cloud Run на GKE.

Цель этой лаборатории кода — создать образ контейнера и развернуть его в Cloud Run.

2. Настройка и требования

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Google Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории мы будем использовать Google Cloud Shell , среду командной строки, работающую в облаке.

Cloud Shell — это онлайн-среда разработки и эксплуатации, доступная в любом месте с помощью браузера. Вы можете управлять своими ресурсами с помощью онлайн-терминала, в который предварительно загружены такие утилиты, как инструмент командной строки gcloud, kubectl и другие. Вы также можете разрабатывать, создавать, отлаживать и развертывать свои облачные приложения с помощью онлайн -редактора Cloud Shell .

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает непосредственно в Google Cloud, что значительно повышает производительность сети и аутентификацию. Это означает, что все, что вам понадобится для этой лаборатории кода, — это браузер (да, он работает на Chromebook).

  • Чтобы активировать Cloud Shell из Cloud Console, просто нажмите «Активировать Cloud Shell» :

cb81e7c8e34bc8d.png

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

bfde7b083abc9544.png

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

cbb597d2be277a14.png

После подключения к 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:

2c7a57249d954735.png

Вы также можете проверить детали вашего проекта, используя раздел «Настройки и утилиты»:

791f101797cfef39.png

Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.

echo $GOOGLE_CLOUD_PROJECT

Вывод команды

<PROJECT_ID>
  • Наконец, вы можете установить зону по умолчанию:
gcloud config set compute/zone us-central1-f

Вы можете выбрать разные зоны. Дополнительную информацию см. в разделе «Регионы и зоны» .

Включите API Cloud Run

В Cloud Shell включите Cloud Run API:

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 allow-unauthenticated развертывает службу как общедоступную службу без требований аутентификации.
  • us-central1 — это регион, в котором будет развернуто приложение.
  • Флаг source определяет местоположение исходного кода для сборки. Cloud Run использует пакеты сборки для автоматического создания контейнера из исходного кода.

Подождите пару минут, пока развертывание не завершится. В случае успеха в командной строке отображается 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-адрес службы в веб-браузере:

85e7fbbd264444c9.png

Поздравляем! Вы только что развернули приложение, упакованное в образ контейнера, в Cloud Run. Cloud Run автоматически горизонтально масштабирует образ контейнера для обработки полученных запросов, а затем уменьшает масштаб, когда спрос снижается. Вы платите только за процессор, память и сеть, использованные во время обработки запроса.

5. Время навести порядок

Вы можете либо решить удалить свой проект GCP, чтобы избежать взимания платы, что приведет к прекращению выставления счетов за все ресурсы, используемые в этом проекте, либо просто удалить службу Cloud Run:

gcloud run services delete helloworld

6. Что дальше?

Хорошим следующим шагом будет развертывание в Cloud Run на GKE .

Дополнительные сведения о создании HTTP-контейнера без сохранения состояния, подходящего для Cloud Run, из источника кода и его отправке в реестр контейнеров см. в разделе: