Ejercicio: Extensión de la plantilla de inicio rápido para implementar un sitio web básico

Ahora que se ha definido el recurso de plantilla de la extensión de script personalizado que configura Nginx en la máquina virtual, vamos a agregarlo a la plantilla de máquina virtual existente y a ejecutarlo.

Este es el aspecto que tendrá la configuración de Nginx.

Explorador web que muestra la configuración de Nginx resultante

Crear la aplicación

Aquí descargaremos la plantilla y la modificaremos.

  1. En Cloud Shell, ejecute curl para descargar la plantilla de GitHub que usamos anteriormente.

    curl https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-linux/azuredeploy.json > azuredeploy.json
    
  2. Abra azuredeploy.json a través del Editor de Cloud Shell.

    code azuredeploy.json
    
  3. En el archivo, busque la sección resources. Agregue el recurso de extensión de script personalizado (creado en la parte anterior) al inicio de esta sección y luego guarde el archivo.

    Incluimos aquí el código a modo de recordatorio.

    {
      "name": "[concat(parameters('vmName'),'/', 'ConfigureNginx')]",
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "apiVersion": "2018-06-01",
      "location": "[parameters('location')]",
      "properties": {
        "publisher": "Microsoft.Azure.Extensions",
        "type": "customScript",
        "typeHandlerVersion": "2.0",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "fileUris": [
            "https://raw.githubusercontent.com/MicrosoftDocs/mslearn-welcome-to-azure/master/configure-nginx.sh"
          ]
        },
        "protectedSettings": {
           "commandToExecute": "./configure-nginx.sh"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
      ]
    },
    

    Fíjese en el carácter de coma (,) del final, que es necesario para separar recursos. El orden en el que se definan los recursos no importa, pero aquí se agregará al inicio por motivos de simplicidad.

  4. En el archivo, en resources busque la sección "Microsoft.Network/networkSecurityGroups". En "securityRules", agregue una nueva regla para abrir el puerto 80. Use la regla siguiente:

     {
       "name":"allow_80",
       "properties": {
       "priority": 101,
       "protocol": "TCP",
       "access": "Allow",
       "direction": "Inbound",
       "sourceAddressPrefix": "Internet",
       "sourcePortRange": "*",
       "destinationAddressPrefix": "*",
       "destinationPortRange": "80"
       }
     },
    
  5. Si se bloquea o quiere contrastar el trabajo, puede descargar el archivo resultante desde GitHub.

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-build-azure-vm-templates/master/linux/azuredeploy.json > azuredeploy.json
    
  6. Ya ha terminado de editar los archivos. Seleccione los puntos suspensivos en la esquina y Guardar.

  7. Para cerrar el editor, haga clic en los puntos suspensivos situados en la esquina y, luego, seleccione Cerrar editor.

Comprobar la plantilla

Aquí validaremos la plantilla desde la CLI.

En la práctica, antes de ejecutar una implementación de prueba podríamos realizar pruebas de detección de errores o ejecutar la plantilla con el visualizador de Azure Resource Manager.

Al igual que hicimos anteriormente, ejecute az deployment group validate para validar la plantilla.

az deployment group validate \
  --resource-group $RESOURCEGROUP \
  --template-file azuredeploy.json \
  --parameters adminUsername=$USERNAME \
  --parameters authenticationType=password \
  --parameters adminPasswordOrKey=$PASSWORD \
  --parameters dnsLabelPrefix=$DNS_LABEL_PREFIX

Observe que esta vez usamos el argumento --template-file y no --template-uri, puesto que estamos haciendo referencia a un archivo local.

Si ve errores, vuelva a la parte anterior o compare su código con la implementación de referencia.

Implementar la plantilla

Aquí ejecutaremos un comando similar al que ejecutamos anteriormente para implementar la plantilla. Como no hemos modificado ningún recurso existente (la máquina virtual, la configuración de red o la cuenta de almacenamiento), Resource Manager no realiza ninguna acción en esos recursos. Solamente aplicará el recurso que acabamos de agregar, que ejecuta la extensión de script personalizado que instala Nginx en la máquina virtual.

Ejecute az deployment group create para actualizar la implementación.

az deployment group create \
  --name MyDeployment \
  --resource-group $RESOURCEGROUP \
  --template-file azuredeploy.json \
  --parameters adminUsername=$USERNAME \
  --parameters authenticationType=password \
  --parameters adminPasswordOrKey=$PASSWORD \
  --parameters dnsLabelPrefix=$DNS_LABEL_PREFIX

De nuevo, fíjese en que esta vez usamos el argumento --template-file, porque estamos haciendo referencia a un archivo local.

El comando tarda unos minutos en completarse. Veremos un gran bloque de JSON como salida, en el que se describe la implementación.

Comprobar la implementación

La implementación se ha realizado correctamente, así que vamos a ver la configuración real resultante.

  1. Ejecute az vm show para obtener la dirección IP de la máquina virtual y almacene el resultado en una variable de Bash.

    IPADDRESS=$(az vm show \
      --name simpleLinuxVM \
      --resource-group $RESOURCEGROUP \
      --show-details \
      --query [publicIps] \
      --output tsv)
    
  2. Ejecute curl para acceder al servidor web.

    curl $IPADDRESS
    

    Veremos esto.

    <html><body><h2>Welcome to Azure! My name is simpleLinuxVM.</h2></body></html>
    
  3. En otra pestaña del explorador, vaya a su sitio web.

    Primero, imprima la dirección IP.

    echo $IPADDRESS
    
  4. En otra pestaña del explorador, vaya a la dirección IP que aparece. Verá algo parecido al siguiente mensaje:

    Explorador web que muestra la configuración de Nginx resultante

¡Bien hecho! Al usar el recurso de extensión de script personalizado, podrá ampliar la implementación para llevar a cabo más cosas.

Ahora que hemos definido el recurso de plantilla de la extensión de script personalizado que configura IIS en la máquina virtual, vamos a agregarlo a la plantilla de máquina virtual existente y a ejecutarlo.

Crear la aplicación

Aquí descargaremos la plantilla y la modificaremos.

  1. En Cloud Shell, ejecute curl para descargar la plantilla de GitHub que usamos anteriormente.

    curl https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.json > azuredeploy.json
    
  2. Abra azuredeploy.json a través del Editor de Cloud Shell.

    code azuredeploy.json
    
  3. En el archivo, busque la sección resources. Agregue el recurso de extensión de script personalizado que ha creado en la parte anterior al inicio de esta sección.

    Aquí se incluye el código a modo de recordatorio.

    {
      "name": "[concat(parameters('vmName'),'/', 'ConfigureIIS')]",
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "apiVersion": "2018-06-01",
      "location": "[parameters('location')]",
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.9",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "fileUris": [
            "https://raw.githubusercontent.com/MicrosoftDocs/mslearn-welcome-to-azure/master/configure-iis.ps1"
          ]
        },
        "protectedSettings": {
           "commandToExecute": "powershell -ExecutionPolicy Unrestricted -File configure-iis.ps1"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
      ]
    },
    

    Fíjese en el carácter de coma (,) del final, que es necesario para separar recursos. El orden en el que se definan los recursos no importa, pero aquí se agregará al inicio por motivos de simplicidad.

  4. En el archivo, busque securityRules en la sección resources. Agregue una sección para abrir el puerto 80.

          {
            "name": "allow_80",
            "properties": {
              "priority": 101,
              "access": "Allow",
              "direction": "Inbound",
              "destinationPortRange": "80",
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "sourceAddressPrefix": "Internet",
              "destinationAddressPrefix": "*"
            }
          }    
    
  5. Si se bloquea o quiere contrastar el trabajo, puede descargar el archivo resultante desde GitHub.

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-build-azure-vm-templates/master/windows/azuredeploy.json > azuredeploy.json
    
  6. Ya ha terminado de editar los archivos. Seleccione los puntos suspensivos en la esquina y Guardar.

  7. Para cerrar el editor, haga clic en los puntos suspensivos situados en la esquina y, luego, seleccione Cerrar editor.

Comprobar la plantilla

Aquí validaremos la plantilla desde la CLI.

En la práctica, antes de ejecutar una implementación de prueba podríamos realizar pruebas de detección de errores o ejecutar la plantilla con el visualizador de Azure Resource Manager.

Al igual que hicimos anteriormente, ejecute az deployment group validate para validar la plantilla.

az deployment group validate \
  --resource-group $RESOURCEGROUP \
  --template-file azuredeploy.json \
  --parameters adminUsername=$USERNAME \
  --parameters adminPassword=$PASSWORD \
  --parameters dnsLabelPrefix=$DNS_LABEL_PREFIX

Observe que esta vez usamos el argumento --template-file y no --template-uri, puesto que estamos haciendo referencia a un archivo local.

Si ve errores, vuelva a la parte anterior o compare su código con la implementación de referencia.

Implementar la plantilla

Aquí ejecutaremos un comando similar al que ejecutamos anteriormente para implementar la plantilla. Como no hemos modificado ningún recurso existente (la máquina virtual, la configuración de red o la cuenta de almacenamiento), Resource Manager no realiza ninguna acción en esos recursos. Solamente aplicará el recurso que acabamos de agregar, que ejecuta la extensión de script personalizado que instala IIS en la máquina virtual.

Ejecute az deployment group create para actualizar la implementación.

az deployment group create \
  --name MyDeployment \
  --resource-group $RESOURCEGROUP \
  --template-file azuredeploy.json \
  --parameters adminUsername=$USERNAME \
  --parameters adminPassword=$PASSWORD \
  --parameters dnsLabelPrefix=$DNS_LABEL_PREFIX

De nuevo, fíjese en que esta vez usamos el argumento --template-file, porque estamos haciendo referencia a un archivo local.

El comando tarda unos minutos en completarse. Veremos un gran bloque de JSON como salida, en el que se describe la implementación.

Comprobar la implementación

La implementación se ha realizado correctamente, así que vamos a ver la configuración real resultante.

  1. Ejecute az vm show para obtener la dirección IP de la máquina virtual y almacene el resultado en una variable de Bash.

    IPADDRESS=$(az vm show \
      --name simple-vm \
      --resource-group $RESOURCEGROUP \
      --show-details \
      --query [publicIps] \
      --output tsv)
    
  2. Ejecute curl para acceder al servidor web.

    curl $IPADDRESS
    

    Veremos esto.

    <html><body><h2>Welcome to Azure! My name is simple-vm.</h2></body></html>
    
  3. En otra pestaña del explorador, vaya a su sitio web.

    Primero, imprima la dirección IP.

    echo $IPADDRESS
    

    En otra pestaña del explorador, vaya a la dirección IP que aparece. Veremos esto.

    Captura de pantalla de un explorador web que muestra el mensaje de bienvenida a Azure.

¡Bien hecho! Al usar el recurso de extensión de script personalizado, podrá ampliar la implementación para llevar a cabo más cosas.