Distribuire un servizio cloud (supporto "Extended") usando Azure PowerShell

Questo articolo illustra come usare il modulo Az.CloudService di PowerShell per distribuire Servizi cloud (supporto "Extended") in Azure con più ruoli (WebRole e WorkerRole).

Prerequisiti

  1. Esaminare i prerequisiti per la distribuzione di Servizi cloud di Azure (supporto "Extended") e creare le risorse associate.

  2. Installare il modulo Az.CloudService di PowerShell.

    Install-Module -Name Az.CloudService 
    
  3. Creare un nuovo gruppo di risorse. Questo passaggio è facoltativo se si usa un gruppo di risorse esistente.

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. Creare un account di archiviazione e un contenitore, che verranno usati per archiviare i file del pacchetto del servizio cloud (.cspkg) e di configurazione del servizio (.cscfg). Per l'account di archiviazione è necessario un nome univoco. Questo passaggio è facoltativo se si usa un account di archiviazione esistente.

    $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 
    

Distribuire un servizio cloud (supporto "Extended")

Usare uno dei cmdlet di PowerShell seguenti per distribuire Servizi cloud (supporto "Extended"):

  1. Creazione rapida di un servizio cloud usando un account di archiviazione

    • Questo parametro immette i file .cscfg, .cspkg e .csdef come input insieme all'account di archiviazione.
    • Il profilo del ruolo del servizio cloud, il profilo di rete e il profilo del sistema operativo vengono creati dal cmdlet con input minimo da parte dell'utente.
    • Per l'input dei certificati, è necessario specificare il nome dell'insieme di credenziali delle chiavi. Le identificazioni personali dei certificati nell'insieme di credenziali delle chiavi vengono convalidate rispetto a quelle specificate nel file .cscfg.
  2. Creazione rapida di un servizio cloud usando un URI di firma di accesso condiviso

    • Questo parametro imposta l'URI di firma di accesso condiviso del file .cspkg insieme ai percorsi locali dei file .csdef e .cscfg. Non è necessario immettere l'account di archiviazione.
    • Il profilo del ruolo del servizio cloud, il profilo di rete e il profilo del sistema operativo vengono creati dal cmdlet con input minimo da parte dell'utente.
    • Per l'input dei certificati, è necessario specificare il nome dell'insieme di credenziali delle chiavi. Le identificazioni personali dei certificati nell'insieme di credenziali delle chiavi vengono convalidate rispetto a quelle specificate nel file .cscfg.
  3. Creare un servizio cloud con il profilo del ruolo, del sistema operativo, di rete ed estensione e gli URI di firma di accesso condiviso

    • Questo parametro imposta gli URI di firma di accesso condiviso dei file .cscfg e .cspkg.
    • Il profilo di ruolo, rete, sistema operativo ed estensione devono essere specificati dall'utente e devono corrispondere ai valori presenti nei file .cscfg e .csdef.

Creazione rapida di un servizio cloud usando un account di archiviazione

Creare la distribuzione del servizio cloud usando i file .cscfg, .csdef e .cspkg.

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

Creazione rapida di un servizio cloud usando un URI di firma di accesso condiviso

  1. Caricare il pacchetto del servizio cloud (.cspkg) nell'account di archiviazione.

    $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. Creare la distribuzione del servizio cloud usando l'URI di firma di accesso condiviso e i file .cscfg, .csdef e .cspkg.

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

Creare un servizio cloud usando oggetti profilo e URI di firma di accesso condiviso

  1. Caricare la configurazione del servizio cloud (.cscfg) nell'account di archiviazione.

    $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. Caricare il pacchetto del servizio cloud (.cspkg) nell'account di archiviazione.

    $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. Creare una rete virtuale e una subnet. Questo passaggio è facoltativo se si usano una rete e una subnet esistenti. Questo esempio usa una singola rete virtuale e una subnet per entrambi i ruoli del servizio cloud (WebRole e 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. Creare un indirizzo IP pubblico e impostare la proprietà etichetta DNS dell'indirizzo IP pubblico. Servizi cloud (supporto "Extended") supporta solo gli indirizzi IP pubblici con SKU Basic. Gli indirizzi IP pubblici con SKU Standard non funzionano con Servizi cloud. Se si usa un indirizzo IP statico, è necessario farvi riferimento come indirizzo IP riservato nel file di configurazione del servizio (.cscfg).

    $publicIp = New-AzPublicIpAddress -Name “ContosIp” -ResourceGroupName “ContosOrg” -Location “East US” -AllocationMethod Dynamic -IpAddressVersion IPv4 -DomainNameLabel “contosoappdns” -Sku Basic 
    
  5. Creare un oggetto profilo di rete e associare l'indirizzo IP pubblico al front-end del servizio di bilanciamento del carico. La piattaforma Azure crea automaticamente una risorsa servizio di bilanciamento del carico con SKU della "versione classica" nella stessa sottoscrizione della risorsa servizio cloud. La risorsa servizio di bilanciamento del carico è una risorsa di sola lettura in Azure Resource Manager. Gli aggiornamenti alla risorsa sono supportati solo tramite i file di distribuzione del servizio cloud (.cscfg e .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. Creare un insieme di credenziali delle chiavi. Questa istanza di Key Vault verrà usata per archiviare i certificati associati ai ruoli del servizio cloud (supporto "Extended"). L'istanza di Key Vault deve risiedere nella stessa area e nella stessa sottoscrizione del servizio cloud e avere un nome univoco. Per altre informazioni, vedere Usare certificati con Servizi cloud di Azure (supporto "Extended").

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. Aggiornare i criteri di accesso per Key Vault e concedere le autorizzazioni del certificato all'account utente.

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

    In alternativa, impostare i criteri di accesso tramite ObjectId (che possono essere ottenuti eseguendo Get-AzADUser).

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. In questo esempio verrà aggiunto un certificato autofirmato a un'istanza di Key Vault. È necessario aggiungere l'identificazione personale del certificato nel file di configurazione del servizio cloud (.cscfg) per la distribuzione nei ruoli del servizio cloud.

    $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. Creare un oggetto profilo del sistema operativo in memoria. Il profilo del sistema operativo specifica i certificati associati ai ruoli del servizio cloud. Corrisponderà al certificato creato nel passaggio precedente.

    $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. Creare un oggetto profilo del ruolo in memoria. Il profilo del ruolo definisce proprietà specifiche dello SKU del ruolo, ad esempio nome, capacità e livello. In questo esempio sono stati definiti due ruoli: frontendRole e backendRole. Le informazioni sul profilo del ruolo devono corrispondere alla configurazione del ruolo definita nel file di configurazione (.cscfg) e nel file di definizione del servizio (.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. (Facoltativo) Creare un oggetto profilo di estensione in memoria da aggiungere al servizio cloud. Per questo esempio verrà aggiunta l'estensione 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)} 
    

    Il file di configurazione deve includere solo tag PublicConfig e deve contenere uno spazio dei nomi come indicato di seguito:

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (Facoltativo) Definire i tag come tabella hash di PowerShell da aggiungere al servizio cloud.

    $tag=@{"Owner" = "Contoso"} 
    
  13. Creare una distribuzione del servizio cloud usando gli oggetti profilo e gli URL di firma di accesso condiviso.

    $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 
    

Passaggi successivi