1. Обзор
ASP.NET Core — это новый кроссплатформенный фреймворк с открытым исходным кодом для создания современных облачных и подключенных к интернету приложений с использованием языка программирования C#.
В этой лабораторной работе вы развернете простое приложение ASP.NET Core в гибкой среде App Engine. Данная лабораторная работа основана на лабораторной работе «Сборка и запуск приложения ASP.NET Core из Google Cloud Shell» . Возможно, вам стоит сначала выполнить ту лабораторную работу, прежде чем приступать к этой.
Приложения Google App Engine легко создавать, поддерживать и масштабировать по мере изменения ваших потребностей в трафике и хранении данных. С App Engine нет необходимости управлять серверами. Вы просто загружаете свое приложение, и оно готово к работе.
Приложения App Engine автоматически масштабируются в зависимости от входящего трафика. App Engine изначально поддерживает балансировку нагрузки, микросервисы, авторизацию, базы данных SQL и NoSQL, Memcache, разделение трафика, логирование, поиск, версионирование, развертывание и откат, а также сканирование безопасности — все эти функции легко настраиваются.
В App Engine есть две среды разработки: стандартная и гибкая . Они поддерживают множество языков программирования, включая C#, Java, Python, PHP, Node.js, Go и другие. Обе среды предоставляют пользователям максимальную гибкость в работе их приложений, поскольку каждая из них имеет свои преимущества. Для получения дополнительной информации ознакомьтесь с разделом «Выбор среды разработки App Engine» .
Что вы узнаете
- Как упаковать простое приложение ASP.NET Core в контейнер Docker.
- Как развернуть простое приложение ASP.NET Core в App Engine.
Что вам понадобится
Как вы будете использовать этот учебный материал?
Как бы вы оценили свой опыт работы с Google Cloud Platform?
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



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

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

Подготовка и подключение к Cloud Shell займут всего несколько минут.

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Большая часть, если не вся, работа в этом практическом задании может быть выполнена с помощью обычного браузера или вашего Chromebook.
После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и что проект уже настроен на ваш идентификатор проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить свою аутентификацию:
gcloud auth list
вывод команды
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project
вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить это с помощью следующей команды:
gcloud config set project <PROJECT_ID>
вывод команды
Updated property [core/project].
3. Создайте приложение ASP.NET Core в Cloud Shell.
В командной строке Cloud Shell можно убедиться в установке инструмента командной строки dotnet , перечислив установленные SDK .NET:
dotnet --list-sdks
Далее создайте новый шаблон веб-приложения ASP.NET Core с целевой платформой netcoreapp3.1 :
dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1
Это должно создать проект и восстановить его зависимости. Вы должны увидеть сообщение, похожее на приведенное ниже.
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. Запустите приложение ASP.NET Core.
Мы почти готовы запустить наше приложение. Перейдите в папку приложения.
cd HelloWorldAspNetCore
Наконец, запустите приложение.
dotnet run --urls=http://localhost:8080
Приложение начинает прослушивать порт 8080.
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
Чтобы убедиться, что приложение запущено, нажмите кнопку предварительного просмотра в веб-версии в правом верхнем углу и выберите «Предварительный просмотр на порту 8080».

Вы увидите стандартную веб-страницу ASP.NET Core:

После того, как вы убедитесь, что приложение запущено, нажмите Ctrl+C, чтобы закрыть его.
5. Опубликуйте приложение ASP.NET Core.
Теперь опубликуйте приложение, чтобы получить самодостаточную DLL-библиотеку, используя команду dotnet publish .
dotnet publish -c Release
При запуске publish отображаются сообщения об успешной публикации DLL-файла по завершении процесса.
...
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/
6. Создайте файл app.yaml для App Engine Flexible.
Файл app.yaml описывает, как развернуть приложение в App Engine, в данном случае, в гибкой среде App Engine.
Сначала перейдите в папку publish . Она должна находиться в папке bin/Release , но точный путь зависит от версии .NET:
cd bin/Release/netcoreapp3.1/publish/
Создайте файл app.yaml внутри папки publish :
cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT
Обратите внимание, как в файле app.yaml среда выполнения указана как flex , а среда выполнения — как aspnetcore .
7. Гибкое развертывание в App Engine.
Вы готовы развернуть свое приложение в App Engine Flexible с помощью gcloud . В каталоге publish выполните следующие действия:
gcloud app deploy --version v0
В процессе развертывания вам может быть предложено выбрать регион для вашего приложения. Выберите регион, в котором вы хотите, чтобы ваше приложение работало.
Please choose a region for your application. After choosing a region,
you cannot change it. Which region would you like to choose?
[1] europe-west (supports standard and flexible)
[2] us-central (supports standard and flexible)
[3] us-east1 (supports standard and flexible)
[4] asia-northeast1 (supports standard and flexible)
[5] cancel
Это создаст образ для вашего приложения в облаке, сохранит этот образ в Google Container Registry и развернет его в App Engine. Во время развертывания вы сможете наблюдать за процессом создания образа контейнера:
Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild
В итоге вы должны увидеть, что приложение развернуто.
...
Deployed service [default] to [https://<project-id>.appspot.com]
После развертывания приложения откройте в веб-браузере URL-адрес http://<project-id>.appspot.com .
В новой вкладке вы увидите стандартную веб-страницу ASP.NET Core.

Вы также можете посмотреть созданный для вас образ контейнера в облаке. В консоли облака перейдите в раздел «Реестр контейнеров» > «Образы», а затем в папке appengine вы должны увидеть образ для вашего приложения.

8. Разверните новую версию вашей службы.
В какой-то момент развернутому вами в продакшене приложению потребуется исправление ошибок или добавление новых функций. App Engine поможет вам развернуть новую версию в продакшене без ущерба для пользователей.
Для начала давайте изменим приложение. Откройте редактор кода в Cloud Shell.

Перейдите в Index.cshtml , расположенный в папке Views/Home проекта HelloWorldAspNetCore , и измените сообщение по умолчанию на следующее:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!
Сохраните изменения, а затем вернитесь в Cloud Shell. Внутри HelloWorldAspNetCore, опубликуйте приложение, чтобы получить самодостаточную DLL-библиотеку.
dotnet publish -c Release
Перейдите в каталог публикации.
cd bin/Release/netcoreapp3.1/publish/
Теперь вы можете развернуть новую версию своего приложения (в данном случае v1 ).
gcloud app deploy --version v1
После развертывания вы можете перейти в раздел «Версии App Engine» в консоли Google Cloud, чтобы увидеть новую версию вашего приложения, обрабатывающую весь трафик с новым сообщением.

9. Приборные панели и разделение потока транспорта
В App Engine, в разделе «Панель мониторинга», вы можете увидеть ряд панелей мониторинга для вашего приложения, отображающих задержку, загрузку ЦП и т. д. Изучите их самостоятельно.

В разделе «Версии» вы можете увидеть развернутые версии вашего приложения, а в разделе «Разделение трафика» вы можете разделить трафик между различными версиями. Давайте разделим трафик между двумя версиями:

10. Поздравляем!
C умывание
Пора закрыть это приложение, чтобы сэкономить средства и в целом быть ответственным пользователем облачных сервисов.
Перейдите в раздел «Версии» в App Engine.

Выберите версию и остановите её.

После остановки версии резервные экземпляры будут удалены, и вы увидите, что количество экземпляров уменьшится до нуля.

Что мы рассмотрели
Вот и все! Вы создали приложение ASP.NET Core, упаковали его в контейнер Docker и развернули в Google App Engine Flexible.
- Как упаковать простое приложение ASP.NET Core в контейнер Docker.
- Как развернуть простое приложение ASP.NET Core в App Engine.
Следующие шаги
- Узнайте больше о Windows на платформе Google Cloud Platform .
- Узнайте больше о .NET на платформе Google Cloud Platform .
- Узнайте больше о SQL Server на платформе Google Cloud Platform .
- Узнайте больше об облачных инструментах для Visual Studio .
- Узнайте больше об облачных инструментах для PowerShell .
Лицензия
Данная работа распространяется под лицензией Creative Commons Attribution 2.0 Generic.