Ejercicio: configurar, implementar y ejecutar la aplicación en Azure

Completado

Ahora es el momento de ejecutar la aplicación en Azure. Es necesario crear una aplicación de Azure App Service, configurarla con una identidad administrada y la configuración del almacén, e implementar el código.

Creación del plan de App Service y la aplicación

La creación de una aplicación de App Service es un proceso de dos pasos: En primer lugar cree el plan y, luego, la aplicación.

El nombre del plan solo debe ser único dentro de la suscripción, por lo que puede usar el mismo nombre: keyvault-exercise-plan. Sin embargo, el nombre de la aplicación debe ser único globalmente, así que elija el suyo propio.

  1. En Azure Cloud Shell, ejecute el comando siguiente para crear un plan de App Service.

    az appservice plan create \
        --name keyvault-exercise-plan \
        --sku FREE \
        --location centralus \
        --resource-group "<rgn>[sandbox resource group name]</rgn>"
    
  2. Después, para crear la aplicación web que usa el plan de App Service que ha creado, ejecute el comando siguiente. Asegúrese de reemplazar <your-unique-app-name> por el nombre de la aplicación en el parámetro --name.

    az webapp create \
        --plan keyvault-exercise-plan \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
    az webapp create \
        --plan keyvault-exercise-plan \
        --runtime "node|16LTS" \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    

Incorporación de la configuración a la aplicación

Para realizar la implementación en Azure, siga el procedimiento recomendado de App Service para colocar la configuración VaultName en una configuración de aplicación en lugar de un archivo de configuración. Para crear la configuración de la aplicación, ejecute este comando. Asegúrese de reemplazar <your-unique-app-name> por el nombre de la aplicación en el parámetro --name y <your-unique-vault-name> por el nombre del almacén en el parámetro --settings.

az webapp config appsettings set \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name> \
    --settings 'VaultName=<your-unique-vault-name>'

Para realizar la implementación en Azure, siga el procedimiento recomendado de App Service para colocar la configuración VaultName en una configuración de aplicación en lugar de un archivo de configuración. También establece el valor SCM_DO_BUILD_DURING_DEPLOYMENT en true para que App Service restaure los paquetes de la aplicación en el servidor y cree la configuración necesaria para ejecutar la aplicación. Para crear la configuración de la aplicación, ejecute este comando. Asegúrese de reemplazar <your-unique-app-name> por el nombre de la aplicación en el parámetro --name y <your-unique-vault-name> por el nombre del almacén en el parámetro --settings.

az webapp config appsettings set \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name> \
    --settings 'VaultName=<your-unique-vault-name>' 'SCM_DO_BUILD_DURING_DEPLOYMENT=true'

Habilitación de una entidad administrada

La habilitación de una identidad administrada en una aplicación es una respuesta ocurrente. Para habilitarla en la aplicación, ejecute el siguiente comando. Asegúrese de reemplazar <your-unique-app-name> por el nombre de la aplicación en el parámetro --name.

az webapp identity assign \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name>

En la salida JSON resultante, copie el valor principalId. PrincipalId es el identificador único de la nueva identidad de la aplicación en Microsoft Entra ID y la usará en el paso siguiente.

Concesión de acceso al almacén

El último paso antes de implementar es asignar permisos de Key Vault a la identidad administrada de la aplicación. Asegúrese de reemplazar ambos <your-unique-vault-name> por el nombre del valor en el parámetro --name y escriba el valor principalId que ha copiado en el paso anterior como el valor de object-id en el siguiente comando. Para establecer el acceso Get y List, ejecute este comando.

az keyvault set-policy \
    --secret-permissions get list \
    --name <your-unique-vault-name> \
    --object-id <your-managed-identity-principleid>

Implementación y prueba de la aplicación

  1. ¡Toda la configuración está establecida y lista para implementarse! Los siguientes comandos publican el sitio en la carpeta pub, lo comprimen en site.zip e implementan el archivo ZIP en App Service. Asegúrese de reemplazar <your-unique-app-name> por el nombre de la aplicación en el parámetro --name.

    Nota:

    Deberá usar cd para cambiar al directorio KeyVaultDemoApp si no lo ha hecho ya.

    dotnet publish -o pub
    zip -j site.zip pub/*
    
    az webapp deployment source config-zip \
        --src site.zip \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
  1. Toda la configuración está establecida y lista para implementarse. Los comandos siguientes comprimirán la aplicación en site.zip e implementarán en App Service. Excluimos node_modules del archivo ZIP dado que App Service los restaura automáticamente cuando se realice la implementación. Asegúrese de reemplazar <your-unique-app-name> por el nombre de la aplicación en el parámetro --name.

    Nota:

    Deberá usar cd para cambiar al directorio KeyVaultDemoApp si no lo ha hecho ya.

    zip site.zip * -x node_modules/
    
    az webapp deployment source config-zip \
        --src site.zip \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
  1. La implementación puede tardar un minuto o dos en completarse. Después de obtener un resultado que indique que el sitio implementado, abra https://<your-unique-app-name>.azurewebsites.net/api/SecretTest en un explorador. La aplicación tarda unos instantes en iniciarse por primera vez en el servidor, pero cuando lo haga, verá el valor del secreto, reindeer_flotilla.

La aplicación está terminada e implementada.