Tutorial: Instalación de aplicaciones en conjuntos de escalado de máquinas virtuales con Azure PowerShell

Para ejecutar aplicaciones en las instancias de máquinas virtuales (VM) de un conjunto de escalado, primero debe instalar los componentes de la aplicación y los archivos necesarios. En un tutorial anterior, aprendió a crear y usar una imagen de máquina virtual personalizada para implementar las instancias de máquina virtual. Esta imagen personalizada incluía instalaciones y configuraciones manuales de aplicaciones. También puede automatizar la instalación de aplicaciones en un conjunto de escalado después de implementar cada instancia de máquina virtual, o actualizar una aplicación que ya se ejecuta en un conjunto de escalado. En este tutorial, aprenderá a:

  • Instalar automáticamente aplicaciones en un conjunto de escalado
  • Usar la extensión de script personalizado de Azure
  • Actualizar una aplicación en ejecución en un conjunto de escalado

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.

Para iniciar Azure Cloud Shell:

Opción Ejemplo o vínculo
Seleccione Pruébelo en la esquina superior derecha de un bloque de código o de comandos. Solo con seleccionar Pruébelo no se copia automáticamente el código o comando en Cloud Shell. Captura de pantalla que muestra un ejemplo de la opción Pruébelo para Azure Cloud Shell.
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. Botón para iniciar Azure Cloud Shell.
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. Captura de pantalla que muestra el botón de Cloud Shell en Azure Portal

Para usar Azure Cloud Shell:

  1. Inicie Cloud Shell.

  2. Seleccione el botón Copiar en un bloque de código (o bloque de comandos) para copiar el código o comando.

  3. Pegue el código o comando en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.

  4. Seleccione Enter para ejecutar el código o comando.

¿Qué es la extensión de script personalizado de Azure?

La extensión de script personalizado descarga y ejecuta scripts en máquinas virtuales de Azure. Esta extensión es útil para la configuración posterior a la implementación, la instalación de software o cualquier otra tarea de configuración o administración. Los scripts se pueden descargar desde Azure Storage o GitHub, o se pueden proporcionar a Azure Portal en el tiempo de ejecución de la extensión.

La extensión de script personalizado se integra con las plantillas de Azure Resource Manager. También se puede usar con la CLI de Azure, Azure PowerShell, Azure Portal o la API REST. Para obtener más información, consulte Información general de la extensión de script personalizado.

Para ver la extensión de script personalizado en acción, cree un conjunto de escalado que instala el servidor web de IIS y genera el nombre de host de la instancia de máquina virtual del conjunto de escalado. La definición de extensión de script personalizado descarga un script de ejemplo de GitHub, instala los paquetes necesarios y, luego, escribe el nombre de host de la instancia de máquina virtual en una página HTML básica.

Creación de un conjunto de escalado

Cree un grupo de recursos con New-AzResourceGroup. En el ejemplo siguiente se crea un grupo de recursos llamado myResourceGroup en la ubicación Este de EE. UU.:

New-AzResourceGroup -Name myResourceGroup -Location "East US"

Ahora cree un conjunto de escalado de máquinas virtuales con New-AzVmss. Para distribuir el tráfico a las instancias individuales de VM, también se crea un equilibrador de carga. El equilibrador de carga incluye reglas para distribuir el tráfico en el puerto TCP 80. También permite tráfico de escritorio remoto en el puerto TCP 3389 y la comunicación remota de PowerShell en el puerto TCP 5985. Cuando se le solicite, puede establecer sus propias credenciales administrativas para las instancias de máquina virtual del conjunto de escalado:

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -Location "EastUS" `
  -UpgradePolicyMode "Manual" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" 

Se tardan unos minutos en crear y configurar todos los recursos de conjunto de escalado y máquinas virtuales.

Creación de una definición de extensión de script personalizado

Azure PowerShell usa una tabla hash para almacenar el archivo que se va a descargar y el comando que se va a ejecutar. En el ejemplo siguiente, se utiliza un script de ejemplo de GitHub. En primer lugar, cree este objeto de configuración de la siguiente manera:

$customConfig = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

Ahora, aplique la extensión de script personalizado con Add-AzVmssExtension. El objeto de configuración previamente definido se pasa a la extensión. Actualiza la extensión en las instancias de perfil del conjunto de escalado con Update-AzVmss.

# Get information about the scale set
$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"

# Add the Custom Script Extension to install IIS and configure basic website
$vmss = Add-AzVmssExtension `
  -VirtualMachineScaleSet $vmss `
  -Name "customScript" `
  -Publisher "Microsoft.Compute" `
  -Type "CustomScriptExtension" `
  -TypeHandlerVersion 1.9 `
  -Setting $customConfig

# Update the scale set
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Incorporación de la extensión a las instancias existentes del conjunto de escalado

Realiza una actualización manual para aplicar la extensión actualizada a todas las instancias del conjunto de escalado existente. Esta actualización puede tardar un par de minutos en completarse.

Update-AzVmssInstance -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId "*"

Cada instancia de máquina virtual del conjunto de escalado descarga y ejecuta el script de GitHub. En un ejemplo más complejo, se podrían instalar varios componentes y archivos de aplicaciones. Si el conjunto de escalado se escala verticalmente, las nuevas instancias de máquina virtual aplican automáticamente la misma definición de extensión de script personalizado e instalan la aplicación necesaria.

Permitir tráfico a la aplicación

Para permitir el acceso a la aplicación web básica, cree un grupo de seguridad de red con New-AzNetworkSecurityRuleConfig y New-AzNetworkSecurityGroup. Para más información, consulte Redes para conjuntos de escalado de máquinas virtuales de Azure.

#Create a rule to allow traffic over port 80
$nsgFrontendRule = New-AzNetworkSecurityRuleConfig `
  -Name myFrontendNSGRule `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

#Create a network security group and associate it with the rule
$nsgFrontend = New-AzNetworkSecurityGroup `
  -ResourceGroupName  "myResourceGroup" `
  -Location EastUS `
  -Name myFrontendNSG `
  -SecurityRules $nsgFrontendRule

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName  "myResourceGroup" `
  -Name myVnet

$frontendSubnet = $vnet.Subnets[0]

$frontendSubnetConfig = Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $vnet `
  -Name mySubnet `
  -AddressPrefix $frontendSubnet.AddressPrefix `
  -NetworkSecurityGroup $nsgFrontend

Set-AzVirtualNetwork -VirtualNetwork $vnet

Prueba del conjunto de escalado

Para ver el servidor web en acción, obtenga la dirección IP pública del equilibrador de carga con Get-AzPublicIpAddress. En el ejemplo siguiente se muestra la dirección IP que se creó en el grupo de recursos myResourceGroup:

Get-AzPublicIpAddress -ResourceGroupName "myResourceGroup" | Select IpAddress

Escriba la dirección IP pública del equilibrador de carga en un explorador web. El equilibrador de carga distribuye el tráfico a una de las instancias de VM, como se muestra en el ejemplo siguiente:

Página web básica en IIS

Deje el explorador web abierto para que pueda ver una versión actualizada en el paso siguiente.

Cambio de la directiva de actualización

En la sección anterior, para aplicar la aplicación actualizada a todas las instancias del conjunto de escalado, se necesitaba una actualización manual. Para permitir que las actualizaciones se apliquen automáticamente a todas las instancias de conjunto de escalado existentes, actualiza la directiva de actualización de manual a automática. Para obtener más información sobre las directivas de actualización, consulta Directivas de actualización de Virtual Machine Scale Sets.

$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Update-Azvmss `
    -ResourceGroupName "myResourceGroup" `
    -Name "myScaleSet" `
    -UpgradePolicyMode "Automatic" `
    -VirtualMachineScaleSet $vmss

Actualización de la implementación de aplicaciones

A lo largo del ciclo de vida de un conjunto de escalado, puede que deba implementar una versión actualizada de la aplicación. Con la extensión de script personalizado, puede hacer referencia a un script de implementación actualizado y, luego, volver a aplicar la extensión al conjunto de escalado.

Cree una nueva definición de configuración llamada customConfigv2. Esta definición ejecuta una versión v2 actualizada del script de instalación de la aplicación:

$customConfigv2 = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis-v2.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis-v2.ps1"
}

Actualice la configuración de la extensión de script personalizado en las instancias de las máquinas virtuales del conjunto de escalado. La definición de customConfigv2 se usa para aplicar la versión actualizada de la aplicación al conjunto de escalado:

$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"
 
$vmss.VirtualMachineProfile.ExtensionProfile[0].Extensions[0].Settings = $customConfigv2
 
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Dado que el conjunto de escalado ahora usa una directiva de actualización automática, la aplicación actualizada se aplicará automáticamente a las instancias existentes del conjunto de escalado. Actualiza el explorador web para ver la aplicación actualizada. Para ver la versión actualizada, actualice el sitio web en el explorador:

Página web actualizada en IIS

Limpieza de recursos

Para quitar el conjunto de escalado y los recursos adicionales, elimine el grupo de recursos y todos sus recursos con Remove-AzResourceGroup. El parámetro -Force confirma que desea eliminar los recursos sin pedir confirmación adicional. El parámetro -AsJob devuelve el control a la petición de confirmación sin esperar a que finalice la operación.

Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob

Pasos siguientes

En este tutorial, aprendió a instalar y actualizar automáticamente aplicaciones en un conjunto de escalado con Azure PowerShell:

  • Instalar automáticamente aplicaciones en un conjunto de escalado
  • Usar la extensión de script personalizado de Azure
  • Actualizar una aplicación en ejecución en un conjunto de escalado

Vaya al siguiente tutorial para aprender cómo se escala automáticamente el conjunto de escalado.