Compartir a través de


Implementación de Cloud Services (soporte extendido) mediante Azure PowerShell

En este artículo se muestra cómo usar el módulo Az.CloudService de Azure PowerShell para crear una implementación de Azure Cloud Services (soporte extendido) que tenga varios roles (WebRole y WorkerRole).

Requisitos previos

Complete los pasos siguientes como requisitos previos para crear la implementación mediante Azure PowerShell.

  1. Consulte los requisitos previos de implementación de Cloud Services (soporte extendido) y cree los recursos necesarios.

  2. Instale el módulo Az.CloudService de PowerShell:

    Install-Module -Name Az.CloudService 
    
  3. Crear un nuevo grupo de recursos. Este paso es opcional si se usa un grupo de recursos existente.

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. Cree una cuenta de almacenamiento y un contenedor en Azure para almacenar el archivo de configuración (.cspkg o .zip) del paquete (.cscfg) para la implementación de Cloud Services (soporte extendido). Se debe usar un nombre único para el nombre de la cuenta de almacenamiento. Este paso es opcional si se usa una cuenta de almacenamiento existente.

    $storageAccount = New-AzStorageAccount -ResourceGroupName “ContosOrg” -Name “contosostorageaccount” -Location “East US” -SkuName “Standard_RAGRS” -Kind “StorageV2” 
    $container = New-AzStorageContainer -Name “contosocontainer” -Context $storageAccount.Context -Permission Blob 
    

Implementación de Cloud Services (soporte extendido)

Para implementar Cloud Services (soporte extendido), use cualquiera de las siguientes opciones de cmdlets de PowerShell:

  • Creación rápida de una implementación mediante una cuenta de almacenamiento

    • Este conjunto de parámetros introduce el archivo del paquete (.cspkg o .zip), el archivo de configuración (.cscfg) y el archivo de definición (.csdef) para la implementación como entradas con la cuenta de almacenamiento.
    • El cmdlet crea el perfil de rol de Cloud Services (soporte extendido), el perfil de red y el perfil del sistema operativo con una entrada mínima.
    • Para escribir un certificado, debe especificar un nombre de almacén de claves. Las huellas digitales de certificado del almacén de claves se validan con los certificados que especifique en el archivo de configuración (.cscfg) para la implementación.
  • Creación rápida de una implementación mediante un URI de firma de acceso compartido

    • Este conjunto de parámetros introduce el URI de firma de acceso compartido (SAS) del archivo del paquete (.cspkg o .zip) con las rutas de acceso locales al archivo de configuración (.cscfg) y al archivo de definición (.csdef). No se requiere ninguna entrada de cuenta de almacenamiento.
    • El cmdlet crea el perfil de rol de servicio en la nube, el perfil de red y la entrada mínima del perfil del sistema operativo.
    • Para escribir un certificado, debe especificar un nombre de almacén de claves. Las huellas digitales de certificado del almacén de claves se validan con los certificados que especifique en el archivo de configuración (.cscfg) para la implementación.
  • Creación de una implementación mediante un perfil de rol, un perfil de sistema operativo, un perfil de red y un perfil de extensión con URI de firma de acceso compartido

    • Este conjunto de parámetros introduce los URI de SAS del archivo de paquete (.cspkg o .zip) y el archivo de configuración (.cscfg).
    • Debe especificar objetos de perfil: perfil de rol, perfil de red, perfil de sistema operativo y perfil de extensión. Los perfiles deben coincidir con los valores establecidos en el archivo de configuración (.cscfg) y el archivo de definición (.csdef).

Creación rápida de una implementación mediante una cuenta de almacenamiento

Cree una implementación de Cloud Services (soporte extendido) mediante el archivo de paquete (.cspkg o .zip), el archivo de configuración (.cscfg) y los archivos de definición (.csdef):

$cspkgFilePath = "<Path to .cspkg file>"
$cscfgFilePath = "<Path to .cscfg file>"
$csdefFilePath = "<Path to .csdef file>"
      
# Create a Cloud Services (extended support) deployment   
New-AzCloudService
-Name "ContosoCS" `
-ResourceGroupName "ContosOrg" `
-Location "EastUS" `
-ConfigurationFile $cscfgFilePath `
-DefinitionFile $csdefFilePath `
-PackageFile $cspkgFilePath `
-StorageAccount $storageAccount `
[-KeyVaultName <string>]

Creación rápida de una implementación mediante un URI de SAS

  1. Cargue el archivo del paquete (.cspkg o .zip) para la implementación en la cuenta de almacenamiento:

    $tokenStartTime = Get-Date 
    $tokenEndTime = $tokenStartTime.AddYears(1) 
    $cspkgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cspkg” -Container “contosocontainer” -Blob “ContosoApp.cspkg” -Context $storageAccount.Context 
    $cspkgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cspkgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cspkgUrl = $cspkgBlob.ICloudBlob.Uri.AbsoluteUri + $cspkgToken 
    $cscfgFilePath = "<Path to cscfg file>"
    $csdefFilePath = "<Path to csdef file>"
    
  2. Cree la implementación de Cloud Services (soporte extendido) mediante el archivo de paquete (.cspkg o .zip), el archivo de configuración (.cscfg) y el URI de SAS de definición (.csdef):

    New-AzCloudService
        -Name "ContosoCS" `
        -ResourceGroupName "ContosOrg" `
        -Location "EastUS" `
        -ConfigurationFile $cspkgFilePath `
        -DefinitionFile $csdefFilePath `
        -PackageURL $cspkgUrl `
        [-KeyVaultName <string>]
    

Creación de una implementación mediante objetos de perfil y URI de SAS

  1. Cargue el archivo de configuración de Cloud Services (soporte extendido) (.cscfg) en la cuenta de almacenamiento:

    $cscfgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cscfg” -Container contosocontainer -Blob “ContosoApp.cscfg” -Context $storageAccount.Context 
    $cscfgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cscfgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cscfgUrl = $cscfgBlob.ICloudBlob.Uri.AbsoluteUri + $cscfgToken 
    
  2. Cargue el archivo del paquete de Cloud Services (soporte extendido) (.cspkg o .zip) en la cuenta de almacenamiento:

    $tokenStartTime = Get-Date 
    $tokenEndTime = $tokenStartTime.AddYears(1) 
    $cspkgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cspkg” -Container “contosocontainer” -Blob “ContosoApp.cspkg” -Context $storageAccount.Context 
    $cspkgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cspkgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cspkgUrl = $cspkgBlob.ICloudBlob.Uri.AbsoluteUri + $cspkgToken 
    
  3. Cree una red virtual y una subred. Este paso es opcional si se usan una red y una subred existentes. En este ejemplo se usa una sola red virtual y una subred para los roles de Cloud Services (soporte extendido) (WebRole y WorkerRole).

    $subnet = New-AzVirtualNetworkSubnetConfig -Name "ContosoWebTier1" -AddressPrefix "10.0.0.0/24" -WarningAction SilentlyContinue 
    $virtualNetwork = New-AzVirtualNetwork -Name “ContosoVNet” -Location “East US” -ResourceGroupName “ContosOrg” -AddressPrefix "10.0.0.0/24" -Subnet $subnet 
    
  4. Cree una dirección IP pública y establezca un valor de etiqueta DNS para la dirección IP pública. Cloud Services (soporte extendido) solo admite una dirección IP pública de la SKUbásica. Las direcciones IP públicas de la SKU estándar no funcionan con Cloud Services (soporte extendido).

    Si usa una dirección IP estática, debe hacer referencia a ella como una dirección IP reservada en el archivo de configuración (.cscfg) para la implementación.

    $publicIp = New-AzPublicIpAddress -Name “ContosIp” -ResourceGroupName “ContosOrg” -Location “East US” -AllocationMethod Dynamic -IpAddressVersion IPv4 -DomainNameLabel “contosoappdns” -Sku Basic 
    
  5. Cree un objeto de perfil de red y, a continuación, asocie la dirección IP pública al front-end del equilibrador de carga. La plataforma Azure crea automáticamente un recurso de equilibrador de carga de SKU clásica en la misma suscripción que el recurso de Cloud Services (soporte extendido). El recurso de equilibrador de carga es un recurso de solo lectura en Azure Resource Manager. Solo puede actualizar los recursos a través del archivo de configuración de Cloud Services (soporte extendido) (.cscfg) y el archivo de implementación (.csdef).

    $publicIP = Get-AzPublicIpAddress -ResourceGroupName ContosOrg -Name ContosIp  
    $feIpConfig = New-AzCloudServiceLoadBalancerFrontendIPConfigurationObject -Name 'ContosoFe' -PublicIPAddressId $publicIP.Id 
    $loadBalancerConfig = New-AzCloudServiceLoadBalancerConfigurationObject -Name 'ContosoLB' -FrontendIPConfiguration $feIpConfig 
    $networkProfile = @{loadBalancerConfiguration = $loadBalancerConfig} 
    
  6. Cree un almacén de claves. El almacén de claves almacena certificados asociados a roles de Cloud Services (soporte extendido). El almacén de claves debe estar en la misma región y suscripción que la implementación de Cloud Services (soporte extendido) y tener un nombre único. Para más información, consulte Uso de certificados con Cloud Services (soporte extendido).

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. Actualice la directiva de acceso del almacén de claves y conceda permisos de certificado a su cuenta de usuario:

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -EnabledForDeployment
    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete 
    

    Como alternativa, establezca la directiva de acceso mediante el valor ObjectId. Para obtener el valor ObjectId, ejecute Get-AzADUser:

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. En el ejemplo siguiente se agrega un certificado autofirmado a un almacén de claves. Debe agregar la huella digital del certificado a través del archivo de configuración (.cscfg) para los roles de Cloud Services (soporte extendido).

    $Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" -SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal 
    Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" -CertificatePolicy $Policy 
    
  9. Cree un objeto en memoria de perfil de SO. Un perfil de sistema operativo especifica los certificados asociados a los roles de Cloud Services (soporte extendido), que es el certificado que creó en el paso anterior.

    $keyVault = Get-AzKeyVault -ResourceGroupName ContosOrg -VaultName ContosKeyVault 
    $certificate = Get-AzKeyVaultCertificate -VaultName ContosKeyVault -Name ContosCert 
    $secretGroup = New-AzCloudServiceVaultSecretGroupObject -Id $keyVault.ResourceId -CertificateUrl $certificate.SecretId 
    $osProfile = @{secret = @($secretGroup)} 
    
  10. Cree un objeto en memoria de perfil de rol. El perfil de rol define las propiedades específicas de SKU de roles, como el nombre, la capacidad y el nivel. En este ejemplo, se definen dos roles: frontendRole y backendRole. La información del perfil de rol debe coincidir con la configuración de roles definida en el archivo de configuración de implementación (.cscfg) y el archivo de definición (.csdef).

    $frontendRole = New-AzCloudServiceRoleProfilePropertiesObject -Name 'ContosoFrontend' -SkuName 'Standard_D1_v2' -SkuTier 'Standard' -SkuCapacity 2 
    $backendRole = New-AzCloudServiceRoleProfilePropertiesObject -Name 'ContosoBackend' -SkuName 'Standard_D1_v2' -SkuTier 'Standard' -SkuCapacity 2 
    $roleProfile = @{role = @($frontendRole, $backendRole)} 
    
  11. (Opcional) Cree un objeto de perfil de extensión en memoria para agregar a la implementación de Cloud Services (soporte extendido). En este ejemplo se agrega una extensión de Protocolo de escritorio remoto (RDP):

    $credential = Get-Credential 
    $expiration = (Get-Date).AddYears(1) 
    $rdpExtension = New-AzCloudServiceRemoteDesktopExtensionObject -Name 'RDPExtension' -Credential $credential -Expiration $expiration -TypeHandlerVersion '1.2.1' 
    
    $storageAccountKey = Get-AzStorageAccountKey -ResourceGroupName "ContosOrg" -Name "contosostorageaccount"
    $configFile = "<WAD public configuration file path>"
    $wadExtension = New-AzCloudServiceDiagnosticsExtension -Name "WADExtension" -ResourceGroupName "ContosOrg" -CloudServiceName "ContosCS" -StorageAccountName "contosostorageaccount" -StorageAccountKey $storageAccountKey[0].Value -DiagnosticsConfigurationPath $configFile -TypeHandlerVersion "1.5" -AutoUpgradeMinorVersion $true 
    $extensionProfile = @{extension = @($rdpExtension, $wadExtension)} 
    

    El archivo de configuración (.cscfg) solo debe tener etiquetas PublicConfig y debe contener un espacio de nombres como se muestra en el ejemplo siguiente:

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (Opcional) En una tabla hash de PowerShell, puede definir etiquetas para agregar a la implementación:

    $tag=@{"Owner" = "Contoso"} 
    
  13. Cree la implementación de Cloud Services (soporte extendido) mediante los objetos de perfil y los URI de SAS que ha definido:

    $cloudService = New-AzCloudService ` 
        -Name “ContosoCS” ` 
        -ResourceGroupName “ContosOrg” ` 
        -Location “East US” ` 
        -PackageUrl $cspkgUrl ` 
        -ConfigurationUrl $cscfgUrl ` 
        -UpgradeMode 'Auto' ` 
        -RoleProfile $roleProfile ` 
        -NetworkProfile $networkProfile  ` 
        -ExtensionProfile $extensionProfile ` 
        -OSProfile $osProfile `
        -Tag $tag