Ejercicio: Implementación condicional de recursos
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
Abra Visual Studio Code.
Cree un archivo con el nombre main.bicep.
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í.
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ámetrossqlServerAdministratorLogin
ysqlServerAdministratorLoginPassword
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.
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'
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 denominadatake()
. 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.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
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 propiedadesstorageEndpoint
ystorageAccountAccessKey
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.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.
En el menú Terminal, seleccione Nuevo terminal. Normalmente, la ventana de terminal se abre en la mitad inferior de la pantalla.
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.
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).
En la lista de shells de terminal, seleccione Bash.
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
En el terminal de Visual Studio Code, inicie sesión en Azure mediante el siguiente comando:
az login
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.
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.
Obtenga los identificadores de la Suscripción de Concierge.
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
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.
En el menú Terminal, seleccione Nuevo terminal. Normalmente, la ventana de terminal se abre en la mitad inferior de la pantalla.
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.
Si apareciera un shell distinto de powershell o pwsh, seleccione la flecha de la lista desplegable del shell y, a continuación, seleccione PowerShell.
En la lista de shells de terminal, seleccione powershell o pwsh.
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
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.
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.
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.
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 aaaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.Get-AzSubscription
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, comoadmin
oroot
. 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.
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.En el panel izquierdo, seleccione Grupos de recursos.
Seleccione
[nombre del grupo de recursos del espacio aislado] .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.Junto a Implementaciones, seleccione 1 Correcto para ver los detalles de la implementación.
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.
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.
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.
Seleccione el servidor lógico (busque el recurso con el tipo SQL Server).
En el campo de búsqueda, escriba Auditoría. En Seguridad, seleccione Auditoría.
Compruebe que la auditoría está habilitada para este servidor lógico.