Inicio rápido: Implementación de la primera aplicación en Azure Spring Cloud

En este inicio rápido se explica cómo implementar una sencilla aplicación para que se ejecute en Azure Spring Cloud.

Nota

La compatibilidad de Steeltoe con Azure Spring Cloud se ofrece actualmente como versión preliminar pública. Las ofertas de versión preliminar pública permiten a los clientes experimentar con nuevas características antes de su publicación oficial. Los servicios y las características en versión preliminar pública no están diseñados para su uso en producción. Para obtener más información sobre el soporte técnico durante las versiones preliminares, revise las preguntas frecuentes o envíe una solicitud de soporte técnico.

Al seguir esta guía de inicio rápido, aprenderá a:

  • Generación de un proyecto básico de Steeltoe para .NET Core
  • Aprovisionar una instancia del servicio Azure Spring Cloud
  • Compilar e implementar la aplicación con un punto de conexión público
  • Streaming de registros en tiempo real

El código de aplicación que se usa en esta guía de inicio rápido es una aplicación sencilla compilada con una plantilla de proyecto de API web de .NET Core. Cuando haya completado este ejemplo, se podrá acceder en línea a la aplicación de ejemplo proporcionada y se podrá administrar mediante Azure Portal y la CLI de Azure.

Requisitos previos

Instalación de la extensión de la CLI de Azure

Compruebe que la versión de la CLI de Azure sea 2.0.67 o posterior:

az --version

Instale la extensión de Azure Spring Cloud para la CLI de Azure con el siguiente comando:

az extension add --name spring-cloud

Inicio de sesión en Azure

  1. Inicie sesión en la CLI de Azure.

    az login
    
  2. Si tiene más de una suscripción, elija la que quiere usar para esta guía de inicio rápido.

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

Generación de un proyecto de Steeltoe para .NET Core

En Visual Studio, cree una aplicación web de ASP.NET Core denominada "hello-world" con la plantilla de proyecto de la API. Tenga en cuenta que habrá un controlador WeatherForecastController generado automáticamente, que será el punto de conexión de prueba más adelante.

  1. Cree una carpeta para el código fuente del proyecto y genere el proyecto.

    mkdir source-code
    
    cd source-code
    
    dotnet new webapi -n hello-world --framework netcoreapp3.1
    
  2. Vaya al directorio del proyecto.

    cd hello-world
    
  3. Edite el archivo appsettings.json para agregar la siguiente configuración:

    "spring": {
      "application": {
        "name": "hello-world"
      }
    },
    "eureka": {
      "client": {
        "shouldFetchRegistry": true,
        "shouldRegisterWithEureka": true
      }
    }
    
  4. También en appsettings.json, cambie el nivel de registro de la categoría Microsoft de Warning a Information. Este cambio garantiza que los registros se generarán al ver los registros de streaming en un paso posterior.

    El archivo appsettings.json ahora es similar al ejemplo siguiente:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Information",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "spring": {
        "application": {
          "name": "hello-world"
        }
      },
      "eureka": {
        "client": {
          "shouldFetchRegistry": true,
          "shouldRegisterWithEureka": true
        }
      }
    }
    
  5. Agregue dependencias y una tarea Zip al archivo .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>
    

    Los paquetes son para la detección de servicios de Steeltoe y la biblioteca cliente de Azure Spring Cloud. La tarea Zip es para la implementación en Azure. Al ejecutar el comando dotnet publish, se generan los archivos binarios en la carpeta publish, y esta tarea comprime la carpeta publish en un archivo .zip que se carga en Azure.

  6. En el archivo Program.cs, agregue una directiva using y el código que usa la biblioteca cliente de Azure Spring Cloud:

    using Microsoft.Azure.SpringCloud.Client;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .UseAzureSpringCloudService()
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    
  7. En el archivo Startup.cs, agregue la directiva using y el código que usa la detección de servicios de Steeltoe al final del método ConfigureServices:

    using Steeltoe.Discovery.Client;
    
    public void ConfigureServices(IServiceCollection services)
    {
        // Template code not shown.
    
        services.AddDiscoveryClient(Configuration);
    }
    
  8. Compile el proyecto para asegurarse de que no haya errores de compilación.

    dotnet build
    

Aprovisionar una instancia de servicio

En el procedimiento siguiente se crea una instancia de Azure Spring Cloud desde Azure Portal.

  1. Abra Azure Portal.

  2. En el cuadro de búsqueda superior, busque Azure Spring Cloud.

  3. Seleccione Azure Spring Cloud en los resultados.

    Icono de inicio de ASC

  4. En la página Azure Spring Cloud, seleccione + Create (+ Crear).

    Icono de adición de ASC

  5. Rellene el formulario en la página Crear de Azure Spring Cloud. Tenga en cuenta las directrices siguientes:

    • Suscripción: seleccione la suscripción a la que desea que se facture este recurso.
    • Grupo de recursos: Cree un nuevo grupo de recursos. El nombre que escriba aquí se usará en pasos posteriores como <resource group name> .
    • Detalles o nombre del servicio: Especifique <service instance name> . El nombre debe tener entre 4 y 32 caracteres, y solo puede contener números, letras minúsculas y guiones. El primer carácter del nombre del servicio debe ser una letra y el último debe ser una letra o un número.
    • Región: seleccione la región de la instancia de servicio.

    Inicio del portal de ASC

  6. Seleccione Revisar y crear.

  7. Seleccione Crear.

Compilación e implementación de la aplicación

El procedimiento siguiente genera e implementa el proyecto que creó anteriormente.

  1. Asegúrese de que el símbolo del sistema todavía esté en la carpeta del proyecto.

  2. Ejecute el siguiente comando para compilar el proyecto, publicar los archivos binarios y almacenar los archivos binarios en un archivo .zip en la carpeta del proyecto.

    dotnet publish -c release -o ./publish
    
  3. Cree una aplicación en la instancia de Azure Spring Cloud con un punto de conexión público asignado. Use el mismo nombre de aplicación "hello-world" que especificó en 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. Implemente el archivo .zip en la aplicación.

    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
    

    La opción --main-entry identifica el archivo .dll que contiene el punto de entrada de la aplicación. Una vez que el servicio carga el archivo .zip, extrae todos los archivos y carpetas e intenta ejecutar el punto de entrada en el archivo .dll especificado por --main-entry.

    La implementación de la aplicación tarda unos minutos en finalizar. Para confirmar que se ha implementado, vaya a la sección Aplicaciones de Azure Portal.

Prueba de la aplicación

Una vez completada la implementación, puede acceder a la aplicación con la dirección URL siguiente:

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

La aplicación devuelve datos JSON similares al ejemplo siguiente:

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

Streaming de registros en tiempo real

Use el comando siguiente para obtener registros en tiempo real de la aplicación.

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

Los registros aparecen en la salida:

[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

Sugerencia

Use az spring-cloud app logs -h para explorar más parámetros y funcionalidades de las secuencias de registro.

Para ver las características avanzadas de análisis de registros, vaya a la pestaña Registros en el menú de Azure Portal. Aquí los registros tienen una latencia de unos minutos. Análisis de registros

En este inicio rápido se explica cómo implementar una sencilla aplicación en Azure Spring Cloud.

El código de aplicación que se usa en este tutorial es una aplicación sencilla compilada con Spring Initializr. Cuando haya completado este ejemplo, se podrá acceder en línea a la aplicación de ejemplo proporcionada y se podrá administrar mediante Azure Portal.

En este inicio rápido se explica cómo:

  • Generar un proyecto básico de Spring Cloud
  • Aprovisionar una instancia de servicio
  • Compilar e implementar la aplicación con un punto de conexión público
  • Streaming de registros en tiempo real

Requisitos previos

Para completar esta guía de inicio rápido:

Generación de un proyecto de Spring Cloud

Comience con Spring Initializr para generar un proyecto de ejemplo con las dependencias recomendadas para Azure Spring Cloud. Este vínculo usa la siguiente dirección URL para proporcionarle la configuración predeterminada.

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

En la imagen siguiente se muestra la configuración de Initializr recomendada para este proyecto de ejemplo.

Este ejemplo usa la versión 8 de Java. Si desea usar la versión 11, cambie la opción en los metadatos del proyecto.

Página de Initializr

  1. Haga clic en Generar cuando se establezcan todas las dependencias.

  2. Descargue y desempaquete el paquete y, a continuación, cree un controlador web para una aplicación web sencilla agregando el archivo src/main/java/com/example/hellospring/HelloController.java con el siguiente contenido:

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

Aprovisionamiento de una instancia de Azure Spring Cloud

En el procedimiento siguiente se crea una instancia de Azure Spring Cloud desde Azure Portal.

  1. Abra Azure Portal en una pestaña ventana.

  2. En el cuadro de búsqueda superior, busque Azure Spring Cloud.

  3. Seleccione Azure Spring Cloud en los resultados.

    Icono de inicio de ASC

  4. En la página Azure Spring Cloud, seleccione + Create (+ Crear).

    Icono de adición de ASC

  5. Rellene el formulario en la página Crear de Azure Spring Cloud. Tenga en cuenta las directrices siguientes:

    • Suscripción: seleccione la suscripción a la que desea que se facture este recurso.
    • Grupo de recursos: se recomienda crear grupos de recursos para los nuevos recursos. Usará este grupo de recursos en pasos posteriores como <resource group name> .
    • Detalles o nombre del servicio: Especifique <service instance name> . El nombre debe tener entre 4 y 32 caracteres, y solo puede contener números, letras minúsculas y guiones. El primer carácter del nombre del servicio debe ser una letra y el último debe ser una letra o un número.
    • Ubicación: seleccione la región de la instancia de servicio.

    Inicio del portal de ASC

  6. Seleccione Revisar y crear.

Compilación e implementación de la aplicación

El siguiente procedimiento compila e implementa la aplicación mediante la CLI de Azure. Ejecute el siguiente comando en la raíz del proyecto.

  1. Inicie sesión en Azure y elija su suscripción.

    az login
    

    Si tiene más de una suscripción, use el siguiente comando para enumerar las suscripciones a las que tiene acceso y, a continuación, elija la que quiera usar para este inicio rápido.

    az account list -o table
    

    Use el siguiente comando para establecer la suscripción predeterminada que se usará con los comandos de la CLI de Azure en este inicio rápido.

    az account set --subscription <Name or ID of a subscription from the last step>
    
  2. Compile el proyecto mediante Maven:

    mvn clean package -DskipTests
    
  3. Cree la aplicación con un punto de conexión público asignado. Si seleccionó la versión 11 de Java al generar el proyecto de Spring Cloud, incluya el modificador --runtime-version=Java_11.

    az spring-cloud app create -n hellospring -s <service instance name> -g <resource group name> --assign-endpoint true
    
  4. Implemente el archivo JAR de la aplicación (target\hellospring-0.0.1-SNAPSHOT.jar en Windows):

    az spring-cloud app deploy -n hellospring -s <service instance name> -g <resource group name> --artifact-path <jar file path>/hellospring-0.0.1-SNAPSHOT.jar
    
  5. La implementación de la aplicación tarda unos minutos en finalizar. Para confirmar que se ha implementado, vaya a la sección Aplicaciones de Azure Portal. Debería ver el estado de la aplicación.

Una vez completada la implementación, puede acceder a la aplicación en https://<service instance name>-hellospring.azuremicroservices.io/.

Acceso a la aplicación desde el explorador

Registros de streaming en tiempo real

Use el comando siguiente para obtener registros en tiempo real de la aplicación.

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

Los registros aparecen en los resultados:

Registros de streaming

Sugerencia

Use az spring-cloud app logs -h para explorar más parámetros y funcionalidades de las secuencias de registro.

Para ver las características avanzadas de los análisis de registros, vaya a la pestaña Registros del menú de Azure Portal. Aquí los registros tienen una latencia de unos minutos.

Análisis de registros

Limpieza de recursos

En los pasos anteriores, creó recursos de Azure que seguirán acumulando cargos mientras permanezcan en la suscripción. Si prevé que no va a necesitar estos recursos en el futuro, elimine el grupo de recursos del portal o ejecutando el siguiente comando en la CLI de Azure:

az group delete --name <your resource group name> --yes

Pasos siguientes

En este inicio rápido ha aprendido a:

  • Generar un proyecto básico de Spring Cloud
  • Aprovisionar una instancia de servicio
  • Compilar e implementar la aplicación con un punto de conexión público
  • Streaming de registros en tiempo real

Para aprender a usar más funcionalidades de Azure Spring, avance a la serie de guías de inicio rápido que implementa una aplicación de ejemplo en Azure Spring Cloud:

Hay más ejemplos disponibles en GitHub: Ejemplos de Azure Spring Cloud.