Uso de Azure PowerShell para crear un SQL Server en una máquina virtual de Azure

Se aplica a:SQL Server en VM de Azure

En esta guía se describen las opciones para usar PowerShell con el fin de aprovisionar SQL Server en Azure Virtual Machines (VM). Para obtener un ejemplo de Azure PowerShell simplificado que se basa en valores predeterminados, consulte SQL Server en el inicio rápido de Azure VM PowerShell.

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

Nota:

En este artículo se usa el módulo Az de PowerShell, que es el módulo de PowerShell que se recomienda para interactuar con Azure. Para empezar a trabajar con el módulo Az de PowerShell, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Configuración de su suscripción

  1. Abra PowerShell y establezca el acceso a su cuenta de Azure mediante la ejecución del comando Connect-AzAccount.

    Connect-AzAccount
    
  2. Cuando se le solicite, escriba las credenciales. Use el mismo correo electrónico y la misma contraseña que usa para iniciar sesión en el portal de Azure.

Definición de variables de imagen

Para poder reutilizar valores y simplificar la creación de scripts, empiece por definir una serie de variables. Cambie los valores de los parámetros como desee, pero tenga en cuenta las restricciones de nomenclatura relacionadas con la longitud de los nombres y los caracteres especiales al modificar los valores que se proporcionan.

Ubicación y grupo de recursos

Defina la región de datos y el grupo de recursos donde desea crear los restantes recursos de la máquina virtual.

Modifíquelos como desee y, después, ejecute estos cmdlets para inicializar estas variables.

$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

Propiedades de almacenamiento

Defina la cuenta de almacenamiento y el tipo de almacenamiento que va a usar la máquina virtual.

Modifíquelos como desee y, después, ejecute el siguiente cmdlet para inicializar estas variables. Se recomienda usar discos SSD Premium para las cargas de trabajo de producción.

$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

Propiedades de red

Defina las propiedades que va a usar la red en la máquina virtual.

  • interfaz de red
  • Método de asignación de TCP/IP
  • Nombre de la red virtual
  • Nombre de la subred virtual
  • Intervalo de direcciones IP de la red virtual
  • Intervalo de direcciones IP de la subred
  • Etiqueta de nombre de dominio público

Modifíquelos como desee y, después, ejecute este cmdlet para inicializar estas variables.

$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$TCPIPAllocationMethod = "Dynamic"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$DomainName = $ResourceGroupName

Propiedades de máquina virtual

Defina las siguientes propiedades:

  • Nombre de la máquina virtual
  • Nombre del equipo
  • Tamaño de la máquina virtual
  • Nombre del disco del sistema operativo de la máquina virtual

Modifíquelos como desee y, después, ejecute este cmdlet para inicializar estas variables.

$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

Elegir una imagen de SQL Server

Utilice las siguientes variables para definir la imagen de SQL Server que se va a usar para la máquina virtual.

  1. En primer lugar, cree una lista de todas las ofertas de imágenes de SQL Server con el comando Get-AzVMImageOffer. Este comando enumera las imágenes actuales que están disponibles en Azure Portal y también las imágenes anteriores que solo se pueden instalar con PowerShell:

    Get-AzVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
    

    Nota:

    SQL Server 2008 y SQL Server 2008 R2 no tienen soporte extendido y ya no están disponibles en Azure Marketplace.

  2. Para este tutorial, use las siguientes variables para especificar SQL Server 2022 en Windows Server 2022.

    $OfferName = "SQL2022-WS2022"
    $PublisherName = "MicrosoftSQLServer"
    $Version = "latest"
    
  3. Después, enumere las ediciones disponibles en su oferta.

    Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    
  4. Para este tutorial, utilice SQL Server 2022 Developer Edition (SQLDEV). La edición Developer ofrece licencias gratuitamente para desarrollo y pruebas, y solo se paga por el costo de ejecución de la máquina virtual.

    $Sku = "SQLDEV"
    

Crear un grupo de recursos

Con el modelo de implementación de Resource Manager, el primer objeto que se crea es el grupo de recursos. Para crear un grupo de recursos de Azure y sus recursos, use el cmdlet New-AzResourceGroup. Especifique las variables que inicializó anteriormente para el nombre del grupo de recursos y la ubicación.

Ejecute este cmdlet para crear un nuevo grupo de recursos.

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

Crear una cuenta de almacenamiento

La máquina virtual requiere recursos de almacenamiento tanto para el disco del sistema operativo como para los archivos de registro y de datos de SQL Server. Por motivos de simplicidad, creará un único disco para ambos. Posteriormente puede conectar discos adicionales y usar el cmdlet Add-Azure Disk para colocar los archivos de registro y de datos de SQL Server en discos dedicados. Use el cmdlet New-AzStorageAccount para crear una cuenta de almacenamiento estándar en el nuevo grupo de recursos. Especifique las variables que inicializó anteriormente para el nombre de la cuenta de almacenamiento, el nombre de la SKU del almacenamiento y la ubicación.

Ejecute este cmdlet para crear una nueva cuenta de almacenamiento.

$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
   -Name $StorageName -SkuName $StorageSku `
   -Kind "Storage" -Location $Location

Sugerencia

La creación de la cuenta de almacenamiento puede tardar unos minutos.

Crear recursos de red

La máquina virtual requiere un número de recursos de red para la conectividad de red.

  • Cada máquina virtual requiere una red virtual.
  • Una red virtual debe tener al menos una subred definida.
  • Una interfaz de red debe definirse con una dirección IP privada o pública.

Creación de una configuración de subred de una red virtual

Para empezar, cree una configuración de subred para la red virtual. Para este tutorial, cree una subred predeterminada mediante el cmdlet New-AzVirtualNetworkSubnetConfig. Especifique las variables que inicializó anteriormente para el nombre de la subred y el prefijo de la dirección.

Nota:

Con este puede definir propiedades adicionales de la configuración de subred de la red virtual, pero eso está fuera del ámbito de este tutorial.

Ejecute este cmdlet para crear la configuración una de subred virtual.

$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix

Creación de una red virtual

A continuación, cree una red virtual en su nuevo grupo de recursos mediante el cmdlet New-AzVirtualNetwork. Especifique las variables que inicializó anteriormente para el nombre, la ubicación y el prefijo de la dirección. Use la configuración de subred que ha definido en el paso anterior.

Ejecute este cmdlet para crear una red virtual.

$VNet = New-AzVirtualNetwork -Name $VNetName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig

Crear la dirección IP pública

Una vez que la red virtual está definida, debe configurar una dirección IP para poder conectarse a la máquina virtual. Para este tutorial, cree una dirección IP pública mediante el direccionamiento IP dinámico, con el fin de admitir la conectividad a Internet. Use el cmdlet New-AzPublicIpAddress para crear la dirección IP pública en el nuevo grupo de recursos. Especifique las variables que inicializó anteriormente para el nombre, la ubicación, el método de asignación y la etiqueta del nombre de dominio DNS.

Nota:

Con este cmdlet se pueden definir propiedades adicionales de la dirección IP pública, pero eso es algo que está fuera del ámbito de este tutorial inicial. También se puede crear una dirección privada o una dirección con una dirección estática, pero eso está también fuera del ámbito de este tutorial.

Ejecute este cmdlet para crear una dirección IP pública.

$PublicIp = New-AzPublicIpAddress -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName

Creación del grupo de seguridad de red

Para proteger el tráfico de la VM y SQL Server, cree un grupo de seguridad de red.

  1. Primero, cree una regla de grupo de seguridad de red para que el Escritorio remoto (RPD) permita conexiones RDP.

    $NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
       -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
    
  2. Configure una regla del grupo de seguridad de red que permita el tráfico en el puerto TCP 1433. Al hacerlo se habilitan las conexiones a SQL Server a través de Internet.

    $NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp `
       -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
    
  3. Cree el grupo de seguridad de red.

    $Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
       -Location $Location -Name $NsgName `
       -SecurityRules $NsgRuleRDP,$NsgRuleSQL
    

Creación de la interfaz de red

Ya está listo para crear la interfaz de red de la máquina virtual. Use el cmdlet New-AzNetworkInterface para crear la interfaz de red en el nuevo grupo de recursos. Especifique el nombre, la ubicación, la subred y la dirección IP pública definidas anteriormente.

Ejecute este cmdlet para crear una interfaz de red.

$Interface = New-AzNetworkInterface -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id `
   -NetworkSecurityGroupId $Nsg.Id

Configuración de un objeto de VM

Ahora que los recursos de almacenamiento y de red están definidos, esta listo para definir los recursos de proceso para la máquina virtual.

  • Especifique el tamaño de máquina virtual y varias propiedades del sistema operativo.
  • Especifique la interfaz de red que ha creado anteriormente.
  • Defina el almacenamiento de blobs.
  • Especifique el sistema operativo.

Creación del objeto de VM

Comience por especificar el tamaño de la máquina virtual. En este tutorial, especifique un DS13. Use el cmdlet New-AzVMConfig para crear un objeto de máquina virtual configurable. Especifique las variables que inicializó anteriormente para el nombre y el tamaño.

Ejecute este cmdlet para crear el objeto de máquina virtual.

$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize

Creación de un objeto de credencial que contenga el nombre y la contraseña de las credenciales de administrador local

Para que pueda establecer las propiedades del sistema operativo de la máquina virtual, debe especificar las credenciales de la cuenta de administrador local en forma de cadena segura. Para ello, use el cmdlet Get-Credential.

Ejecute el siguiente cmdlet. Deberá escribir el nombre y la contraseña del administrador local de la máquina virtual en la ventana de solicitud de credenciales de PowerShell.

$Credential = Get-Credential -Message "Type the name and password of the local administrator account."

Establecimiento de las propiedades del sistema operativo de la máquina virtual

Ya está listo para establecer las propiedades del sistema operativo de la máquina virtual con el cmdlet Set-AzVMOperatingSystem.

  • Establezca el tipo de sistema operativo como Windows.
  • Requiera la instalación del agente de máquina virtual.
  • Especifique que el cmdlet habilita la actualización automática.
  • Especifique las variables que inicializó anteriormente para el nombre de la máquina virtual, el nombre del equipo y la credencial.

Ejecute este cmdlet para establecer las propiedades de sistema operativo de la máquina virtual.

$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine `
   -Windows -ComputerName $ComputerName -Credential $Credential `
   -ProvisionVMAgent -EnableAutoUpdate

Adición de la interfaz de red a la máquina virtual

A continuación, use el cmdlet Add-AzVMNetworkInterface para agregar la interfaz de red mediante la variable que ha definido anteriormente.

Ejecute este cmdlet para establecer la interfaz de red de la máquina virtual.

$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id

Establecimiento la ubicación de Almacenamiento de blobs en el disco que va a usar la máquina virtual

A continuación, establezca la ubicación del almacenamiento de blobs en el disco de la máquina virtual con las variables que definió anteriormente.

Ejecute este cmdlet para establecer la ubicación del almacenamiento de blobs.

$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"

Establecimiento de las propiedades del disco del sistema operativo de la máquina virtual

A continuación, establezca las propiedades del disco del sistema operativo de la máquina virtual mediante el cmdlet Set-AzVMOSDisk.

  • Especifique que el sistema operativo de la máquina virtual provendrá de una imagen.
  • Establezca que el almacenamiento en caché sea de solo lectura (porque SQL Server está instalado en el mismo disco).
  • Especifique las variables que inicializó anteriormente para el nombre de la máquina virtual y el disco del sistema operativo.

Ejecute este cmdlet para establecer las propiedades del disco del sistema operativo de la máquina virtual.

$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name `
   $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

Especificación de la imagen de la plataforma de la máquina virtual.

El último paso de la configuración es especificar la imagen de la plataforma de la máquina virtual. Para este tutorial, use la última imagen de SQL Server 2016 CTP. Use el cmdlet Set-AzVMSourceImage para usar esta imagen con las variables que definió anteriormente.

Ejecute este cmdlet para especificar la imagen de la plataforma de la máquina virtual.

$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine `
   -PublisherName $PublisherName -Offer $OfferName `
   -Skus $Sku -Version $Version

Creación de la máquina virtual con SQL

Ahora que ha terminado los pasos de la configuración, está listo para crear la máquina virtual. Use el cmdlet New-AzVM para crear la máquina virtual mediante las variables que ha definido.

Sugerencia

La creación de la máquina virtual puede tardar unos minutos.

Ejecute este cmdlet para crear una máquina virtual.

New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

La máquina virtual se ha creado.

Nota:

Si aparece un error en el diagnóstico de arranque, puede ignorarlo. Se crea una cuenta de almacenamiento estándar para el diagnóstico del arranque, ya que la cuenta de almacenamiento especificada para el disco de la máquina virtual es una cuenta de almacenamiento prémium.

Instalar la extensión de agente de IaaS de SQL

Las máquinas virtuales de SQL Server son compatibles con características de administración automatizada con la extensión del Agente de IaaS de SQL Server. Para registrar el servidor SQL Server con la extensión, ejecute el comando New-AzSqlVM después de crear la máquina virtual. Especifique el tipo de licencia de la máquina virtual con SQL Server, eligiendo entre pago por uso o traiga su propia licencia mediante la Ventaja híbrida de Azure. Para más información acerca de las licencias, consulte Modelo de licencia.

New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

Hay tres formas de registrarse con la extensión:

Detención o eliminación de una máquina virtual

Si no necesita que la máquina virtual se ejecute continuamente, puede detenerla cuando no se esté usando y así evitar cargos innecesarios. El siguiente comando detiene la VM, pero la deja disponible para usarla en el futuro.

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

También puede eliminar de forma definitiva todos los recursos asociados a la máquina virtual con el comando Remove-AzResourceGroup. Si lo hace, también se elimina la máquina virtual de forma permanente, así que use este comando con cuidado.

Script de ejemplo

El siguiente script contiene el script de PowerShell completo de este tutorial. Se da por hecho que ya ha configurado la suscripción de Azure para usarla con los comandos Connect-AzAccount y Select-AzSubscription.

# Variables

## Global
$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

## Storage
$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

## Network
$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$TCPIPAllocationMethod = "Dynamic"
$DomainName = $ResourceGroupName

##Compute
$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

##Image
$PublisherName = "MicrosoftSQLServer"
$OfferName = "SQL2017-WS2016"
$Sku = "SQLDEV"
$Version = "latest"

# Resource Group
New-AzResourceGroup -Name $ResourceGroupName -Location $Location

# Storage
$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName -SkuName $StorageSku -Kind "Storage" -Location $Location

# Network
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix
$VNet = New-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig
$PublicIp = New-AzPublicIpAddress -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName
$NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
$NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $Location -Name $NsgName -SecurityRules $NsgRuleRDP,$NsgRuleSQL
$Interface = New-AzNetworkInterface -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id -NetworkSecurityGroupId $Nsg.Id

# Compute
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$Credential = Get-Credential -Message "Type the name and password of the local administrator account."
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate #-TimeZone = $TimeZone
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id
$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

# Image
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version

# Create the VM in Azure
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

# Add the SQL IaaS Agent Extension, and choose the license type
New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

Pasos siguientes

Después de crear la máquina virtual, puede: