Heroku

Implementación de dos microservicios en Heroku mediante Devprime, MongoDB Atlas y Confluent Kafka

Heroku ofrece una plataforma en la nube para la publicación de aplicaciones y desarrollaremos dos microservicios utilizando la plataforma Devprime, MongoDB y Kafka y [comunicación asíncrona]. /../how-to/stream/rabbitmq/asynchronous-microservices-communication/).

Artículos necesarios en su entorno

  • Instalar el SDK de .NET 6 o superior
  • Código de Visual Studio
  • Una cuenta activa en Heroku
  • Una cuenta activa en la plataforma Devprime y una licencia de uso para desarrolladores o empresas.
  • Una cuenta en MongoDB Atlas
  • Una cuenta en Confluent Cloud
  • Devprime CLI instalado y activo (dp auth)
  • docker local activo + GIT
  • Powershell o Bash

Creación de accesos y obtención de credenciales

1) Ve a Heroku
a) Cree una nueva aplicación y guarde el nombre.
b) Cree una segunda aplicación y guarde el nombre.

Aplicaciones de Heroku
c) Obtenga el token de acceso de “API KEY

2) Vaya a MongoDB Atlas
a) Crear una base de datos mongodb gratuita
b) Obtener credenciales de acceso

3) Vaya a Confluent Cloud y cree un servicio de Kafka
a) Crear un servicio gratuito de streaming de Kafka
b) Añade el tema con el nombre ‘orderevents’
c) Añade un tema con el nombre ‘paymentevents’
Kafka confluente
d) Obtener las credenciales de acceso a Confluent Cloud

4) Instale Heroku CLI e inicie sesión
heroku container:login

**Creación de los microservicios ‘Order’ usando Devprime CLI
Usaremos la Devprime CLI para crear los microservicios.

  • Creación del microservicio
    dp new dp-order --stream kafka --state mongodb
    Escriba la carpeta dp-order para ver el microservicio
  • Adición de reglas de negocio
    dp marketplace order
  • Acelerar las implementaciones
    dp init

Modifique la configuración agregando las credenciales de MongoDB/Kafka
a) En la carpeta del proyecto, abra el archivo de configuración
code .\src\App\appsettings.json
b) En el elemento Estado, agregue las credenciales de MongoDB
c) En el elemento Stream, agregue las credenciales de Kafka

Ejecute los microservicios localmente.
.\run.ps1 ou ./run.sh (Linux, MacOS)

Haz una publicación de prueba
a) Abra el navegador web en http://localhost:5000 o httsp://localhost:5001
b) Haga clic en publicar y luego en ‘Pruébelo’
c) Ingrese los datos y envíe

Si todo ha ido bien hasta ahora, puede pasar al resto de la configuración y publicación en el entorno de Heroku.

Adaptación del dockerfile del proyecto para soportar Heroku
a) Localice y elimine la línea de abajo
ENTRYPOINT ["dotnet", "App.dll"]
b) Agregue la línea de abajo al final
CMD ASPNETCORE_URLS=http://*:$PORT dotnet App.dll

Configuración de exportación
DP Exportación Heroku
Devprime heroku microservicios

Configuración de publicación en Heroku
a) Localice y abra el archivo creado
code .\.Devprime\heroku\instructions.txt
b) Localice la etiqueta <app-name> y reemplácela con el nombre de su aplicación1
c) Localice la etiqueta <token> y reemplace el token de acceso de Heroku
d) Ahora crearemos las variables de entorno ‘Config Vars’ en Heroku

  • Copie el comando curl en el modificado en los pasos anteriores
  • Ejecútalo desde la línea de comandos.
  • Observe la diferencia con curl en Windows Command, Powershell, Linux.
    curl -X PATCH https://api.heroku.com/apps/<app-name>/config-vars -H "Content-Type: application/json" -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer <token>" -d @.\.Devprime\heroku\heroku.json

Configuración de ‘Config Vars’ desde el nombre de tu aplicación1 en Heroku
Portal -> aplicación -> configuración -> variables de configuración

variables de configuración

Compilación y publicación de imágenes de docker
a) Antes de ejecutar el comando, cambie el <app-name>

  • Compilación y envío
    heroku container:push web --app <app-name>
  • Cambiar a la versión
    heroku container:release web --app <app-name>

En este momento, ya puede ver el microservicio en el portal
Aplicaciones de Heroku

Accediendo a la url pública del proyecto
heroku open

Visualización del registro de microservicios app-name1
a) Antes de ejecutar el comando, cambie el <app-name>
heroku logs --tail --app <app-name>

Creación de un nuevo microservicio de pago'
El siguiente proceso acelera la creación y ya ejecuta el ‘dp init’
dp new dp-payment --state mongodb --stream kafka --marketplace payment --init
Al final, ingrese a la carpeta dp-payment

Modificar la configuración y las credenciales
a) En la carpeta del proyecto, abra el archivo de configuración
code .\src\App\appsettings.json
b) Cambie los puertos del elemento Devprime_Web a ‘https://localhost:5002; http://localhost:5003’
c) En el elemento Estado, agregue las credenciales de MongoDB
d) En el elemento Stream, agregue las credenciales de Kafka
e) Suscribirse a las colas ‘orderevents’.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
"Devprime_Stream": [
    {
      "Alias": "Stream1",
      "Enable": "true",
      "Default": "true",
      "StreamType": "Kafka",
      "HostName": "<chang value>",
      "User": "<chang value>",
      "Password": "<chang value>",
      "Port": "9092",
      "Retry": "3",
      "Fallback": "State1",
      "Subscribe": [ { "Queues": "orderevents" } ]
    }
  ],

Recebimento de eventos no adapter de Stream
a) Implementación de un evento en Stream
dp add event OrderCreated -as PaymentService
b) Cambie el DTO a ‘OrderCreatedEventDTO’
code .\src\Core\Application\Services\Payment\Model\OrderCreatedEventDTO.cs

1
2
3
4
5
6
public class OrderCreatedEventDTO                     
  {                                                     
    public Guid OrderID { get; set; }
    public string CustomerName { get; set; }
    public double Value { get; set; }  
  }

Configurando o Subscribe no Stream
a) Abra la configuración de Event Stream
code .\src\Adapters\Stream\EventStream.cs
b) Cambiar la implementación en Suscríbete

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
    public override void StreamEvents()
    {
        Subscribe<IPaymentService>("Stream1", "OrderCreated", (payload, paymentService, Dp) =>
        {
            var dto = System.Text.Json.JsonSerializer.Deserialize<OrderCreatedEventDTO>(payload);
            var command = new Payment()
            {
                CustomerName = dto.CustomerName,
                OrderID = dto.OrderID,
                Value = dto.Value
            };
            paymentService.Add(command);
        });
    }

Modificar la configuración en el dockerfile del proyecto
a) Localice y elimine la línea de abajo
ENTRYPOINT ["dotnet", "App.dll"]
b) Agregue la siguiente línea
CMD ASPNETCORE_URLS=http://*:$PORT dotnet App.dll

Configuración de exportación
dp export heroku

Configuración de publicación en Heroku
a) Localice y abra el archivo creado
code .\.Devprime\heroku\instructions.txt
b) Localice la etiqueta <app-name> y reemplácela con el nombre de su app-name2
c) Localice la etiqueta <token> y reemplace el token de acceso de Heroku
d) Ahora crearemos las variables de entorno ‘Config Vars’ en Heroku

  • Copie el comando curl en el modificado en los pasos anteriores
  • Ejecútalo desde la línea de comandos.
  • Observe la diferencia con curl en Windows Command, Powershell, Linux.
    curl -X PATCH https://api.heroku.com/apps/<app-name>/config-vars -H "Content-Type: application/json" -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer <token>" -d @.\.Devprime\heroku\heroku.json

Compilación y publicación de imágenes de docker
a) Antes de ejecutar el comando, cambie el <app-name>

  • Compilación y envío
    heroku container:push web --app <app-name>
  • Cambiar a la versión
    heroku container:release web --app <app-name>

Aplicaciones de Heroku

Pasos opcionales para detener servicios o ver procesos
a) Antes de ejecutar el comando, cambie el <app-name>

heroku ps --app <app-name>
heroku ps:stop web.1 --app <app-name>
heroku ps:start web.1 --app <app-name>

Reflexiones finales

  • Durante este viaje de Heroku, hemos desarrollado dos microservicios.
  • Para automatizar tu estrategia de DevOps, usa GitHub Actions.
Última modificación April 16, 2024 (2b35fcc8)