Tutorial: Instalación de aplicaciones en conjuntos de escalado de máquinas virtuales con Azure PowerShellTutorial: Install applications in virtual machine scale sets with 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.To run applications on virtual machine (VM) instances in a scale set, you first need to install the application components and required files. En un tutorial anterior, aprendió a crear y usar una imagen de máquina virtual personalizada para implementar las instancias de máquina virtual.In a previous tutorial, you learned how to create and use a custom VM image to deploy your VM instances. Esta imagen personalizada incluía instalaciones y configuraciones manuales de aplicaciones.This custom image included manual application installs and configurations. 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.You can also automate the install of applications to a scale set after each VM instance is deployed, or update an application that already runs on a scale set. En este tutorial, aprenderá a:In this tutorial you learn how to:

  • Instalar automáticamente aplicaciones en un conjunto de escaladoAutomatically install applications to your scale set
  • Usar la extensión de script personalizado de AzureUse the Azure Custom Script Extension
  • Actualizar una aplicación en ejecución en un conjunto de escaladoUpdate a running application on a scale set

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don’t have an Azure subscription, create a free account before you begin.

Nota

Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Aún puede usar el módulo de AzureRM que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para más información acerca del nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación del nuevo módulo Az de Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obtener instrucciones sobre la instalación del módulo Az, consulte Instalación de Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Uso de Azure Cloud ShellUse Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell le permite usar bash o PowerShell para trabajar con servicios de Azure.Cloud Shell lets you use either bash or PowerShell to work with Azure services. 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.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Para iniciar Azure Cloud Shell:To launch Azure Cloud Shell:

OpciónOption Ejemplo o vínculoExample/Link
Seleccione Probarlo en la esquina superior derecha de un bloque de código.Select Try It in the upper-right corner of a code block. Solo con seleccionar Probar no se copia automáticamente el código en Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Ejemplo de Probarlo 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.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Iniciar Cloud Shell en una nueva ventanaLaunch Cloud Shell in a new window
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Botón Cloud Shell en Azure Portal

Para ejecutar el código de este artículo en Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Abra Cloud Shell.Open Cloud Shell.
  2. Seleccione el botón Copiar de un bloque de código para copiar el código.Select the Copy button on a code block to copy the code.
  3. Pegue el código en la sesión de Cloud Shell con Ctrl+Mayús+V en Windows y Linux, o Cmd+Mayús+V en macOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Presione ENTRAR para ejecutar el código.Press Enter to run the code.

¿Qué es la extensión de script personalizado de Azure?What is the Azure Custom Script Extension?

La extensión de script personalizado descarga y ejecuta scripts en máquinas virtuales de Azure.The Custom Script Extension downloads and executes scripts on Azure VMs. 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.This extension is useful for post deployment configuration, software installation, or any other configuration / management task. 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.Scripts can be downloaded from Azure storage or GitHub, or provided to the Azure portal at extension run-time.

La extensión de script personalizado se integra con las plantillas de Azure Resource Manager.The Custom Script extension integrates with Azure Resource Manager templates. También se puede usar con la CLI de Azure, Azure PowerShell, Azure Portal o la API REST.It can also be used with the Azure CLI, Azure PowerShell, Azure portal, or the REST API. Para obtener más información, consulte Información general de la extensión de script personalizado.For more information, see the Custom Script Extension overview.

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.To see the Custom Script Extension in action, create a scale set that installs the IIS web server and outputs the hostname of the scale set VM instance. 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.The Custom Script Extension definition downloads a sample script from GitHub, installs the required packages, then writes the VM instance hostname to a basic HTML page.

Creación de un conjunto de escaladoCreate a scale set

Ahora, cree un conjunto de escalado de máquinas virtuales con New-AzVmss.Now create a virtual machine scale set with New-AzVmss. Para distribuir el tráfico a las instancias individuales de VM, también se crea un equilibrador de carga.To distribute traffic to the individual VM instances, a load balancer is also created. El equilibrador de carga incluye reglas para distribuir el tráfico en el puerto TCP 80.The load balancer includes rules to distribute traffic on TCP port 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.It also allows remote desktop traffic on TCP port 3389 and PowerShell remoting on TCP port 5985. Cuando se le solicite, puede establecer sus propias credenciales administrativas para las instancias de máquina virtual del conjunto de escalado:When prompted, you can set your own administrative credentials for the VM instances in the scale set:

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

Se tardan unos minutos en crear y configurar todos los recursos de conjunto de escalado y máquinas virtuales.It takes a few minutes to create and configure all the scale set resources and VMs.

Creación de una definición de extensión de script personalizadoCreate Custom Script Extension definition

Azure PowerShell usa una tabla hash para almacenar el archivo que se va a descargar y el comando que se va a ejecutar.Azure PowerShell uses a hashtable to store the file to download and the command to execute. En el ejemplo siguiente, se utiliza un script de ejemplo de GitHub.In the following example, a sample script from GitHub is used. En primer lugar, cree este objeto de configuración de la siguiente manera:First, create this configuration object as follows:

$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.Now, apply the Custom Script Extension with Add-AzVmssExtension. El objeto de configuración previamente definido se pasa a la extensión.The configuration object previously defined is passed to the extension. Actualice y ejecute la extensión en las instancias de máquina virtual con Update-AzVmss.Update and run the extension on the VM instances with 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 and apply the Custom Script Extension to the VM instances
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Cada instancia de máquina virtual del conjunto de escalado descarga y ejecuta el script de GitHub.Each VM instance in the scale set downloads and runs the script from GitHub. En un ejemplo más complejo, se podrían instalar varios componentes y archivos de aplicaciones.In a more complex example, multiple application components and files could be installed. 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.If the scale set is scaled up, the new VM instances automatically apply the same Custom Script Extension definition and install the required application.

Permitir tráfico a la aplicaciónAllow traffic to application

Para permitir el acceso a la aplicación web básica, cree un grupo de seguridad de red con New-AzNetworkSecurityRuleConfig y New-AzNetworkSecurityGroup.To allow access to the basic web application, create a network security group with New-AzNetworkSecurityRuleConfig and New-AzNetworkSecurityGroup. Para más información, consulte Redes para conjuntos de escalado de máquinas virtuales de Azure.For more information, see Networking for Azure virtual machine scale sets.


#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 escaladoTest your scale set

Para ver el servidor web en acción, obtenga la dirección IP pública del equilibrador de carga con Get-AzPublicIpAddress.To see your web server in action, get the public IP address of your load balancer with Get-AzPublicIpAddress. En el ejemplo siguiente se muestra la dirección IP que se creó en el grupo de recursos myResourceGroup:The following example displays the IP address created in the myResourceGroup resource group:

Get-AzPublicIpAddress -ResourceGroupName "myResourceGroup" | Select IpAddress

Escriba la dirección IP pública del equilibrador de carga en un explorador web.Enter the public IP address of the load balancer in to a web browser. El equilibrador de carga distribuye el tráfico a una de las instancias de VM, como se muestra en el ejemplo siguiente:The load balancer distributes traffic to one of your VM instances, as shown in the following example:

Página web básica en IIS

Deje el explorador web abierto para que pueda ver una versión actualizada en el paso siguiente.Leave the web browser open so that you can see an updated version in the next step.

Actualización de la implementación de aplicacionesUpdate app deployment

A lo largo del ciclo de vida de un conjunto de escalado, puede que deba implementar una versión actualizada de la aplicación.Throughout the lifecycle of a scale set, you may need to deploy an updated version of your application. 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.With the Custom Script Extension, you can reference an updated deploy script and then reapply the extension to your scale set. Cuando se creó el conjunto de escalado en un paso anterior, el parámetro -UpgradePolicyMode se estableció en Automatic.When the scale set was created in a previous step, the -UpgradePolicyMode was set to Automatic. Esta configuración permite que las instancias de máquina virtual del conjunto de escalado se actualicen y apliquen automáticamente la versión más reciente de la aplicación.This setting allows the VM instances in the scale set to automatically update and apply the latest version of your application.

Cree una nueva definición de configuración llamada customConfigv2.Create a new config definition named customConfigv2. Esta definición ejecuta una versión v2 actualizada del script de instalación de la aplicación:This definition runs an updated v2 version of the application install script:

$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.Update the Custom Script Extension configuration to the VM instances in your scale set. La definición customConfigv2 se usa para aplicar la versión actualizada de la aplicación:The customConfigv2 definition is used to apply the updated version of the application:

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

Todas las instancias de máquina virtual del conjunto de escalado se actualizan automáticamente con la versión más reciente de la página web de ejemplo.All VM instances in the scale set are automatically updated with the latest version of the sample web page. Para ver la versión actualizada, actualice el sitio web en el explorador:To see the updated version, refresh the web site in your browser:

Página web actualizada en IIS

Limpieza de recursosClean up resources

Para quitar el conjunto de escalado y los recursos adicionales, elimine el grupo de recursos y todos sus recursos con Remove-AzResourceGroup.To remove your scale set and additional resources, delete the resource group and all its resources with Remove-AzResourceGroup. El parámetro -Force confirma que desea eliminar los recursos sin pedir confirmación adicional.The -Force parameter confirms that you wish to delete the resources without an additional prompt to do so. El parámetro -AsJob devuelve el control a la petición de confirmación sin esperar a que finalice la operación.The -AsJob parameter returns control to the prompt without waiting for the operation to complete.

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

Pasos siguientesNext steps

En este tutorial, aprendió a instalar y actualizar automáticamente aplicaciones en un conjunto de escalado con Azure PowerShell:In this tutorial, you learned how to automatically install and update applications on your scale set with Azure PowerShell:

  • Instalar automáticamente aplicaciones en un conjunto de escaladoAutomatically install applications to your scale set
  • Usar la extensión de script personalizado de AzureUse the Azure Custom Script Extension
  • Actualizar una aplicación en ejecución en un conjunto de escaladoUpdate a running application on a scale set

Vaya al siguiente tutorial para aprender cómo se escala automáticamente el conjunto de escalado.Advance to the next tutorial to learn how to automatically scale your scale set.