Привет, облако, запуск на C#

1. Введение

89eb4723767d4525.png

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

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

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

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

Настройка среды для самостоятельного обучения

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли 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» :

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 включите 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-адрес сервиса в веб-браузере:

85e7fbbd264444c9.png

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

5. Пора убираться.

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

gcloud run services delete helloworld

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

Следующим хорошим шагом было бы развертывание в облаке с использованием GKE .

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