Краткое руководство. Развертывание первого приложения Azure Spring Cloud

В этом кратком руководстве объясняется, как развернуть простое приложение микрослужбы Azure Spring Cloud для запуска в Azure.

Примечание

В настоящее время поддержка Steeltoe для Azure Spring Cloud предлагается в качестве общедоступной предварительной версии. Предложения общедоступной предварительной версии позволяют клиентам экспериментировать с новыми функциями до официального выпуска. Общедоступные предварительные версии функций и служб не предназначены для использования в рабочей среде. Чтобы получить дополнительные сведения о поддержке на этапе использования предварительных версий, ознакомьтесь с разделом Вопросы и ответы или оформите запрос на поддержку.

Из этого краткого руководства вы узнаете, как выполнить следующие задачи:

  • создание базового проекта Steeltoe .NET Core;
  • подготовка экземпляра службы Azure Spring Cloud;
  • сборка и развертывание приложения с общедоступной конечной точкой;
  • Потоковая передача журналов в режиме реального времени

Код приложения, используемый в этом кратком руководстве, представляет собой простое приложение, созданное с помощью шаблона проекта веб-API .NET Core. После завершения работы с этим примером приложение будет доступно через Интернет, и вы сможете управлять им с помощью портала Azure и Azure CLI.

Предварительные требования

Установка расширения Azure CLI

Убедитесь в наличии Azure CLI версии 2.0.67 или более поздней.

az --version

Установите расширение Azure Spring Cloud для Azure CLI с помощью следующей команды:

az extension add --name spring-cloud

Вход в Azure

  1. Войдите в Azure CLI:

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

    az account list -o table
    
    az account set --subscription <Name or ID of a subscription from the last step>
    

Создание проекта Steeltoe .NET Core

В Visual Studio создайте веб-приложение ASP.NET Core с именем hello-world с помощью шаблона проекта API. Обратите внимание, что в дальнейшем WeatherForecastController будет создаваться автоматически и станет нашей конечной точкой для тестирования.

  1. Создайте папку для исходного кода проекта и сам проект.

    mkdir source-code
    
    cd source-code
    
    dotnet new webapi -n hello-world --framework netcoreapp3.1
    
  2. Перейдите в каталог проекта.

    cd hello-world
    
  3. Измените файл appSettings.json, чтобы добавить следующие параметры:

    "spring": {
      "application": {
        "name": "hello-world"
      }
    },
    "eureka": {
      "client": {
        "shouldFetchRegistry": true,
        "shouldRegisterWithEureka": true
      }
    }
    
  4. Кроме того, в файле appsettings.json измените уровень ведения журнала для категории Microsoft с Warning на Information. Это изменение гарантирует, что журналы будут создаваться при просмотре журналов потоковой передачи на более позднем этапе.

    Файл appsettings.json теперь выглядит как в следующем примере:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Information",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "spring": {
        "application": {
          "name": "hello-world"
        }
      },
      "eureka": {
        "client": {
          "shouldFetchRegistry": true,
          "shouldRegisterWithEureka": true
        }
      }
    }
    
  5. Добавьте зависимости и задачу Zip в файл .csproj:

    <ItemGroup>
      <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="3.1.0" />
      <PackageReference Include="Microsoft.Azure.SpringCloud.Client" Version="2.0.0-preview.1" />
    </ItemGroup>
    <Target Name="Publish-Zip" AfterTargets="Publish">
      <ZipDirectory SourceDirectory="$(PublishDir)" DestinationFile="$(MSBuildProjectDirectory)/deploy.zip" Overwrite="true" />
    </Target>
    

    Пакеты предназначены для обнаружения службы Steeltoe и клиентской библиотеки Azure Spring Cloud. Задача Zip предназначена для развертывания в Azure. При выполнении команды dotnet publish создаются двоичные файлы в папке publish, и эта задача архивирует папку publish в файл .zip, который вы отправляете в Azure.

  6. В файле Program.cs добавьте директиву using и код, который использует клиентскую библиотеку Azure Spring Cloud:

    using Microsoft.Azure.SpringCloud.Client;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .UseAzureSpringCloudService()
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    
  7. В файле Startup.cs добавьте директиву using и код, который использует обнаружение службы Steeltoe, в конце метода ConfigureServices:

    using Steeltoe.Discovery.Client;
    
    public void ConfigureServices(IServiceCollection services)
    {
        // Template code not shown.
    
        services.AddDiscoveryClient(Configuration);
    }
    
  8. Выполните сборку проекта и убедитесь в отсутствии ошибок компиляции.

    dotnet build
    

подготовка экземпляра службы к работе;

Следующая процедура создает экземпляр Azure Spring Cloud с помощью портала Azure.

  1. Откройте портал Azure.

  2. В поле поиска сверху введите Azure Spring Cloud.

  3. Выберите пункт Azure Spring Cloud в списке результатов.

    Значок ASC — запуск

  4. На странице "Azure Spring Cloud" выберите Создать.

    Значок ASC — добавление

  5. Заполните форму на странице создания Azure Spring Cloud. Ознакомьтесь со следующими рекомендациями:

    • Подписка: Выберите подписку, на которую будет выставляться счет за этот ресурс.
    • Группа ресурсов. Создайте новую группу ресурсов. Введенное здесь имя будет использоваться в дальнейших шагах как <resource group name> .
    • Сведения о службе или ее название. Укажите <service instance name> . Его длина должна быть от 4 до 32 знаков. Имя может содержать только строчные буквы, цифры и дефисы. Первым символом в имени службы должна быть буква, а последним — буква или цифра.
    • Регион. Выберите регион для экземпляра службы.

    Начальная страница портала ASC

  6. Выберите Просмотреть и создать.

  7. Нажмите кнопку создания.

Создание и развертывание приложения

Следующая процедура используется для сборки и развертывания созданного ранее проекта.

  1. Убедитесь, что командная строка все еще находится в папке проекта.

  2. Запустите приведенную ниже команду, чтобы выполнить сборку проекта, опубликовать двоичные файлы и сохранить их в файле .zip в папке проекта.

    dotnet publish -c release -o ./publish
    
  3. Создайте приложение в экземпляре Azure Spring Cloud с назначенной общедоступной конечной точкой. Используйте то же имя приложения hello-world, указанное в appsettings.json.

    az spring-cloud app create -n hello-world -s <service instance name> -g <resource group name> --assign-endpoint --runtime-version NetCore_31
    
  4. Разверните в приложении файл .zip.

    az spring-cloud app deploy -n hello-world -s <service instance name> -g <resource group name> --runtime-version NetCore_31 --main-entry hello-world.dll --artifact-path ./deploy.zip
    

    Параметр --main-entry определяет файл .dll, содержащий точку входа приложения. После того как служба загрузит файл .zip, она извлекает все файлы и папки и пытается выполнить точку входа в указанном --main-entry файле .dll.

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

Тестирование приложения

По завершении развертывания получите доступ к приложению по следующему URL-адресу:

https://<service instance name>-hello-world.azuremicroservices.io/weatherforecast

Приложение вернет данные JSON, как в следующем примере:

[{"date":"2020-09-08T21:01:50.0198835+00:00","temperatureC":14,"temperatureF":57,"summary":"Bracing"},{"date":"2020-09-09T21:01:50.0200697+00:00","temperatureC":-14,"temperatureF":7,"summary":"Bracing"},{"date":"2020-09-10T21:01:50.0200715+00:00","temperatureC":27,"temperatureF":80,"summary":"Freezing"},{"date":"2020-09-11T21:01:50.0200717+00:00","temperatureC":18,"temperatureF":64,"summary":"Chilly"},{"date":"2020-09-12T21:01:50.0200719+00:00","temperatureC":16,"temperatureF":60,"summary":"Chilly"}]

Потоковая передача журналов в режиме реального времени

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

az spring-cloud app logs -n hello-world -s <service instance name> -g <resource group name> --lines 100 -f

Журналы отображаются в выходных данных:

[Azure Spring Cloud] The following environment variables are loaded:
2020-09-08 20:58:42,432 INFO supervisord started with pid 1
2020-09-08 20:58:43,435 INFO spawned: 'event-gather_00' with pid 9
2020-09-08 20:58:43,436 INFO spawned: 'dotnet-app_00' with pid 10
2020-09-08 20:58:43 [Warning] No managed processes are running. Wait for 30 seconds...
2020-09-08 20:58:44,843 INFO success: event-gather_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-09-08 20:58:44,843 INFO success: dotnet-app_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
←[40m←[32minfo←[39m←[22m←[49m: Steeltoe.Discovery.Eureka.DiscoveryClient[0]
      Starting HeartBeat
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://[::]:1025
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /netcorepublish/6e4db42a-b160-4b83-a771-c91adec18c60
2020-09-08 21:00:13 [Information] [10] Start listening...
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://asc-svc-hello-world.azuremicroservices.io/weatherforecast
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'hello_world.Controllers.WeatherForecastController.Get (hello-world)'
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3]
      Route matched with {action = "Get", controller = "WeatherForecast"}. Executing controller action with signature System.Collections.Generic.IEnumerable`1[hello_world.WeatherForecast] Get() on controller hello_world.Controllers.WeatherForecastController (hello-world).
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
      Executing ObjectResult, writing value of type 'hello_world.WeatherForecast[]'.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
      Executed action hello_world.Controllers.WeatherForecastController.Get (hello-world) in 1.8902ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'hello_world.Controllers.WeatherForecastController.Get (hello-world)'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 4.2591ms 200 application/json; charset=utf-8

Совет

Используйте az spring-cloud app logs -h для просмотра дополнительных параметров и функциональных возможностей потоковой передачи журналов.

Чтобы получить дополнительные возможности анализа журналов, перейдите на вкладку Журналы в меню на портале Azure. Журналы отображаются с задержкой в несколько минут. Аналитика журналов

В этом кратком руководстве объясняется, как развернуть простое приложение микрослужбы Azure Spring Cloud для запуска в Azure.

Код приложения, используемый в этом учебнике, — это простое приложение, созданное с помощью Spring Initializr. После завершения работы с этим примером приложение будет доступно через Интернет и им можно управлять с помощью портала Azure.

В этом кратком руководстве объясняются такие операции:

  • создание простого проекта Spring Cloud;
  • подготовка экземпляра службы к работе;
  • сборка и развертывание приложения с общедоступной конечной точкой;
  • Потоковая передача журналов в режиме реального времени

Предварительные требования

Для работы с этим кратким руководством сделайте следующее:

Создание проекта Spring Cloud

Начните со Spring Initializr, чтобы создать пример проекта с рекомендуемыми зависимостями для Azure Spring Cloud. Эта ссылка использует следующий URL-адрес для предоставления параметров по умолчанию.

https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.3&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-starter-sleuth,cloud-starter-zipkin,cloud-config-client

На рисунке ниже показан рекомендованный Initializr, настроенный для этого примера проекта.

Обратите внимание, что в этом примере используется версия Java 8. Если вы хотите использовать версию Java 11, измените параметр в разделе Метаданные проекта.

Страница Initializr

  1. Щелкните Создать, если все зависимости заданы. Загрузите и распакуйте пакет, а затем создайте веб-контроллер для простого веб-приложения, добавив src/main/java/com/example/hellospring/HelloController.java следующим образом:

    package com.example.hellospring;
    
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @RestController
    public class HelloController {
    
        @RequestMapping("/")
        public String index() {
            return "Greetings from Azure Spring Cloud!";
        }
    
    }
    

Подготовка к работе экземпляра Azure Spring Cloud

Следующая процедура создает экземпляр Azure Spring Cloud с помощью портала Azure.

  1. На новой вкладке откройте портал Azure.

  2. В поле поиска сверху введите Azure Spring Cloud.

  3. Выберите пункт Azure Spring Cloud в списке результатов.

    Значок ASC — запуск

  4. На странице "Azure Spring Cloud" выберите Создать.

    Значок ASC — добавление

  5. Заполните форму на странице создания Azure Spring Cloud. Ознакомьтесь со следующими рекомендациями:

    • Подписка: Выберите подписку, на которую будет выставляться счет за этот ресурс.
    • Группа ресурсов. Советуем создавать группы ресурсов для новых ресурсов. Она будет использоваться в дальнейших шагах как <resource group name> .
    • Сведения о службе или ее название. Укажите <service instance name> . Его длина должна быть от 4 до 32 знаков. Имя может содержать только строчные буквы, цифры и дефисы. Первым символом в имени службы должна быть буква, а последним — буква или цифра.
    • Расположение. Выберите регион для экземпляра службы.

    Начальная страница портала ASC

  6. Выберите Просмотреть и создать.

Создание и развертывание приложения

Следующая процедура используется для сборки и развертывания приложения с помощью Azure CLI. Выполните следующую команду в корневом каталоге проекта.

  1. Войдите в Azure и выберите подписку.

    az login
    

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

    az account list -o table
    

    Используйте следующую команду, чтобы задать подписку по умолчанию для использования с командами Azure CLI в этом кратком руководстве.

    az account set --subscription <Name or ID of a subscription from the last step>
    
  2. Выполните сборку проекта с помощью Maven:

    mvn clean package -DskipTests
    
  3. Создайте приложение с назначенной общедоступной конечной точкой. Если при создании проекта "Spring Cloud " вы выбрали Java версии 11, добавьте параметр --runtime-version=Java_11.

    az spring-cloud app create -n hellospring -s <service instance name> -g <resource group name> --assign-endpoint true
    
  4. Разверните JAR-файл для приложения (target\hellospring-0.0.1-SNAPSHOT.jar в Windows):

    az spring-cloud app deploy -n hellospring -s <service instance name> -g <resource group name> --artifact-path <jar file path>
    
  5. Для завершения развертывания приложения потребуется несколько минут. Чтобы убедиться, что оно развернуто, перейдите в колонку Приложения на портале Azure. В ней должно отобразиться состояние приложения.

По завершении развертывания можно получить доступ к https://<service instance name>-hellospring.azuremicroservices.io/.

Доступ к приложению из браузера

Потоковая передача журналов в режиме реального времени

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

az spring-cloud app logs -n hellospring -s <service instance name> -g <resource group name> --lines 100 -f

Внешний вид журналов в итоге:

Журналы потоковой передачи

Совет

Используйте az spring-cloud app logs -h для просмотра дополнительных параметров и функциональных возможностей потоковой передачи журналов.

Чтобы получить дополнительные возможности аналитики журналов, перейдите на вкладку Журналы в меню портал Azure. Журналы отображаются с задержкой в несколько минут.

Аналитика журналов

Очистка ресурсов

На предыдущих шагах вы создали ресурсы Azure, за которые будет взиматься плата, если вы оставите их в своей в подписке. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов на портале или с помощью приведенной ниже команды в Azure CLI:

az group delete --name <your resource group name; for example: hellospring-1558400876966-rg> --yes

Дальнейшие действия

В этом кратком руководстве рассматривались следующие темы:

  • создание базового проекта Azure Spring Cloud;
  • подготовка экземпляра службы к работе;
  • сборка и развертывание приложения с общедоступной конечной точкой;
  • Потоковая передача журналов в режиме реального времени

Чтобы узнать, как использовать дополнительные возможности Azure Spring, перейдите к серии кратких руководств, в которой описано развертывание примера приложения в Azure Spring Cloud:

Дополнительные примеры доступны на GitHub: Примеры для Azure Spring Cloud.