Compartir a través de


Tutorial: Compilar e implementar desde el código fuente en Azure Container Apps

En este artículo se muestra cómo compilar e implementar una aplicación en Azure Container Apps desde el código fuente de la máquina en el lenguaje de programación preferido.

En este tutorial, hará lo siguiente:

  • Cree una aplicación web simple.
  • Cree un Dockerfile asociado para la aplicación.
  • Cree una imagen a partir del código compilado e insértela en un registro de contenedor.
  • Use la identidad administrada para acceder de forma segura al registro de contenedor.
  • Implemente el contenedor en Azure Container Apps.
  • Vea la aplicación en un explorador para comprobar la implementación.

Requisitos previos

Para completar este proyecto, necesita los siguientes elementos:

Requisito Instructions
Cuenta de Azure Si no tiene ninguna cuenta, cree una gratuita. Necesita el permiso Colaborador o Propietario en la suscripción de Azure para continuar.

Consulte Asignación de roles de Azure mediante Azure Portal para obtener más información.
CLI de Azure Instale la CLI de Azure o actualice a la última versión. La Azure Developer CLI (comandos azd) está disponible a través de la CLI de Azure.

En función de su elección de lenguaje, es posible que también tenga que instalar el entorno de ejecución, el SDK y otras dependencias adecuados.

Instale el SDK de .NET.

Creación de la aplicación local

En los pasos siguientes se muestran el código y las dependencias necesarios para compilar una aplicación de ejemplo que se va a implementar en Azure Container Apps.

Nota:

Si desea usar otro lenguaje distinto de los enumerados, escriba el siguiente mensaje en el modelo de IA preferido.

Antes de enviar el mensaje, reemplace <LANGUAGE> por el lenguaje que prefiera.

Generate the simplest possible "hello world" web server in idiomatic <LANGUAGE>.

Make sure to include any dependencies required for the application to run locally and in production. 
  1. Cree y ejecute el código fuente.

    Cree un nuevo proyecto de C#.

    dotnet new webapp --name MyAcaDemo --language C#
    

    Cambie a la carpeta MyAcaDemo.

    cd MyAcaDemo
    

    Abra Program.cs en un editor de código y reemplace el contenido por el código siguiente.

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://*:8080");
                });
    }
    

    La implementación de la clase Program con este código crea la base de una aplicación web. A continuación, cree una clase responsable de devolver una página web como respuesta.

    En la misma carpeta, cree un nuevo archivo denominado Startup.cs y escriba el código siguiente.

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }
    
        public void Configure(IApplicationBuilder app)
        {   
            app.UseRouting();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }
    }
    

    Ahora, cuando se realiza una solicitud a la aplicación web, se devuelve el texto "Hola mundo". Para comprobar que el código se está ejecutando correctamente en la máquina local, compile el proyecto en la configuración de versión.

    dotnet build -c Release
    

    A continuación, ejecute la aplicación para comprobar que el código se ha implementado correctamente.

    dotnet run --configuration Release
    

    Una vez que compruebe que la aplicación funciona según lo previsto, puede detener el servidor local y pasar a crear un Dockerfile para que pueda implementar la aplicación en Container Apps.

  2. En la carpeta MyAcaDemo, cree un archivo denominado Dockerfile y agregue el código siguiente.

    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    WORKDIR /src
    COPY . .
    RUN dotnet publish -c Release -o /app/publish
    
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
    WORKDIR /app
    COPY --from=build /app/publish .
    EXPOSE 8080
    ENTRYPOINT ["dotnet", "MyAcaDemo.dll"]
    

    Ahora que tiene el código y un Dockerfile listo, puede implementar la aplicación en Azure Container Apps.

Creación de recursos de Azure

  1. Inicie sesión en Azure desde la CLI con el comando siguiente. Para completar el proceso de autenticación, asegúrese de seguir todas las indicaciones.

    az login
    
  2. Instale o actualice la extensión de Azure Container Apps para la CLI.

    az extension add --name containerapp --upgrade
    

    Nota:

    Si recibe errores sobre los parámetros que faltan al ejecutar comandos az containerapp, asegúrese de tener instalada la última versión de la extensión de Azure Container Apps.

  3. Ahora que la configuración de la CLI de Azure está completa, puede definir un conjunto de variables de entorno.

    Antes de ejecutar el siguiente comando, revise los valores proporcionados.

    La ubicación se configura como Centro de EE. UU., pero puede cambiar a una ubicación más cercana si lo prefiere.

    LOCATION="CentralUS"
    RESOURCE_GROUP="my-demo-group"
    IDENTITY_NAME="my-demo-identity"
    ENVIRONMENT="my-demo-environment"
    REGISTRY_NAME="mydemoregistry$(openssl rand -hex 4)"
    CONTAINER_APP_NAME="my-demo-app"
    

    El comando mydemoregistry$(openssl rand -hex 4) genera una cadena aleatoria que se usará como nombre del registro de contenedor. Los nombres del Registro deben ser únicos globalmente, por lo que esta cadena ayuda a garantizar que los comandos se ejecuten correctamente.

  4. Cree un grupo de recursos para organizar los servicios relacionados con la implementación de la aplicación contenedora.

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --output none
    
  5. Cree una identidad administrada asignada por el usuario y obtenga su identificador con los siguientes comandos.

    En primer lugar, cree la identidad administrada.

    az identity create \
        --name $IDENTITY_NAME \
        --resource-group $RESOURCE_GROUP \
        --output none
    

    Ahora, establezca el identificador de identidad en una variable para su uso posterior.

    IDENTITY_ID=$(az identity show \
      --name $IDENTITY_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id \
      --output tsv)
    
  6. Cree un entorno de Container Apps para hospedar la aplicación mediante el comando siguiente.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --mi-user-assigned $IDENTITY_ID \
        --output none
    
  7. Cree una instancia de Azure Container Registry (ACR) en el grupo de recursos. El registro almacena la imagen de contenedor.

    az acr create \
      --resource-group $RESOURCE_GROUP \
      --name $REGISTRY_NAME \
      --sku Basic \
      --output none
    
  8. Asigne la identidad administrada asignada por el usuario a la instancia del registro de contenedor con el comando siguiente.

    az acr identity assign \
      --identities $IDENTITY_ID \
      --name $REGISTRY_NAME \
      --resource-group $RESOURCE_GROUP \
      --output none
    

Compilación e inserción de la imagen en un registro

Compile e inserte la imagen de contenedor en la instancia del registro de contenedor con el comando siguiente.

az acr build \
    -t $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
    -r $REGISTRY_NAME .

Este comando aplica la etiqueta helloworld a la imagen de contenedor.

Creación de la aplicación de contenedor

Cree la aplicación contenedora con el comando siguiente.

az containerapp create \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT \
  --image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
  --target-port 8080 \
  --ingress external \
  --user-assigned $IDENTITY_ID \
  --registry-identity $IDENTITY_ID \
  --registry-server $REGISTRY_NAME.azurecr.io \
  --query properties.configuration.ingress.fqdn

Este comando agrega el rol acrPull a la identidad administrada asignada por el usuario, por lo que puede extraer imágenes del registro de contenedor.

En la tabla siguiente se describen los parámetros usados por este comando.

Parámetro Valor Descripción
name $CONTAINER_APP_NAME El nombre de la aplicación contenedora.
resource-group $RESOURCE_GROUP El grupo de recursos en el que se implementa la aplicación contenedora.
environment $ENVIRONMENT Entorno en el que se ejecuta la aplicación contenedora.
image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" Imagen de contenedor que se va a implementar, incluido el nombre y la etiqueta del Registro.
target-port 8080 Coincide con el puerto al que escucha la aplicación para las solicitudes.
ingress external Hace que la aplicación contenedora sea accesible desde la red pública de Internet.
user-assigned $IDENTITY_ID Identidad administrada asignada por el usuario para la aplicación contenedora.
registry-identity registry-identity Identidad usada para acceder al registro de contenedor.
registry-server $REGISTRY_NAME.azurecr.io Dirección del servidor del registro de contenedor.
query properties.configuration.ingress.fqdn Filtra la salida a solo el nombre de dominio completo (FQDN) de la aplicación.

Una vez completado este comando, devuelve la dirección URL de la nueva aplicación web.

Comprobación de la implementación

Copie la dirección URL de la aplicación en un explorador web. Una vez iniciada la aplicación contenedora, devuelve Hola mundo..

Dado que es la primera vez que se accede a la aplicación, la aplicación puede tardar unos instantes en devolver una respuesta.

Limpieza de recursos

Si no va a usar los recursos de Azure creados en este tutorial, puede quitarlos con un solo comando. Antes de ejecutar el comando, hay un paso siguiente en esta serie de tutoriales que muestra cómo realizar cambios en el código y actualizar la aplicación en Azure.

Si ha terminado y desea quitar todos los recursos de Azure creados en este tutorial, elimine el grupo de recursos con el comando siguiente.

az group delete --name aca-demo

Sugerencia

¿Tiene problemas? Háganoslo saber en GitHub abriendo una incidencia en el repositorio de Azure Container Apps.

Pasos siguientes

A continuación, continúe para obtener información sobre cómo actualizar la aplicación contenedora que ha creado.