Início Rápido: Implantar seu primeiro aplicativo do Azure Spring Cloud

Este guia de início rápido explica como implantar aplicativos de microsserviço simples do Azure Spring Cloud para execução no Azure.

Observação

O suporte do Steeltoe para o Azure Spring Cloud é oferecido atualmente como uma versão prévia pública. As ofertas de visualização pública permitem que os clientes experimentem os novos recursos antes do lançamento oficial. Os serviços e recursos de visualização pública não são destinados ao uso em produção. Para obter mais informações sobre o suporte durante as versões prévias, confira as perguntas frequentes ou registre uma Solicitação de suporte.

Seguindo este início rápido, você aprenderá a:

  • Gerar um projeto básico do .NET Core Steeltoe
  • Provisionar uma instância de serviço do Azure Spring Cloud
  • Criar e implantar o aplicativo com um ponto de extremidade público
  • Transmitir logs em tempo real

O código do aplicativo usado neste guia de início rápido é um aplicativo simples criado com um modelo de projeto de API Web do .NET Core. Quando você concluir este exemplo, o aplicativo estará acessível online e poderá ser gerenciado por meio do portal do Azure e a CLI do Azure.

Pré-requisitos

Instalar a extensão de CLI do Azure

Verifique se a sua versão da CLI do Azure é 2.0.67 ou posterior:

az --version

Instalar a extensão do Azure Spring Cloud para a CLI do Azure usando o seguinte comando:

az extension add --name spring-cloud

Fazer logon no Azure

  1. Faça logon na CLI do Azure

    az login
    
  2. Se você tiver mais de uma assinatura, escolha a que deseja usar para este guia de início rápido.

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

Gerar um projeto do .NET Core do Steeltoe

No Visual Studio, crie um aplicativo Web ASP.NET Core chamado "Olá, mundo" com o modelo de projeto de API. Observe que haverá um WeatherForecastController gerado automaticamente, que será nosso teste de ponto de extremidade mais tarde.

  1. Crie uma pasta para o código-fonte do projeto e gere o projeto.

    mkdir source-code
    
    cd source-code
    
    dotnet new webapi -n hello-world --framework netcoreapp3.1
    
  2. Navegue até o diretório do projeto.

    cd hello-world
    
  3. Edite o arquivo do appSettings.json para adicionar as seguintes configurações:

    "spring": {
      "application": {
        "name": "hello-world"
      }
    },
    "eureka": {
      "client": {
        "shouldFetchRegistry": true,
        "shouldRegisterWithEureka": true
      }
    }
    
  4. Também em appSettings.json, altere o nível de log da categoria Microsoft de Warning para Information. Essa alteração garante que os logs serão produzidos quando você exibir os logs de streaming em uma etapa posterior.

    O arquivo appSettings.json agora é semelhante ao exemplo a seguir:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Information",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "spring": {
        "application": {
          "name": "hello-world"
        }
      },
      "eureka": {
        "client": {
          "shouldFetchRegistry": true,
          "shouldRegisterWithEureka": true
        }
      }
    }
    
  5. Adicione dependências e uma tarefa de Zip ao arquivo de .csproj:

    <ItemGroup>
      <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="3.0.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>
    

    Os pacotes são para a Descoberta de Serviço Steeltoe e para a biblioteca de clientes do Azure Spring Cloud. A tarefa Zip é para implantação no Azure. Quando você executa o comando dotnet publish, ele gera os binários na pasta publicar e essa tarefa compacta a pasta Publicar em um arquivo .zip que você carrega para o Azure.

  6. No arquivo Program.cs, adicione uma diretiva using e o código que usa a biblioteca de clientes do Azure Spring Cloud:

    using Microsoft.Azure.SpringCloud.Client;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .UseAzureSpringCloudService()
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    
  7. No arquivo Startup.cs, adicione uma diretiva using e um código que usa a Descoberta de Serviço Steeltoe no final dos métodos ConfigureServices e Configure:

    using Steeltoe.Discovery.Client;
    
    public void ConfigureServices(IServiceCollection services)
    {
        // Template code not shown.
    
        services.AddDiscoveryClient(Configuration);
    }
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Template code not shown.
    
        app.UseDiscoveryClient();
    }
    
  8. Crie o projeto para garantir se não há erros de compilação.

    dotnet build
    

Provisionar uma instância de serviço

O procedimento a seguir cria uma instância do Azure Spring Cloud usando o portal do Azure.

  1. Abra o Portal do Azure.

  2. Na caixa de pesquisa superior, pesquise Azure Spring Cloud.

  3. Selecione Azure Spring Cloud nos resultados.

    Ícone de início do ASC

  4. Na página do Azure Spring Cloud, clique em + Adicionar.

    Ícone de adição do ASC

  5. Preencha o formulário na página Criar do Azure Spring Cloud. Considere as seguintes diretrizes:

    • Assinatura: selecione a assinatura da qual você deseja que este recurso seja cobrado.
    • Grupo de recursos: Crie um novo grupo de recursos. O nome que você inserir aqui será usado em etapas posteriores, como <resource group name> .
    • Nome/Detalhes do Serviço: Especifique o <service instance name> . O nome deve ter entre 4 e 32 caracteres e pode conter apenas letras minúsculas, números e hifens. O primeiro caractere do nome do serviço deve ser uma letra e o último caractere deve ser uma letra ou um número.
    • Região: selecione a região da instância de serviço.

    Início do portal ASC

  6. Selecione Examinar e criar.

Compilar e implantar o aplicativo

O procedimento a seguir cria e implanta o projeto que você criou anteriormente.

  1. Verifique se o prompt de comando ainda está na pasta do projeto.

  2. Execute o comando a seguir para criar o projeto, publicar os binários e armazenar os binários em um arquivo .zip na pasta do projeto.

    dotnet publish -c release -o ./publish
    
  3. Crie um aplicativo em sua instância do Azure Spring Cloud com um ponto de extremidade público atribuído. Use o mesmo nome de aplicativo "olá-mundo" especificado em 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. Implante o arquivo .zip no aplicativo.

    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
    

    A opção --main-entry identifica o arquivo .dll que contém o ponto de entrada do aplicativo. Depois que o serviço carrega o arquivo .zip, ele extrai todos os arquivos e pastas e tenta executar o ponto de entrada no arquivo .dll especificado por --main-entry.

    A implantação do aplicativo leva alguns minutos para ser concluída. Para confirmar se ele foi implantado, acesse a folha Aplicativos no portal do Azure.

Testar o aplicativo

Após a conclusão da implantação, acesse o aplicativo na seguinte URL:

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

O aplicativo retorna dados JSON semelhantes ao seguinte exemplo:

[{"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"}]

Transmitir logs em tempo real

Use o comando a seguir para obter os logs em tempo real do aplicativo.

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

Os logs são exibidos na saída:

[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

Dica

Use az spring-cloud app logs -h para explorar mais parâmetros e funcionalidades de fluxo de log.

Para obter recursos avançados de análise de logs, acesse a guia Logs do menu no portal do Azure. Os logs aqui têm uma latência de alguns minutos. Análise de logs

Este guia de início rápido explica como implantar aplicativos de microsserviço simples do Azure Spring Cloud para execução no Azure.

O código do aplicativo usado neste tutorial é um aplicativo simples criado com o Spring Initializr. Quando você concluir este exemplo, o aplicativo estará acessível online e poderá ser gerenciado por meio do portal do Azure.

Este guia de início rápido explica como:

  • Gerar um projeto básico do Spring Cloud
  • Provisionar uma instância de serviço
  • Criar e implantar o aplicativo com um ponto de extremidade público
  • Transmitir logs em tempo real

Pré-requisitos

Para concluir este guia de início rápido:

Gerar um projeto do Spring Cloud

Comece com o Spring Initializr para gerar um projeto de exemplo com as dependências recomendadas para o Azure Spring Cloud. A imagem a seguir mostra o Initializr configurado para este projeto de exemplo.

https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.3.10.RELEASE&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

Observe que este exemplo usa o Java versão 8. Se quiser usar o Java versão 11, altere a opção em Metadados do projeto.

Página do Initializr

  1. Clique em Gerar quando todas as dependências forem definidas. Baixe e descompacte o pacote e crie um controlador da Web para um aplicativo Web simples adicionando src/main/java/com/example/hellospring/HelloController.java da seguinte maneira:

    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!";
        }
    
    }
    

Provisionar uma instância do Azure Spring Cloud

O procedimento a seguir cria uma instância do Azure Spring Cloud usando o portal do Azure.

  1. Em uma nova guia, abra o portal do Azure.

  2. Na caixa de pesquisa superior, pesquise Azure Spring Cloud.

  3. Selecione Azure Spring Cloud nos resultados.

    Ícone de início do ASC

  4. Na página do Azure Spring Cloud, clique em + Adicionar.

    Ícone de adição do ASC

  5. Preencha o formulário na página Criar do Azure Spring Cloud. Considere as seguintes diretrizes:

    • Assinatura: selecione a assinatura da qual você deseja que este recurso seja cobrado.
    • Grupo de recursos: a criação de grupos de recursos para novos recursos é uma melhor prática. Isso será usado em uma etapa posterior como <resource group name> .
    • Nome/Detalhes do Serviço: Especifique o <service instance name> . O nome deve ter entre 4 e 32 caracteres e pode conter apenas letras minúsculas, números e hifens. O primeiro caractere do nome do serviço deve ser uma letra e o último caractere deve ser uma letra ou um número.
    • Localização: selecione a região da instância de serviço.

    Início do portal ASC

  6. Clique em Examinar e criar.

Compilar e implantar o aplicativo

O procedimento a seguir cria e implanta o aplicativo usando a CLI do Azure. Execute o comando a seguir na raiz do projeto.

  1. Compile o projeto usando o Maven:

    mvn clean package -DskipTests
    
  2. Caso ainda não tenha feito isso, instale a extensão do Azure Spring Cloud para a CLI do Azure:

    az extension add --name spring-cloud
    
  3. Crie o aplicativo com o ponto de extremidade público atribuído. Se estiver usando o Java 11, inclua a opção --runtime-version=Java_11.

    az spring-cloud app create -n hellospring -s <service instance name> -g <resource group name> --assign-endpoint true
    
  4. Implante o arquivo JAR para o aplicativo (target\hellospring-0.0.1-SNAPSHOT.jar no Windows):

    az spring-cloud app deploy -n hellospring -s <service instance name> -g <resource group name> --jar-path <jar file path>
    
  5. A implantação do aplicativo leva alguns minutos para ser concluída. Para confirmar se ele foi implantado, acesse a folha Aplicativos no portal do Azure. Você verá o status do aplicativo.

Depois que a implantação for concluída, acesse o aplicativo em https://<service instance name>-hellospring.azuremicroservices.io/.

Acessar o aplicativo no navegador

Como transmitir logs em tempo real

Use o comando a seguir para obter os logs em tempo real do aplicativo.

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

Os logs serão exibidos nos resultados:

Logs de streaming

Dica

Use az spring-cloud app logs -h para explorar mais parâmetros e funcionalidades de fluxo de log.

Para obter recursos avançados de análise de logs, acesse a guia Logs do menu no portal do Azure. Os logs aqui têm uma latência de alguns minutos.

Análise de logs

Limpar os recursos

Nas etapas anteriores, você criou recursos do Azure que continuarão a acumular encargos enquanto permanecerem em sua assinatura. Se você acredita que não precisará desses recursos no futuro, exclua o grupo de recursos por meio do portal ou executando o seguinte comando na CLI do Azure:

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

Próximas etapas

Neste guia de início rápido, você aprendeu a:

  • Gerar um projeto básico do Azure Spring Cloud
  • Provisionar uma instância de serviço
  • Criar e implantar o aplicativo com um ponto de extremidade público
  • Transmitir logs em tempo real

Para saber como usar mais funcionalidades do Azure Spring, avance para a série de início rápido que implanta um aplicativo de exemplo para o Azure Spring Cloud:

Mais exemplos estão disponíveis no GitHub: Exemplos do Azure Spring Cloud.