В этой статье мы собираемся развернуть веб-службу gRPC, написанную на .NET, в службе приложений Azure. Затем мы будем взаимодействовать с ним, а также автоматизировать процесс развертывания ресурсов Azure и сборки.


Введение

Около нескольких месяцев назад я написал серию блогов о создании простого сервера gRPC и локального клиента. На этот раз мы собираемся предпринять следующие шаги, развернув его в облаке.

Если вы пропустили сериал, вы можете узнать о нем по ссылкам ниже 🚀


Видео прохождения

Если вам нравится смотреть видеопрохождение вместо этой статьи, вы также можете следить за моим каналом YouTube 😊



План

  1. Клонируйте репозиторий выше.
  2. Мы создадим экземпляр службы приложений в Azure и развернем его (автоматически).
  3. Подготовка к развертыванию.
  4. Развертывание кода BookshopServer.
  5. Тестирование веб-сервиса.


1. Клонируйте репозиторий (или создайте его)

Поскольку у нас уже есть удобное приложение, мы собираемся использовать то же самое и заставить это работать. В частности, мы собираемся использовать именно тот код, который мы рассматривали в Создание сервера gRPC в .NET Сообщение блога.

💡 Код можно найти в разделе это репо.

Мы собираемся использовать BookshopServer как наш веб-сервис и BookshopClient как клиент для взаимодействия с ним.

После того, как вы его клонировали, вы можете установить ветку для службы приложений с помощью

git checkout app-service
Войти в полноэкранный режим

Выйти из полноэкранного режима


2. Создайте экземпляр службы приложений в Azure.

Вы можете отправиться в портал.azure.com и создайте экземпляр службы приложений вручную или вы можете использовать шаблон ARM ниже.

💡 Чтобы сэкономить вам время и нервы, я бы держался подальше от уровня F1 — он был ненадежен для меня и с трудом развертывал мой код. Я продолжил с B1 (и вы получаете 30 дней бесплатно для Linux). Это стоит вам немного, но намного надежнее для работы Dev/Testing.


Шаблон ARM для простого развертывания

Если у вас нет az cli с головой здесь чтобы настроить его. После установки выполните az login и выберите учетную запись, которую вы хотите использовать для развертывания.

Я создал сценарий оболочки для автоматизации всех шагов. Это использование скрипта.

cd BookshopServer/Infrastructure/
./deploy.sh net6-grpc australiasoutheast template.json parameters.json
Войти в полноэкранный режим

Выйти из полноэкранного режима

Параметры для передачи следующие:

  1. Имя группы ресурсов (например: net6-grpc)
  2. Регион, в котором вы хотите создать ресурсы (например: australiasoutheast)
  3. Имя файла шаблона ARM (например: template.json)
  4. Имя файла параметров (например: parameters.json)

Если вы не уверены, вы можете увидеть, что к чему, просто набрав ./deploy также. После развертывания вы должны увидеть что-то вроде ниже.

развертывание-dotnet-grpc-service-azure-app-services


Конфигурация службы приложений

Шаблон ARM позаботится о большей части конфигурации за нас. Однако есть еще одна вещь, которую нам нужно включить, называемая HTTP 2.0 Proxy

Вот как должна выглядеть ваша конфигурация:

развертывание-dotnet-grpc-service-azure-app-services-2


3. Подготовка к развертыванию

Прежде чем мы приступим к развертыванию, нам нужно изменить пару вещей в нашем коде. Все это сделано для вас в моем репо. Но для любопытных,

Книжный магазинServer/Program.cs

Добавьте/обновите конфигурацию, чтобы указать Kestrel прослушивать все IP-адреса на порту. 8080 а также в порту 8585 но только с HTTP 2.0.

// ...
builder.WebHost.ConfigureKestrel(options =>
{
  options.ListenAnyIP(8080);
  options.ListenAnyIP(8585, listenOptions => 
  { 
      listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2; 
  }); 
});

// ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

Теперь, когда у нас есть эта конфигурация, нам больше не нужна конфигурация, указанная в appSettings.json. Давайте удалим следующие строки вот так.

Книжный магазинServer/appSettings.json

...
// Delete the following lines
"Kestrel": {
    "EndpointDefaults": {
      "Protocols": "Http2"
    }
  }
...
Войти в полноэкранный режим

Выйти из полноэкранного режима


4. Развертывание кода BookshopServer

Давайте продолжим и развернем наш код! 🚀 Есть много способов сделать это. Если вы настраиваете его для тестирования, вы можете просто развернуть его из локального репозитория Git. Чтобы сохранить объем этого поста в блоге, я не буду освещать другие методы непрерывного развертывания. Дайте мне знать, если вы хотите, чтобы я покрыл их тоже!

Вы можете следить эти шаги из официальной документации для быстрого локального развертывания. Есть некоторые конфигурации, которые вам нужно сделать.

  1. Иди к тебе служба приложений экземпляр > нажмите Центр развертывания
  2. Выберите Локальный Git из Источник падать
  3. Нажмите Локальные учетные данные Git/FTPS
  4. Установите имя пользователя и пароль под Область действия пользователя
  5. Хит Сохранять
  6. (Важно) Вернитесь к службе приложений Обзор
  7. Скопируйте URL-адрес под URL-адрес клонирования Git

  8. Перейти к вашей локальное репо

  9. Сделай git remote add azure <Git URL you copied before>

  10. Изменить ветку развертывания с помощью git push azure <local branch name>:master

Это может занять пару минут для первоначального развертывания. После последнего шага вы должны увидеть такой журнал:

развертывание-dotnet-grpc-service-azure-app-services-4.png

Хотя поначалу это может показаться немного пугающим, это всего лишь одноразовая конфигурация. Для любых изменений кода, которые вы делаете, вам просто нужно зафиксировать свои изменения в вашей локальной ветке, а затем выполнить git push как мы видели в шаге 10 выше.


5. Тестирование веб-сервиса

Теперь к интересной части. Давайте посмотрим, как мы можем взаимодействовать с нашим веб-сервисом 🤔

Я почему-то не мог получить grpcurl для работы, к счастью, у нас уже есть проект BookshopClient — давайте воспользуемся им!

Когда вы открываете проект, обязательно обновите URL-адрес, чтобы он указывал на вашу службу приложений — и это все, что вам нужно сделать!

BookshopClient/Program.cs

using var channel = GrpcChannel.ForAddress("https://your_app_service.azurewebsites.net/");
Войти в полноэкранный режим

Выйти из полноэкранного режима

(убедитесь, что вы добавили / в конце URL)

и, наконец, давайте запустим проект.

dotnet run --project BookshopClient
Войти в полноэкранный режим

Выйти из полноэкранного режима

Это должно вернуть список книг, как показано ниже.

развертывание-dotnet-grpc-service-azure-app-services-5.png

Вот и все! теперь вы знаете, как развернуть веб-службу gRPC .NET в Azure 🎉


Вывод

В этой статье мы рассмотрели, как можно использовать службу приложений Azure для развертывания сервера gRPC и взаимодействия с ним. До следующего раза 👋


использованная литература