Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede implementar una aplicación de varios contenedores en Azure Container Apps mediante Visual Studio. Normalmente, se implementa cada contenedor en una instancia de aplicación de contenedor independiente, pero se incluyen todos los contenedores de la aplicación en el mismo entorno de aplicación de contenedor para permitirles comunicarse de forma sencilla y segura entre sí. Puede configurar cada aplicación contenedora para aceptar solicitudes desde dentro del entorno de contenedor o para permitir el tráfico externo. Azure Container Apps es muy flexible y configurable, lo que permite muchos escenarios de microservicios posibles y un conjunto completo de herramientas de supervisión avanzadas. Si usa Docker Compose para administrar aplicaciones de contenedor locales, puede considerar la posibilidad de intentar migrarla a un entorno de aplicación de contenedor en Azure.
El proceso implica algunos pasos mediante Visual Studio y Azure Portal. También puede usar la CLI de Azure para realizar estas acciones, pero eso está fuera del ámbito de este tutorial. En primer lugar, usamos la aplicación que ha creado con la opción Crear una aplicación de varios contenedores e implementarla mediante el proceso de publicación . Visual Studio le guía por los pasos para crear la primera aplicación contenedora, un entorno de aplicación de contenedor, así como crear un registro de contenedor para almacenar las imágenes de contenedor. A continuación, vuelva a ejecutar el proceso de publicación con la otra aplicación contenedora. Específicamente, deberá elegir el mismo entorno de aplicación contenedora en el proceso de publicación. Por último, debe configurar la caché de Redis para que funcione con el servicio Azure Redis Cache. Modifique el código de configuración de caché y vuelva a publicar la API web. A continuación, configure los permisos para conceder acceso a la identidad administrada asignada por el sistema de la aplicación a la memoria caché.
Prerrequisitos
- Una suscripción de Azure. Regístrese para obtener una evaluación gratuita.
- Visual Studio 2022 o posterior, con las cargas de trabajo de desarrollo de Azure y desarrollo web instaladas.
- El proyecto MulticontainerSample ubicado en
https://github.com/MicrosoftDocs/vs-tutorial-samples
la carpeta docker. La solución de ejemplo contiene dos proyectos: el back-end de API web y el front end de ASP.NET Razor, tal como creaste en otro tutorial. También puede crear los dos proyectos desde cero, ya que son modificaciones muy sencillas de las plantillas predeterminadas siguiendo ese tutorial. Puede omitir los pasos de Docker Compose.
Implementación del back-end de la API web
En el Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto api web y seleccione Publicar.
Elija Azure de destino y, a continuación, seleccione Azure Container Apps.
Si aún no ha iniciado sesión con una cuenta asociada a una suscripción de Azure, puede iniciar sesión ahora o cambiar el inquilino si es necesario.
En la pantalla donde especifique una aplicación contenedora, seleccione Crear nuevo para crear una nueva aplicación de contenedor.
En la página Crear aplicación contenedora de Azure , escriba detalles como el grupo de recursos. Para este paso, creará un nuevo grupo de recursos, un nuevo entorno de contenedor y un nuevo registro de contenedor.
Es posible que tarde un poco en crear los recursos. Cuando finalice, haga clic en Siguiente para ir al paso siguiente.
En el paso siguiente, creará un registro de contenedor. Si crea un nuevo registro de contenedor, se le pedirán algunos detalles. Puede elegir la misma región y grupo de recursos que la aplicación contenedora.
El siguiente paso le pide que elija el tipo de compilación del contenedor. Elija el SDK de .NET si no tiene un Dockerfile, o Docker Desktop si lo tiene.
Para el tipo de implementación, elija Publicar (generar archivo pubxml) para crear un perfil de publicación.
Seleccione Finalizar para completar el proceso de publicación y crear un perfil de publicación. Si ve un mensaje sobre la configuración adicional para acceder al contenedor publicado, elija Sí.
Verá una página que muestra la actividad en Azure y, al cerrarla, la pantalla Publicar ahora tiene la información de la aplicación contenedora, como la dirección URL de entrada a la API web.
Haga clic en el botón Publicar para publicar en la aplicación contenedora de Azure. Visual Studio solicita que se creen los recursos de Azure e inicia el proceso de publicación de la aplicación contenedora webAPI.
Visual Studio podría intentar cargar la página de la nueva aplicación contenedora, pero no se espera que funcione en esta fase.
Ahora que ha publicado una vez, ha creado un perfil de publicación (.pubxml
archivo), por lo que no tiene que repetir estos pasos la próxima vez que publique. Solo tiene que hacer clic en el botón Publicar de esta pantalla, a menos que desee empezar de nuevo o cambiar cualquiera de los recursos de Azure que especificó.
Más adelante, usará el portal de Azure para realizar algunos cambios de configuración adicionales para el ingreso y para admitir el Caché Redis de Azure, pero primero, en la siguiente sección, publicará la interfaz de usuario web.
Implementación del front-end
Modifique el archivo de código front-end Index.cshtml.cs para hacer referencia a la nueva dirección URL del contenedor de API web. Este es el nombre que se muestra en Nombre del recurso en la pantalla Publicación de la API web. Para la comunicación entre contenedores, puede usar directamente HTTP con el nombre de la aplicación contenedora, sin especificar un nombre de dominio completo (FQDN) y un número de puerto. En el método
OnGet
, reemplace la línea existente que estableceRequestUri
para que haga referencia al nombre de la aplicación de contenedor de la API Web, como en el código siguiente.request.RequestUri = new Uri("http://<mywebapi-container-app-name>/Counter");
En el Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto Webfrontend y seleccione Publicar. En la siguiente pantalla, seleccione Crear nuevo para crear una nueva aplicación de contenedor.
En la pantalla Crear nueva aplicación de contenedor de Azure , elija el mismo grupo de recursos y el mismo entorno de contenedor que creó al publicar el proyecto de API web.
¡Importante! Seleccione el mismo registro de contenedor que creó anteriormente.
Elija las mismas opciones que hizo para la API web para los demás pasos. El tipo de compilación de contenedor es Docker Desktop y el tipo de implementación es Publish (genera el archivo pubxml).
Seleccione Finalizar para completar el proceso de publicación y crear un perfil de publicación. Verá una página que muestra la actividad en Azure y, al cerrarla, la pantalla Publicar ahora tiene la información de la aplicación contenedora, como la dirección URL de entrada a la aplicación Webfrontend.
Visualización y configuración de las aplicaciones de contenedor en Azure Portal
- Inicie sesión en Azure Portal.
- Busque aplicaciones de contenedor y busque las que acaba de crear.
- Elija Entrada y configure las siguientes opciones:
En la pantalla Ingress, establezca Tráfico de entrada en Limitado al Entorno de Aplicaciones de Contenedor. Esto significa que solo Webfrontend puede enviar solicitudes. Incluso Visual Studio no podrá acceder a este servicio, por ejemplo, cuando complete el proceso de publicación y Visual Studio intente cargar la página, obtendrá un error en el explorador en lugar de acceder al servicio. Esto es lo esperado.
Compruebe el puerto de entrada (debe ser 8080). Está usando HTTP para la llamada de la API web y puede referirse directamente a la aplicación del contenedor por nombre en el URI de la solicitud. El nombre de dominio completo (FQDN) generado por las aplicaciones de contenedor de Azure usa una dirección URL HTTPS (como se muestra en Visual Studio en la pantalla Publicar ), pero el tráfico interno puede omitirlo.
Para el Ingreso de Webfrontend, puede aceptar los valores predeterminados. El puerto de destino es 8080, ya que el Ingress controla todas las solicitudes de forma segura mediante el FQDN y HTTPS (o redireccionamiento de HTTP a HTTPS), y las reenvía a Webfrontend mediante HTTP en el puerto de contenedor 8080.
Creación de Azure Redis Cache
Siga estos pasos para crear una instancia de Azure Redis Cache en el mismo grupo de recursos que las aplicaciones de contenedor.
En Azure Portal, abra la aplicación contenedora de API web que creó anteriormente. Abra la pantalla Service Connector y seleccione Crear. Aparece la sección Crear conexión .
En la pantalla Crear conexión , escriba el tipo de servicio como Cache for Redis y elija Crear nuevo para crear una nueva caché de Redis.
Elija una caché o siga el vínculo Crear nueva para crear una memoria caché. Si crea una nueva caché, es posible que tenga que volver a la aplicación de contenedor y Service Connector y repetir los pasos anteriores para crear la conexión.
Para la base de datos, elija "0" para crear la primera base de datos numerada para esta caché.
Vaya a la pestaña Autenticación . Elija Identidad administrada asignada por el sistema. Acepte todos los demás valores predeterminados y seleccione Crear. Esto crea la conexión a la memoria caché.
De nuevo en la sección Service Connector de la aplicación contenedora de API web, actualice para ver la caché recién conectada (si aún no la ve) y active la casilla situada junto a la memoria caché. Seleccione Validar para comprobar el estado de la conexión. Puede expandir el nodo de caché para ver los valores de las variables de entorno de esa caché de Azure. Para los fines de este tutorial, solo necesita AZURE_REDIS_HOST, pero puede usar los demás en código real o para una configuración más completa. Use los valores aquí para establecer las variables de entorno en dockerfile, como se describe en la sección siguiente, para que la API web pueda conectarse a la memoria caché.
Para más información, consulte Inicio rápido: Creación de una conexión de servicio para Azure Container Apps desde Azure Portal.
Configuración de roles para la identidad administrada
En el portal de Azure, usa Control de acceso (IAM) en Azure Redis Cache para conceder acceso de colaborador a la identidad administrada asignada por el sistema de la app del contenedor.
- En Azure Portal, abra la página de Azure Redis Cache y seleccione Control de acceso (IAM).
- Seleccione Agregar>Agregar asignación de roles. Se abre la página Agregar asignación de roles.
- Seleccione la pestaña Miembros y elija identidad administrada.
- Elija Seleccionar miembros. Se abre la página Seleccionar miembros y selecciona Identidad administrada asignada por el sistema.
- Seleccione Aplicación de Contenedor y elija la aplicación contenedora de API web.
- En la pestaña Rol , elija Colaborador de Redis Cache.
- Seleccione Revisar y asignar. El sistema procesa la solicitud.
- Abra Asignaciones de roles para ver la identidad administrada por el sistema dentro del rol de Colaborador en Redis Cache.
El siguiente paso consiste en modificar la configuración de caché en el cliente de API web para usar , DefaultAzureCredential
que es la manera recomendada de autenticarse cuando se usa la identidad administrada asignada por el sistema. No es necesario que cualquier usuario que acceda a la aplicación externamente tenga asignaciones de roles de nivel de usuario específicas para acceder a los recursos mediante esta forma de administración de identidades. Para más información, consulte Integración de Azure Redis Cache: identidad administrada asignada por el sistema.
Modificación del proyecto de API web para hacer referencia al servicio Azure Redis Cache
Antes de publicar el proyecto de API web para que se ejecute en Azure, actualícelo para hacer referencia a Azure Redis Cache y use una identidad administrada para acceder a él de forma segura. Para dar cabida a esto, puede modificar el código de configuración de caché en Program.cs.
Para Azure Redis Cache, establezca una variable AZURE_REDIS_HOST
de entorno con la información de conexión y, a continuación, la lea en el código de inicio para conectarse a Azure Redis Cache y configure la caché.
Usas Azure.Identity
para obtener DefaultAzureCredential
, que maneja la autenticación segura con tu identidad administrada.
En Visual Studio, en el proyecto de API web, agregue una referencia a los paquetes
Azure Identity
NuGet yMicrosoft.Azure.StackExchange.Redis
.Agregue directivas de uso para los paquetes que acaba de agregar.
using Azure.Identity; using Microsoft.Azure.StackExchange.Redis;
Actualice el código de configuración de Redis Cache. Elimine el código anterior y reemplácelo por el código siguiente. Puede revisar los comentarios más adelante y descomentar cualquier código opcional que se adapte a sus propios escenarios más avanzados.
// Check the environment variable for the Redis cache host name var cacheHostName = Environment.GetEnvironmentVariable("AZURE_REDIS_HOST"); if (string.IsNullOrEmpty(cacheHostName)) { throw new InvalidOperationException("The environment variable 'AZURE_REDIS_HOST' is not set."); } var configurationOptions = ConfigurationOptions.Parse($"{cacheHostName}:6380"); // For system-assigned identity. // In the Azure portal, we need to set up Redis service to grant Contributor access to the system-assigned identity // for the container app that hosts this Web API service. await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential()); var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(configurationOptions); builder.Services.AddStackExchangeRedisCache(options => { options.ConfigurationOptions = configurationOptions; options.InstanceName = "SampleInstance"; }); // Uncomment the following line if you need to use the ConnectionMultiplexer directly // (for example, for advanced Redis operations like Pub/Sub or working with Redis data structures). // builder.Services.AddSingleton<IConnectionMultiplexer>(sp => // ConnectionMultiplexer.Connect(configurationOptions));
El método de autenticación que estableció anteriormente cuando creó la conexión de caché es una identidad administrada asignada por el sistema, por lo que el código aquí es coherente con esa opción. Si quiere usar también otros métodos de autenticación, debe realizar cambios en el código aquí. Consulte Integración de Azure Redis Cache: identidad administrada asignada por el sistema.
Compile el proyecto de API web para comprobar que no hay errores.
Si tiene un Dockerfile, actualice la fase base del Dockerfile para definir la variable
AZURE_REDIS_HOST
de entorno . El host se obtiene desde Azure Portal, al crear Azure Redis Cache o desde la sección Service Connector de la página de la aplicación contenedora de API web en el portal (consulte la sección anterior).ENV AZURE_REDIS_HOST mycache.redis.cache.windows.net
(Opcional) Puede definir otras opciones de configuración en variables de entorno, por ejemplo,
AZURE_REDIS_PORT
que normalmente es 6380. Para simplificar, este valor se codifica de forma rígida en lugar de usar una variable de entorno. Es posible que también desee establecerASPNETCORE_ENVIRONMENT
en Desarrollo.Si está utilizando el tipo de compilación de contenedor del SDK de .NET (sin el Dockerfile), puede establecer la variable de entorno en launchSettings.json bajo
profiles > http
."http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "http://localhost:5107", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "AZURE_REDIS_HOST": "cache11.redis.cache.windows.net" } }
Estás listo para publicar y verificar estos cambios. Seleccione el botón Publicar en la pantalla Publicar . Visual Studio intentará cargar la página, pero se produce un error porque la aplicación contenedora de API web no es accesible para las solicitudes fuera del entorno de la aplicación contenedora.
Para poder ejecutar la aplicación con Azure Redis Cache, debe configurar la identidad administrada con los permisos adecuados para acceder a la memoria caché.
Prueba de la aplicación
Vuelva a la pantalla Publicar en el proyecto Webfrontend y haga clic en el vínculo de la dirección URL de Webfrontend. Debería ver que la aplicación Webfrontend aparece con el contador que se actualiza al actualizar la página.
Sugerencia
Azure Container Apps procura maximizar el tiempo de actividad de sus servicios. Si algo va mal con uno de los servicios, de tal manera que falla en una verificación de estado, Azure Container Apps no lo establecerá como la revisión activa ni lo utilizará para atender solicitudes. Como consecuencia, durante el proceso de desarrollo y pruebas, es posible que ocasionalmente encuentre que los cambios más recientes que ha realizado no se reflejan en el sitio activo. En Azure Portal, seleccione Revisiones y réplicas para ver el estado de la revisión publicada más reciente. Desde allí, puede abrir registros para ayudar a solucionar el problema.
¡Felicidades! Ha publicado correctamente una aplicación de varios contenedores en Azure Container Apps y ha comprobado la comunicación entre contenedores y el uso de Azure Redis Cache dentro de la aplicación.
Limpieza de recursos
Para limpiar los recursos que creó durante este tutorial, vaya a Azure Portal y elimine el grupo de recursos que contiene las aplicaciones de contenedor, la memoria caché y el registro de contenedor.
Pasos siguientes
- Obtenga más información sobre Azure Container Apps.
- Obtenga información sobre .NET Aspire, una tecnología que le ayuda a desarrollar aplicaciones y servicios en contenedores complejos que se integran con diversos recursos en Azure. .NET Aspire admite la orquestación durante el tiempo de desarrollo, la integración estandarizada con una variedad de servicios, así como el soporte de herramientas con plantillas para proyectos de Visual Studio.
- También puede usar la interfaz de la línea de comandos (CLI) de Azure para trabajar con las aplicaciones de contenedor. Instale la CLI de Azure y empiece a trabajar con Azure Container Apps utilizando los comandos de la CLI de Azure siguiendo la implementación de Azure Container Apps con el comando az containerapp up.