Distribuire Servizi cloud (supporto "Extended") usando Azure PowerShell

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

Prerequisiti

Completare i passaggi seguenti come prerequisiti per la creazione della distribuzione usando Azure PowerShell.

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

  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 in Azure per archiviare il file e la configurazione del pacchetto (.cspkg o .zip) per la distribuzione di Servizi cloud (supporto "Extended"). È necessario usare un nome univoco per il nome dell'account di archiviazione. 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 Servizi cloud (supporto "Extended")

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

  • Creare rapidamente una distribuzione usando un account di archiviazione

    • Questo set di parametri inserisce il file del pacchetto (.cspkg o .zip), il file di configurazione (.cscfg) e il file di definizione (.csdef) per la distribuzione come input con l'account di archiviazione.
    • Il cmdlet crea il profilo del ruolo Servizi cloud (supporto "Extended"), il profilo di rete e il profilo del sistema operativo con input minimo.
    • Per immettere un certificato, è necessario specificare un nome dell'insieme di credenziali delle chiavi. Le identificazioni personali del certificato nell'insieme di credenziali delle chiavi vengono convalidate rispetto ai certificati specificati nel file di configurazione (.cscfg) per la distribuzione.
  • Creare rapidamente una distribuzione usando un URI della firma di accesso condiviso

    • Questo parametro imposta l'URI della firma di accesso condiviso (SAS) del file del pacchetto (.cspkg o .zip) con i percorsi locali del file di configurazione (.cscfg) e del file di definizione (.csdef). Non è necessario alcun input dell'account di archiviazione.
    • Il cmdlet crea il profilo del ruolo del servizio cloud, il profilo di rete e l'input minimo del profilo del sistema operativo.
    • Per immettere un certificato, è necessario specificare un nome dell'insieme di credenziali delle chiavi. Le identificazioni personali del certificato nell'insieme di credenziali delle chiavi vengono convalidate rispetto ai certificati specificati nel file di configurazione (.cscfg) per la distribuzione.
  • Creare una distribuzione usando un profilo di ruolo , un profilo del sistema operativo, un profilo di rete e un profilo di estensione con URI di firma di accesso condiviso

    • Questo parametro imposta l'input degli URI sas del file di pacchetto (.cspkg o .zip) e del file di configurazione (.cscfg).
    • È necessario specificare gli oggetti profilo: profilo di ruolo, profilo di rete, profilo del sistema operativo e profilo di estensione. I profili devono corrispondere ai valori impostati nel file di configurazione (.cscfg) e nel file di definizione (.csdef).

Creare rapidamente una distribuzione usando un account di archiviazione

Creare una distribuzione di Servizi cloud (supporto "Extended") usando il file package (.cspkg o .zip), il file di configurazione (.cscfg) e i file di definizione (.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>]

Creare rapidamente una distribuzione usando un URI di firma di accesso condiviso

  1. Caricare il file del pacchetto (.cspkg o .zip) per la distribuzione 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 di Servizi cloud (supporto "Extended") usando il file SAS del pacchetto (.cspkg o .zip), il file di configurazione (.cscfg) e l'URI sas di definizione (.csdef):

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

Creare una distribuzione usando oggetti profilo e URI di firma di accesso condiviso

  1. Caricare il file di configurazione dei Servizi 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 file del pacchetto Servizi cloud (.cspkg o .zip) 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 dei Servizi cloud (supporto "Extended") (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 un valore di etichetta DNS per l'indirizzo IP pubblico. Servizi cloud (supporto "Extended") supporta solo gli indirizzi IP pubblici con SKU Basic. Gli indirizzi IP pubblici dello SKU standard non funzionano con Servizi cloud (supporto "Extended").

    Se si usa un indirizzo IP statico, è necessario farvi riferimento come indirizzo IP riservato nel file di configurazione (.cscfg) per la distribuzione.

    $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 Servizi cloud (supporto "Extended"). Il servizio di bilanciamento del carico è una risorsa di sola lettura in Azure Resource Manager. È possibile aggiornare le risorse solo tramite il file di configurazione dei Servizi cloud (.cscfg) e il file di distribuzione (.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. L'insieme di credenziali delle chiavi archivia i certificati associati ai ruoli di Servizi cloud (supporto "Extended"). L'insieme di credenziali delle chiavi deve trovarsi nella stessa area e nella stessa sottoscrizione della distribuzione di Servizi cloud (supporto "Extended") e avere un nome univoco. Per altre informazioni, vedere Usare certificati con Servizi cloud (supporto "Extended").

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. Aggiornare i criteri di accesso per l'insieme di credenziali delle chiavi 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 usando il valore ObjectId. Per ottenere il valore ObjectId, eseguire Get-AzADUser:

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. Nell'esempio seguente viene aggiunto un certificato autofirmato a un insieme di credenziali delle chiavi. È necessario aggiungere l'identificazione personale del certificato tramite il file di configurazione (.cscfg) per i ruoli di Servizi cloud (supporto "Extended").

    $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. Un profilo del sistema operativo specifica i certificati associati ai ruoli di Servizi cloud (supporto "Extended"), ovvero il 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. Un profilo del ruolo definisce proprietà specifiche dello SKU del ruolo, ad esempio nome, capacità e livello. In questo esempio vengono definiti due ruoli: frontendRole e backendRole. Le informazioni sul profilo del ruolo devono corrispondere alla configurazione del ruolo definita nel file di configurazione della distribuzione (.cscfg) e nel file di definizione (.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 profilo di estensione in memoria per aggiungere alla distribuzione di Servizi cloud (supporto "Extended"). Questo esempio aggiunge un'estensione Remote Desktop Protocol (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 (.cscfg) deve avere solo tag PublicConfig e deve contenere uno spazio dei nomi, come illustrato nell'esempio seguente:

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (Facoltativo) In una tabella hash di PowerShell è possibile definire i tag da aggiungere alla distribuzione:

    $tag=@{"Owner" = "Contoso"} 
    
  13. Creare la distribuzione di Servizi cloud (supporto "Extended") usando gli oggetti profilo e gli URI di firma di accesso condiviso definiti:

    $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