Ejercicio: Creación y uso de un módulo

Completado

Se le ha encargado la tarea de agregar una red de entrega de contenido o CDN al sitio web de su empresa para el lanzamiento de un wombat de juguete. Sin embargo, otros equipos de su empresa le han dicho que no necesitan una CDN. En este ejercicio, creará módulos para el sitio web y la CDN, y agregará los módulos a una plantilla.

Durante el proceso, hará lo siguiente:

  • Agregue un módulo para la aplicación.
  • Cree una plantilla de Bicep que use el módulo.
  • Agregue otro módulo para la CDN.
  • Agregue el módulo de la CDN a la plantilla, a la vez que lo hace opcional.
  • Implemente la plantilla en Azure.
  • Revise el historial 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 de un archivo de Bicep en blanco

  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 guarda el archivo. Por ejemplo, podría crear una carpeta templates para guardarlo ahí.

Creación de un módulo para la aplicación

  1. Cree una nueva carpeta llamada modules en la misma carpeta donde creó el archivo main.bicep. En la carpeta modules, cree un archivo llamado app.bicep. Guarde el archivo.

  2. Agregue el siguiente contenido al archivo app.bicep:

    @description('The Azure region into which the resources should be deployed.')
    param location string
    
    @description('The name of the App Service app.')
    param appServiceAppName string
    
    @description('The name of the App Service plan.')
    param appServicePlanName string
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    
    @description('The default host name of the App Service app.')
    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    Este archivo implementa un plan y una aplicación de Azure App Service. Observe que el módulo es bastante genérico. No incluye ninguna suposición sobre los nombres de los recursos ni la SKU del plan de App Service. Esto facilita la reutilización del módulo para distintas implementaciones.

  3. Guarde los cambios en el archivo.

Adición del módulo a la plantilla de Bicep

Aquí, agregará el módulo de la aplicación a la plantilla de Bicep como punto de partida.

  1. Abra el archivo main.bicep.

  2. Agregue los parámetros y la variable siguientes al archivo:

    @description('The Azure region into which the resources should be deployed.')
    param location string = 'westus3'
    
    @description('The name of the App Service app.')
    param appServiceAppName string = 'toy-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string = 'F1'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    Dado que esta es la plantilla que se va a implementar para los sitios web de juguetes, es un poco más específica. El plan de App Service se define como una variable. El parámetro SKU tiene un valor predeterminado que tiene sentido para el sitio web de lanzamiento del juguete.

    Sugerencia

    Está especificando que el parámetro location debe establecerse en westus3. Normalmente, crearía recursos en la misma ubicación que el grupo de recursos mediante la propiedad resourceGroup().location. Pero cuando trabaja con el espacio aislado Microsoft Learn, debe usar determinadas regiones de Azure que no coincidan con la ubicación del grupo de recursos.

  3. Debajo de los parámetros, cree una línea en blanco. Ahora, escriba la primera línea de la definición del módulo de la aplicación:

    module app 'modules/app.bicep' = {
    

    A medida que escribe, observe que la extensión de Bicep para Visual Studio Code le ayuda a aplicar scaffolding a la declaración del módulo. Al escribir la ruta de acceso al módulo y poner el carácter de igual (=), aparece un menú emergente con varias opciones.

  4. Seleccione Propiedades necesarias en el menú emergente:

    Captura de pantalla de Visual Studio Code que muestra la opción de aplicar scaffolding a un módulo con sus propiedades necesarias.

  5. Complete la declaración del módulo:

    module app 'modules/app.bicep' = {
      name: 'toy-launch-app'
      params: {
        appServiceAppName: appServiceAppName
        appServicePlanName: appServicePlanName
        appServicePlanSkuName: appServicePlanSkuName
        location: location
      }
    }
    
  6. En la parte inferior del archivo, defina una salida:

    @description('The host name to use to access the website.')
    output websiteHostName string = app.outputs.appServiceAppHostName
    
  7. Guarde los cambios en el archivo.

Creación de un módulo para la red de entrega de contenido

  1. En la carpeta modules, cree un archivo llamado cdn.bicep. Guarde el archivo.

  2. Agregue el siguiente contenido al archivo cdn.bicep:

    @description('The host name (address) of the origin server.')
    param originHostName string
    
    @description('The name of the CDN profile.')
    param profileName string = 'cdn-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the CDN endpoint')
    param endpointName string = 'endpoint-${uniqueString(resourceGroup().id)}'
    
    @description('Indicates whether the CDN endpoint requires HTTPS connections.')
    param httpsOnly bool
    
    var originName = 'my-origin'
    
    resource cdnProfile 'Microsoft.Cdn/profiles@2024-02-01' = {
      name: profileName
      location: 'global'
      sku: {
        name: 'Standard_Microsoft'
      }
    }
    
    resource endpoint 'Microsoft.Cdn/profiles/endpoints@2024-02-01' = {
      parent: cdnProfile
      name: endpointName
      location: 'global'
      properties: {
        originHostHeader: originHostName
        isHttpAllowed: !httpsOnly
        isHttpsAllowed: true
        queryStringCachingBehavior: 'IgnoreQueryString'
        contentTypesToCompress: [
          'text/plain'
          'text/html'
          'text/css'
          'application/x-javascript'
          'text/javascript'
        ]
        isCompressionEnabled: true
        origins: [
          {
            name: originName
            properties: {
              hostName: originHostName
            }
          }
        ]
      }
    }
    
    @description('The host name of the CDN endpoint.')
    output endpointHostName string = endpoint.properties.hostName
    

    Este archivo implementa dos recursos: un perfil de CDN y un punto de conexión de CDN.

  3. Guarde los cambios en el archivo.

Adición de los módulos a la plantilla principal de Bicep

  1. Abra el archivo main.bicep.

  2. Debajo del parámetro appServicePlanSkuName, agregue el parámetro siguiente:

    @description('Indicates whether a CDN should be deployed.')
    param deployCdn bool = true
    
  3. Debajo de la definición del módulo app, defina el módulo cdn:

    module cdn 'modules/cdn.bicep' = if (deployCdn) {
      name: 'toy-launch-cdn'
      params: {
        httpsOnly: true
        originHostName: app.outputs.appServiceAppHostName
      }
    }
    

    Observe que el módulo tiene una condición para que se implemente solo cuando el valor del parámetro deployCdn está establecido en true. Además, observe que el parámetro originHostName del módulo está establecido en el valor de la salida appServiceAppHostName del módulo app.

  4. Actualice la salida del nombre de host para que seleccione el nombre de host correcto. Cuando se implementa una CDN, quiere que el nombre de host sea el del punto de conexión de CDN.

    output websiteHostName string = deployCdn ? cdn.outputs.endpointHostName : app.outputs.appServiceAppHostName
    
  5. Guarde los cambios en el archivo.

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

Ejecute el código siguiente desde el terminal en Visual Studio Code para implementar la plantilla de Bicep en Azure. Este proceso puede tardar un par de minutos en completarse; después, verá que la implementación se ha realizado correctamente.

az deployment group create --template-file main.bicep

Aparece el estado Running... en el terminal.

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

Implemente la plantilla en Azure usando el siguiente comando de Azure PowerShell en el terminal. Esto puede tardar un par de minutos en completarse; después, verá que la implementación se ha realizado correctamente.

New-AzResourceGroupDeployment -TemplateFile main.bicep

Revisión del historial de implementación

  1. Vaya a Azure Portal y asegúrese de que está en la suscripción de espacio aislado:

    1. Seleccione el avatar en la esquina superior derecha de la página.
    2. 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 el menú de la izquierda, seleccione Implementaciones.

    Captura de pantalla de Azure Portal que muestra el grupo de recursos, con el elemento de menú Implementaciones resaltado.

    Se enumeran tres implementaciones.

  5. Seleccione la implementación principal y expanda Deployment details (Detalles de implementación).

    Observe que ambos módulos aparecen en la lista y que sus tipos se muestran como Microsoft.Resources/deployments. Los módulos se enumeran dos veces porque también se hace referencia a sus salidas dentro de la plantilla.

    Captura de pantalla de Azure Portal que muestra los detalles de implementación de la implementación principal.

  6. Seleccione las implementaciones toy-launch-cdn y toy-launch-app, y revise los recursos implementados en cada una de ellas. Observe que se corresponden con los recursos definidos en el módulo correspondiente.

Prueba del sitio web

  1. Seleccione la implementación toy-launch-app.

  2. Seleccione Salidas.

    Captura de pantalla de Azure Portal que muestra la implementación, con el elemento de menú Salidas resaltado.

  3. Seleccione el botón Copiar para la salida appServiceAppHostName.

  4. En una nueva pestaña del explorador, intente ir a la dirección que copió en el paso anterior. La dirección debe comenzar con https://.

    Captura de pantalla de la página principal de la aplicación web, con la barra de direcciones mostrando el nombre de host de App Service.

    Aparece la página principal de App Service, en la que se muestra que ha implementado correctamente la aplicación.

  5. Vaya a la implementación principal y seleccione Salidas.

  6. Copie el valor de la salida websiteHostName. Tenga en cuenta que este nombre de host es diferente, ya que es un nombre de host de Azure Content Delivery Network.

  7. En una nueva pestaña del explorador, intente acceder al nombre de host que copió en el paso anterior. Agregue https:// al inicio de la dirección.

    Los puntos de conexión de CDN pueden tardar unos minutos en activarse. Si obtiene el error Página no encontrada, espere unos minutos e intente pegar el vínculo de nuevo. Además, asegúrese de que ha agregado https:// al inicio de la dirección URL para que use HTTPS.

    Cuando el punto de conexión de CDN esté activo, verá la misma página principal de App Service. Esta vez, se ha servido a través del servicio Azure Content Delivery Network, lo que ayuda a mejorar el rendimiento del sitio web.

    Captura de pantalla de la página principal de la aplicación web, con la barra de direcciones mostrando el punto de conexión de CDN.