Ejercicio: Implementación condicional de recursos

Completado

Nota:

La primera vez que active un espacio aislado y acepte los términos, la cuenta de Microsoft se asocia a un nuevo directorio de Azure denominado Espacio aislado de Microsoft Learn. Se le agrega también a una suscripción especial llamada Suscripción de Concierge.

Debe implementar los recursos de su empresa de juguetes en diversos entornos y quiere usar parámetros y condiciones para controlar lo que se implementa en cada entorno.

En este ejercicio, creará un servidor lógico y una base de datos de Azure SQL. Luego, agregará la configuración de auditoría para tener la seguridad de que la auditoría está habilitada, aunque solo querrá habilitarla cuando vaya a realizar la implementación en un entorno de producción. De cara al proceso de auditoría, debe tener una cuenta de almacenamiento, que también se implementará solo cuando se vayan a implementar recursos en un entorno de producción.

Durante el proceso, hará lo siguiente:

  • Creará un archivo de Bicep que defina un servidor lógico con una base de datos.
  • Agregará una cuenta de almacenamiento y la configuración de auditoría de SQL, cada una de las cuales se implementa con una condición.
  • Configurará una infraestructura para el entorno de desarrollo y, luego, comprobará el resultado.
  • Volverá a implementar la infraestructura en el entorno de producción y, luego, examinará los cambios.

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 de una plantilla de Bicep con un servidor lógico y una base de datos

  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). Debe acordarse de dónde ha guardado el archivo. Por ejemplo, podría crear una carpeta templates para guardarlo ahí.

  4. Para definir un servidor lógico y una base de datos, agregue el siguiente contenido al archivo, junto con los parámetros y variables que necesitan estos recursos. Es recomendable que lo escriba usted mismo en lugar de copiarlo y pegarlo, para que pueda ver cómo las herramientas le ayudan a escribir los archivos de Bicep.

    @description('The Azure region into which the resources should be deployed.')
    param location string
    
    @secure()
    @description('The administrator login username for the SQL server.')
    param sqlServerAdministratorLogin string
    
    @secure()
    @description('The administrator login password for the SQL server.')
    param sqlServerAdministratorLoginPassword string
    
    @description('The name and tier of the SQL database SKU.')
    param sqlDatabaseSku object = {
      name: 'Standard'
      tier: 'Standard'
    }
    
    var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
    var sqlDatabaseName = 'TeddyBear'
    
    resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdministratorLogin
        administratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }
    
    resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: sqlDatabaseSku
    }
    

    Tenga en cuenta que todos los parámetros incluyen decoradores @description, lo que ayuda a facilitar el trabajo con ellos. Observe también que los parámetros sqlServerAdministratorLogin y sqlServerAdministratorLoginPassword tienen aplicado el decorador @secure. Esto indica a Bicep que estos valores de parámetro son confidenciales. Azure no imprime valores confidenciales en los registros.

Agregar una cuenta de almacenamiento

En la configuración de auditoría de los servidores lógicos, debe especificar una cuenta de almacenamiento que contenga los datos de auditoría. Actualizará el archivo de Bicep para crear esta cuenta de almacenamiento, pero solo cuando se vaya a habilitar la auditoría.

  1. Debajo de las declaraciones de parámetros, agregue los parámetros siguientes:

    @description('The name of the environment. This must be Development or Production.')
    @allowed([
      'Development'
      'Production'
    ])
    param environmentName string = 'Development'
    
    @description('The name of the audit storage account SKU.')
    param auditStorageAccountSkuName string = 'Standard_LRS'
    
  2. Debajo de las declaraciones de variables, agregue las variables siguientes:

    var auditingEnabled = environmentName == 'Production'
    var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
    

    Observe que va a crear una variable denominada auditingEnabled, que se usará como condición para implementar los recursos de auditoría. Al crear una variable como esta, permite que el código de Bicep se pueda leer de manera más clara y sencilla. Cualquier persona que vea las condiciones de los recursos comprenderá lo que sucede.

    Observe también que la variable auditStorageAccountName usa una función denominada take(). Los nombres de cuenta de almacenamiento tienen una longitud máxima de 24 caracteres, por lo que esta función recorta el final de la cadena para que el nombre sea válido.

  3. En la parte inferior del archivo, debajo de los recursos, agregue la siguiente definición de recurso para la cuenta de almacenamiento:

    resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
      name: auditStorageAccountName
      location: location
      sku: {
        name: auditStorageAccountSkuName
      }
      kind: 'StorageV2'  
    }
    

    Tenga en cuenta que las definiciones de la cuenta de almacenamiento incluyen la palabra clave if, que especifica una condición de implementación.

Adición de la configuración de auditoría

  1. Debajo del recurso de cuenta de almacenamiento que acaba de agregar, agregue lo siguiente:

    resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
      parent: sqlServer
      name: 'default'
      properties: {
        state: 'Enabled'
        storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
        storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
      }
    }
    

    Observe que la definición incluye la misma condición if que la cuenta de almacenamiento. Además, las propiedades storageEndpoint y storageAccountAccessKey usan el operador ternario de signo de interrogación (?) para que sus valores sean siempre válidos. Si no lo hace, Azure Resource Manager evalúa los valores de expresión antes que la condición de implementación de recursos y devuelve un error, ya que no se encuentra la cuenta de almacenamiento.

  2. Guarde los cambios en el archivo.

Comprobación del archivo de Bicep

Una vez completados todos los cambios anteriores, el archivo de Bicep debe tener un aspecto parecido al de este ejemplo:

@description('The Azure region into which the resources should be deployed.')
param location string

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
  name: 'Standard'
  tier: 'Standard'
}

@description('The name of the environment. This must be Development or Production.')
@allowed([
  'Development'
  'Production'
])
param environmentName string = 'Development'

@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'

var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

Si no es así, copie el ejemplo o ajuste la plantilla para que coincida con él.

Implementación de la plantilla de Bicep 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 tiene instalada la CLI de Azure y de que inicia sesión con la misma cuenta que utilizó para activar el espacio aislado.

  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

  1. En el terminal de Visual Studio Code, inicie sesión en Azure mediante el 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. Establezca la suscripción predeterminada para todos los comandos de la CLI de Azure que ejecute en esta sesión.

    az account set --subscription "Concierge Subscription"
    

    Nota:

    Si ha usado más de un espacio aislado recientemente, es posible que en el terminal se muestre más de una instancia de Suscripción de Concierge. En este caso, siga estos dos pasos para establecer una de las suscripciones como la predeterminada. Si el comando anterior se ha realizado correctamente y solo se muestra una Suscripción de Concierge, omita los dos pasos siguientes.

  4. Obtenga los identificadores de la Suscripción de Concierge.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. Establezca la suscripción predeterminada con el identificador de la suscripción. Reemplace {identificador de su suscripción} por el identificador más reciente de la Suscripción de Concierge.

    az account set --subscription {your subscription ID}
    

Establecimiento del grupo de recursos predeterminado

Al usar la CLI de Azure, puede establecer el grupo de recursos predeterminado y omitir el parámetro del resto de los comandos de la CLI de Azure de este ejercicio. Establezca el valor predeterminado en el grupo de recursos que se ha creado de forma automática en el entorno del espacio aislado.

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

Implementación de la plantilla en Azure con la CLI de Azure

En Visual Studio Code, implemente la plantilla de Bicep en Azure con el código siguiente. Observe que está estableciendo explícitamente el parámetro location en westus3.

az deployment group create --template-file main.bicep --parameters location=westus3

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

  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, ejecute el comando siguiente:

    Connect-AzAccount
    

    Se abre un explorador para que pueda iniciar sesión en la cuenta de Azure.

  2. Después de iniciar sesión, en el terminal se muestra una lista de las suscripciones asociadas a esta cuenta.

    Si ha activado el espacio aislado, se muestra una suscripción denominada Suscripción de Concierge. Úsela para el resto del ejercicio.

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

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    Nota:

    Si ha usado más de un espacio aislado recientemente, es posible que en el terminal se muestre más de una instancia de Suscripción de Concierge. En este caso, siga estos dos pasos para establecer una de las suscripciones como la predeterminada. Si el comando anterior se ha realizado correctamente y solo se muestra una Suscripción de Concierge, omita los dos pasos siguientes.

  4. Obtenga el identificador de la suscripción. Al ejecutar el comando siguiente se mostrarán las suscripciones y sus identificadores. Busque Concierge Subscription y copie el identificador de la segunda columna. Tiene un aspecto similar a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  5. Cambie la suscripción activa a la Suscripción de Concierge. Asegúrese de reemplazar {identificador de la suscripción} por el que ha copiado.

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

Establecimiento del grupo de recursos predeterminado

Puede establecer el grupo de recursos predeterminado y omitir el parámetro del resto de los comandos de Azure PowerShell de este ejercicio. Establezca este valor predeterminado en el grupo de recursos que se ha creado de forma automática en el entorno del espacio aislado.

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

Implementación de la plantilla en Azure mediante Azure PowerShell

En el terminal de Visual Studio Code, implemente la plantilla en Azure mediante el siguiente comando de Azure PowerShell. Este proceso puede tardar un par de minutos en finalizar pero, cuando lo haga, tendrá una implementación correcta.

New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3

Al ejecutar la implementación, se le pedirá que escriba los valores de los parámetros sqlServerAdministratorLogin y sqlServerAdministratorLoginPassword.

Sugerencia

Cuando especifique los parámetros seguros, los valores que elija deben seguir determinadas reglas:

  • sqlServerAdministratorLogin no debe ser un nombre de inicio de sesión fácil de adivinar, como admin o root. Solo puede contener caracteres alfanuméricos y debe comenzar con una letra.
  • sqlServerAdministratorLoginPassword debe tener al menos ocho caracteres e incluir letras minúsculas, letras mayúsculas, números y símbolos. Para más información sobre la complejidad de la contraseña, consulte la directiva de contraseñas de SQL Azure.

Si los valores de los parámetros no cumplen los requisitos, Azure SQL no implementará el servidor lógico.

Además, asegúrese de anotar la información de inicio de sesión y contraseña que escriba. Los volverá a usar en pronto.

Dado que no ha especificado un valor para el parámetro environmentName, se usa el valor predeterminado de Development.

Espere a que finalice la implementación. Si se produce un error en la implementación con un mensaje que indica que una ubicación no acepta la creación de nuevos servidores de Windows Azure SQL Database, seleccione otra región como eastus o eastus2.

Comprobación de la implementación

Use Azure Portal para inspeccionar los recursos que implemente y examinar los resultados de cada implementación.

  1. Vaya a Azure Portal y haga lo siguiente para confirmar que se encuentra en la suscripción de espacio aislado:

    a. Seleccione su avatar en la esquina superior derecha.
    b. Seleccione Cambiar directorio. En la lista, seleccione el directorio Espacio aislado de Microsoft Learn.

  2. En el panel izquierdo, seleccione Grupos de recursos.

  3. Seleccione [nombre del grupo de recursos del espacio aislado].

  4. En la sección Información general, verá que esa implementación se ha realizado correctamente: También puede ver que se implementan un servidor lógico y una base de datos SQL, pero no la cuenta de almacenamiento para la auditoría.

    Nota:

    La cuenta de almacenamiento con un nombre que empieza por cloudshell no está relacionada con la implementación y se creó mediante el espacio aislado de Learn.

    Captura de pantalla del panel de información general del grupo de recursos en Azure Portal, con una sección que muestra una implementación correcta.

  5. Junto a Implementaciones, seleccione 1 Correcto para ver los detalles de la implementación.

    Captura de pantalla del panel de información general del grupo de recursos en Azure Portal, con detalles adicionales de la implementación correcta.

  6. Seleccione la implementación llamada main para ver qué recursos se han implementado; después, seleccione Detalles de la implementación para expandirla.

    En este caso, se implementan un servidor lógico y una base de datos SQL. Tenga en cuenta que la cuenta de almacenamiento y la configuración de auditoría no están en la lista de recursos.

    Captura de pantalla del panel de información general del grupo de recursos en Azure Portal correspondiente a la implementación específica, donde se muestran un servidor lógico y un recurso de base de datos.

  7. Deje la página abierta en el explorador. Tendrá que volver a comprobar las implementaciones posteriormente.

Nueva implementación en el entorno de producción

En la implementación anterior, se usó el valor predeterminado del parámetro environmentName, lo que significaba que estaba establecido en Development.

Ahora establecerá explícitamente el valor del parámetro en Production. Al realizar este cambio, espera que se implemente la cuenta de almacenamiento para el proceso de auditoría y que se habilite la auditoría en el servidor lógico.

Implementación de la plantilla para el entorno de producción

En el terminal de Visual Studio Code, implemente la plantilla de Bicep en Azure mediante el código siguiente:

az deployment group create --template-file main.bicep --parameters environmentName=Production location=westus3

En el terminal de Visual Studio Code, implemente la plantilla en Azure mediante el siguiente comando de Azure PowerShell:

New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3

Precaución

Asegúrese de usar la misma información de inicio de sesión y contraseña que usó anteriormente o la implementación no finalizará correctamente.

Al cabo de uno o dos minutos, la implementación finalizará correctamente.

Comprobación de la nueva implementación

Para realizar este ejercicio, compruebe que la nueva implementación ha finalizado correctamente y que la auditoría se ha habilitado.

  1. Vuelva a Azure Portal y vaya al grupo de recursos. Si ya tiene abierto el grupo de recursos, seleccione Actualizar.

    Debería ver que se ha implementado una cuenta de almacenamiento adicional para la auditoría.

    Captura de pantalla del panel de información general del grupo de recursos de Azure Portal, que muestra que se ha implementado una cuenta de almacenamiento para la auditoría.

  2. Seleccione el servidor lógico (busque el recurso con el tipo SQL Server).

  3. En el campo de búsqueda, escriba Auditoría. En Seguridad, seleccione Auditoría.

    Captura de pantalla de la interfaz del servidor lógico en Azure Portal, que muestra el campo de búsqueda con Auditoría especificada.

  4. Compruebe que la auditoría está habilitada para este servidor lógico.

    Captura de pantalla de la interfaz del servidor lógico de Azure Portal, que muestra que la configuración de auditoría está habilitada.