Ejercicio: Adición de recursos a una pila de implementación

Completado

Usted está en sprint 3 para la nueva aplicación de depósitos. Recientemente, el equipo de depósitos solicitó cambios en algunos de los servicios de Azure en uso. También solicitó la creación de otros servicios necesarios para admitir la aplicación.

En este ejercicio, creará una pila de implementación con ámbito en un grupo de recursos que haga referencia a un archivo de Bicep. El archivo define un plan de App Service, un servicio de aplicaciones y una base de datos de Azure SQL. A continuación, modifique la SKU del plan de App Service y actualice la pila de implementación. Por último, agregue un área de trabajo de Log Analytics existente y una nueva instancia de Application Insights para admitir la supervisión de la aplicación.

Durante el proceso, hará lo siguiente:

  • Creación de un archivo de Bicep que defina la arquitectura inicial
  • Cree una pila de implementación con ámbito en un grupo de recursos mediante el archivo de Bicep.
  • Modificación de las propiedades de un recurso administrado existente
  • Actualización del archivo de Bicep para incluir un área de trabajo de Log Analytics existente y una nueva instancia de Application Insights
  • Actualización de la pila de implementación para implementar los recursos administrados
  • Valide los recursos administrados de la pila de implementación.

En este ejercicio se usa la extensión de Bicep para Visual Studio Code. Asegúrese de instalar esta extensión en Visual Studio Code.

Creación del archivo de Bicep

Nuestro primer paso es crear un archivo de Bicep que defina los recursos que usaremos con la pila de implementación.

  1. Abra Visual Studio Code.

  2. Cree un archivo con el nombre main.bicep.

  3. Guarde el archivo vacío para que Visual Studio Code cargue las herramientas de Bicep.

    Puede seleccionar Archivo>Guardar como o Ctrl+S en Windows (⌘+S en macOS). Asegúrese de recordar dónde guardó el archivo. Por ejemplo, podría crear una carpeta plantillas en la que guardar el fichero.

  4. Agrega el código de Bicep siguiente al archivo. Implementará la plantilla pronto.

    // Parameters
    @description('The location for all resources.')
    param location string = 'eastus'
    
    @description('The name of the SQL database.')
    param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'
    
    @description('The password of the admin user.')
    param sqlServerAdminUserName string
    
    @description('The name of the admin user.')
    @secure()
    param sqlServerAdminPassword string
    
    @description('The name of the SQL server.')
    param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the web application.')
    param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'
    
    // Variables
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
        capacity: 1
      }
    }
    
    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id  
      }
    }
    
    // Resource - SQL Server
    resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdminUserName
        administratorLoginPassword: sqlServerAdminPassword
      }
    }
    
    // Resource - SQL Database
    resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: {
        name: 'Standard'
        tier: 'Standard'
      }
    }
    

    Tenga en cuenta que va a usar expresiones que incluyen la interpolación de cadenas y la función uniqueString() para definir los valores de parámetro predeterminados. Alguien que implemente esta plantilla puede invalidar los valores de parámetro predeterminados especificando los valores en el momento de la implementación, pero no puede invalidar los valores de variable.

    Observe también que va a usar una variable para el nombre del plan de App Service, pero que usará parámetros para los demás nombres. Las cuentas de almacenamiento y las aplicaciones de App Service necesitan nombres globalmente únicos, pero los nombres de planes de App Service solo deben ser únicos dentro de su grupo de recursos. Esta diferencia significa que no pasa nada por usar el mismo nombre de plan de App Service en distintas implementaciones, siempre y cuando todas las implementaciones estén en grupos de recursos diferentes.

  5. Guarde los cambios en el archivo.

Creación de la pila de implementación e implementación de los recursos en Azure

Para implementar esta plantilla en Azure, debe iniciar sesión en la cuenta de Azure desde el terminal de Visual Studio Code. Asegúrese de que ha instalado las herramientas de la CLI de Azure.

  1. En el menú Terminal, seleccione Nuevo terminal. Normalmente, la ventana de terminal se abre en la mitad inferior de la pantalla.

  2. Si el shell que se muestra en el lado derecho de la ventana de terminal es Bash, el shell correcto está abierto y puede ir a la sección siguiente.

    Captura de pantalla de la ventana de terminal de Visual Studio Code, en la que se muestra la opción bash.

  3. Si apareciera un shell distinto de Bash, seleccione la flecha de la lista desplegable del shell y, a continuación, seleccione Azure Cloud Shell (Bash).

    Captura de pantalla de la ventana de terminal de Visual Studio Code, en la que se muestra la lista desplegable de shell de terminal y la selección de Git Bash (valor predeterminado).

  4. En la lista de shells de terminal, seleccione Bash.

    Captura de pantalla de la ventana del terminal de Visual Studio Code, con el terminal de Bash seleccionado.

  5. En el terminal, vaya al directorio donde ha guardado la plantilla. Por ejemplo, si ha guardado la plantilla en la carpeta templates, puede usar este comando:

    cd templates
    

Instalación de Bicep

Ejecute el comando siguiente para asegurarse de que tiene la versión más reciente de Bicep:

az bicep install && az bicep upgrade

Inicio de sesión en Azure mediante la CLI de Azure

  1. En el terminal de Visual Studio Code, inicie sesión en Azure mediante la ejecución del siguiente comando:

    az login
    
  2. En el explorador que se abre, inicie sesión en su cuenta de Azure.

    En el terminal de Visual Studio Code se muestra una lista de las suscripciones asociadas a esta cuenta.

  3. En la lista, busque la suscripción que desea usar para este ejercicio.

    Si ha perdido la lista del inicio de sesión, puede usar el siguiente fragmento de código para enumerar de nuevo las suscripciones.

    az account list --output table
    
  4. Establezca la suscripción predeterminada para todos los comandos de la CLI de Azure que ejecute en esta sesión.

    az account set --subscription "Your Subscription Name or ID"
    

Crear un grupo de recursos

Es necesario crear un grupo de recursos para la pila de implementación y los recursos administrados. Para crear un grupo de recursos, ejecute el siguiente comando desde el terminal en Visual Studio Code.

az group create \
    --name rg-depositsApplication \
    --location eastus

Para implementar esta plantilla en Azure, inicie sesión en la cuenta de Azure desde el terminal de Visual Studio Code. Asegúrese de que ha instalado Azure PowerShell.

  1. En el menú Terminal, seleccione Nuevo terminal. Normalmente, la ventana de terminal se abre en la mitad inferior de la pantalla.

  2. Si el shell que se muestra en el lado derecho de la ventana de terminal es powershell o pwsh, el shell correcto está abierto y puede ir a la sección siguiente.

    Captura de pantalla de la ventana de terminal de Visual Studio Code, en la que se muestra la opción pwsh en la lista desplegable de shell.

  3. Si apareciera un shell distinto de powershell o pwsh, seleccione la flecha de la lista desplegable del shell y, a continuación, seleccione PowerShell.

    Captura de pantalla de la ventana del terminal de Visual Studio Code, en la que se muestra la lista desplegable del shell del terminal y PowerShell seleccionado.

  4. En la lista de shells de terminal, seleccione powershell o pwsh.

    Captura de pantalla de la ventana del terminal de Visual Studio Code con el terminal de PowerShell seleccionado.

  5. En el terminal, vaya al directorio donde ha guardado la plantilla. Por ejemplo, si ha guardado la plantilla en la carpeta templates, puede usar este comando:

    Set-Location -Path templates
    

Instalación de la CLI de Bicep

Para usar Bicep desde Azure PowerShell, instale la CLI de Bicep.

Inicio de sesión en Azure mediante Azure PowerShell

  1. En el terminal de Visual Studio Code, inicie sesión en Azure mediante la ejecución del siguiente comando:

    Connect-AzAccount
    
  2. En el explorador que se abre, inicie sesión en su cuenta de Azure.

  3. Para obtener el identificador de la suscripción que desea usar para este ejercicio, ejecute el siguiente comando:

    Get-AzSubscription
    

    El identificador de la suscripción es la segunda columna. Copie la segunda columna. Es similar a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

  4. Establezca la suscripción predeterminada para todos los comandos de Azure PowerShell que ejecute en esta sesión.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Crear un grupo de recursos

Es necesario crear un grupo de recursos para la pila de implementación y los recursos administrados. Para crear un grupo de recursos, ejecute el siguiente comando desde el terminal en Visual Studio Code.

New-AzResourceGroup `
    -Name rg-depositsApplication `
    -Location eastus

Creación del script de implementación

A continuación, es necesario crear la pila de implementación en el ámbito del grupo de recursos creado recientemente. Para crear la pila de implementación, ejecute el siguiente comando desde el terminal en Visual Studio Code.

  1. Para crear la pila de implementación, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Le pide que escriba un valor para sqlServerAdminUserName. Cree un nombre para el administrador de SQL Server, seguido de "Entrar".

    Captura de pantalla que muestra la línea de comandos de la CLI de Azure que le pide que escriba un nombre de usuario de administrador de SQL Server.

  3. Le pide que escriba un valor para sqlServerAdminPassword. Cree una contraseña compleja para el administrador de SQL Server, seguida de "Entrar".

    Captura de pantalla que muestra la línea de comandos de la CLI de Azure que le pide que escriba una contraseña de administrador de SQL Server.

  4. Espere a que la implementación se complete antes de continuar con el paso siguiente.

  1. Para crear la pila de implementación, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    New-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode None
    
  2. Le pide que escriba un valor para sqlServerAdminUserName. Cree un nombre para el administrador de SQL Server, seguido de "Entrar".

    Captura de pantalla que muestra la línea de comandos de Azure PowerShell que le pide que escriba un nombre de usuario de administrador de SQL Server.

  3. Le pide que escriba un valor para sqlServerAdminPassword. Cree una contraseña compleja para el administrador de SQL Server, seguida de "Entrar".

    Captura de pantalla que muestra la línea de comandos de Azure PowerShell que le pide que escriba una contraseña de administrador de SQL Server.

  4. Espere a que la implementación se complete antes de continuar con el paso siguiente.

Modificación del archivo de Bicep para agregar el área de trabajo de Log Analytics existente y una nueva instancia de Application Insights

  1. En Visual Studio Code, abra el archivo main.bicep.

  2. Agregue el código resaltado a la sección de variables del archivo:

    // Variables
    @description('The name of the Application Insights instance.')
    var applicationInsightsName = 'appinsights-deposits'
    
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    @description('The name of the Log Analytics Workspace.')
    var logAnalyticsWorkspaceName = 'log-deposits'
    
  3. Agregue el siguiente código al final del archivo:

    // Resource - Log Analytics Workspace
    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
      name: logAnalyticsWorkspaceName
      location: location
      properties: {
        retentionInDays: 30
        sku: {
          name: 'PerGB2018'
        }
      }
    }
    
    // Resource - Application Insights
    resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
      name: applicationInsightsName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
        WorkspaceResourceId: logAnalyticsWorkspace.id
      }
    }
    
  4. Guarde los cambios en el archivo.

Modificación del archivo de Bicep para modificar el plan de App Service y App Service

  1. En Visual Studio Code, abra el archivo main.bicep.

  2. Cambie el nombre de la SKU del plan de App Service de F1 a S1:

    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'S1'
        capacity: 1
      }
    }
    
  3. Agregue el código resaltado para conectarse a la instancia de Application Insights:

    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsights.properties.InstrumentationKey
            }     
          ]
        }    
      }
    }
    
  4. Guarde los cambios en el archivo.

Actualización de pila de implementación

Con el archivo Bicep modificado, queremos actualizar la pila de implementación para que se implementen los cambios realizados en los recursos del archivo Bicep.

  1. Para crear la pila de implementación, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Recibirá un mensaje que indica que la pila ya existe en la suscripción actual. Si el valor de la acción en el parámetro no administrado ha cambiado, la advertencia le avisa de los nuevos valores. Presione y, seguido de "Entrar".

    Captura de pantalla que muestra la línea de comandos de la CLI de Azure que indica que la pila de implementación ya existe.

  3. Le pide que escriba un valor para sqlServerAdminUserName. Cree un nombre para el administrador de SQL Server, seguido de "Entrar".

    Captura de pantalla que muestra la línea de comandos de la CLI de Azure que le pide que escriba un nombre de usuario de administrador de SQL Server.

  4. Le pide que escriba un valor para sqlServerAdminPassword. Cree una contraseña compleja para el administrador de SQL Server, seguida de "Entrar".

    Captura de pantalla que muestra la línea de comandos de la CLI de Azure que le pide que escriba una contraseña de administrador de SQL Server.

  5. Espere a que la implementación se complete antes de continuar con el paso siguiente.

Con el archivo Bicep modificado, queremos actualizar la pila de implementación para que se implementen los cambios realizados en el plan de App Service.

  1. Para crear la pila de implementación, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    Set-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode none
    
  2. Le pide que escriba un valor para sqlServerAdminUserName. Cree un nombre para el administrador de SQL Server, seguido de "Entrar".

    Captura de pantalla que muestra la línea de comandos de Azure PowerShell que le pide que escriba un nombre de usuario de administrador de SQL Server.

  3. Le pide que escriba un valor para sqlServerAdminPassword. Cree una contraseña compleja para el administrador de SQL Server, seguida de "Entrar".

    Captura de pantalla que muestra la línea de comandos de Azure PowerShell que le pide que escriba una contraseña de administrador de SQL Server.

  4. Espere a que la implementación se complete antes de continuar con el paso siguiente.

Comprobación de la actualización de la pila de implementación y los recursos administrados

Una vez completada la actualización, queremos validar que la SKU del plan de App Service se actualiza y que la pila de implementación administra el área de trabajo de Log Analytics existente y la nueva instancia de Application Insights.

  1. Para ver la configuración del plan de App Service, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    az appservice plan show \
        --name plan-deposits
        --resource-group rg-depositsApplication
    
  2. Observe la sección de SKU de la salida. El plan de App Service ahora está en la SKU de S1. Debe ser similar a la siguiente salida:

    "sku": {
        "capacity": 1,
        "family": "S",
        "name": "S1",
        "size": "S1",
        "tier": "Standard"
    },
    
  3. Para ver la configuración de la pila de implementación, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    az stack group show \
        --resource-group rg-depositsApplication \
        --name stack-deposits
    
  4. Observe la sección de recursos de la salida. Ahora vemos el área de trabajo de Log Analytics existente y la nueva instancia de Application Insights en la lista como recursos administrados. El resultado debería parecerse al siguiente:

    "resources": [
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      }
    ],
    
  1. Para ver la configuración del plan de App Service, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    $plan = Get-AzAppServicePlan `
        -ResourceGroupName rg-depositsApplication `
        -Name plan-deposits
    $sku = $plan.Sku
    $sku
    
  2. Fíjese en la salida. El plan de App Service ahora está en la SKU de S1. Debe ser similar al siguiente:

    Name         : S1
    Tier         : Standard
    Size         : S1
    Family       : S
    Capacity     : 1
    
  3. Para ver la configuración de la pila de implementación, ejecute el siguiente comando desde el terminal en Visual Studio Code.

    Get-AzResourceGroupDeploymentStack `
        -ResourceGroupName rg-depositsApplication `
        -Name stack-deposits
    
  4. Observe la sección de recursos de la salida. Ahora vemos el área de trabajo de Log Analytics existente y la nueva instancia de Application Insights en la lista como recursos administrados. El resultado debería parecerse al siguiente:

    Resources                     : /subscriptions/./resourceGroups/rg-depositsApplication/././servers/                        sql-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits