Distribuera en molntjänst (utökad support) med Hjälp av Azure PowerShell

Den här artikeln visar hur du använder Az.CloudService PowerShell-modulen för att distribuera Cloud Services (utökad support) i Azure som har flera roller (WebRole och WorkerRole).

Förutsättningar

  1. Granska distributionskraven för Cloud Services (utökad support) och skapa de associerade resurserna.

  2. Installera Az.CloudService PowerShell-modulen.

    Install-Module -Name Az.CloudService 
    
  3. Skapa en ny resursgrupp. Det här steget är valfritt om du använder en befintlig resursgrupp.

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. Skapa ett lagringskonto och en container som ska användas för att lagra cloud service-paketfilerna (.cspkg) och Service Configuration (.cscfg). Ett unikt namn för lagringskontonamnet krävs. Det här steget är valfritt om du använder ett befintligt lagringskonto.

    $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 
    

Distribuera en Cloud Services (utökad support)

Använd någon av följande PowerShell-cmdletar för att distribuera Cloud Services (utökad support):

  1. Snabbskapa molntjänst med ett lagringskonto

    • Den här parameteruppsättningen anger .cscfg-, .cspkg- och .csdef-filerna som indata tillsammans med lagringskontot.
    • Rollprofilen för molntjänsten, nätverksprofilen och OS-profilen skapas av cmdleten med minimala indata från användaren.
    • För certifikatindata ska keyvault-namnet anges. Certifikatets tumavtryck i keyvault verifieras mot dem som anges i .cscfg-filen.
  2. Snabbskapa molntjänst med hjälp av en SAS-URI

    • Den här parameteruppsättningen matar in SAS-URI:n för .cspkg tillsammans med de lokala sökvägarna för .csdef- och .cscfg-filer. Det krävs inga indata för lagringskontot.
    • Rollprofilen för molntjänsten, nätverksprofilen och OS-profilen skapas av cmdleten med minimala indata från användaren.
    • För certifikatindata ska keyvault-namnet anges. Certifikatets tumavtryck i keyvault verifieras mot dem som anges i .cscfg-filen.
  3. Skapa molntjänst med roll-, OS-, nätverks- och tilläggsprofil och SAS-URI:er

    • Den här parameteruppsättningen anger SAS-URI:er för .cscfg- och .cspkg-filerna.
    • Rollen, nätverket, operativsystemet och tilläggsprofilen måste anges av användaren och måste matcha värdena i .cscfg och .csdef.

Snabbskapa molntjänst med ett lagringskonto

Skapa cloud service-distribution med hjälp av .cscfg-, .csdef- och .cspkg-filer.

$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>]

Snabbskapa molntjänst med hjälp av en SAS-URI

  1. Ladda upp ditt Cloud Service-paket (cspkg) till lagringskontot.

    $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. Skapa cloud service-distribution med hjälp av .cscfg, .csdef och .cspkg SAS URI.

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

Skapa molntjänst med profilobjekt och SAS-URI:er

  1. Ladda upp molntjänstkonfigurationen (cscfg) till lagringskontot.

    $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. Ladda upp ditt Cloud Service-paket (cspkg) till lagringskontot.

    $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. Skapa ett virtuellt nätverk och ett undernät. Det här steget är valfritt om du använder ett befintligt nätverk och undernät. I det här exemplet används ett enda virtuellt nätverk och undernät för båda molntjänstrollerna (WebRole och 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. Skapa en offentlig IP-adress och ange egenskapen DNS-etikett för den offentliga IP-adressen. Cloud Services (utökat stöd) stöder endast offentliga IP-adresser för grundläggande SKU. Offentliga IP-adresser för standard-SKU fungerar inte med Cloud Services. Om du använder en statisk IP-adress måste du referera till den som en reserverad IP-adress i tjänstkonfigurationsfilen (.cscfg).

    $publicIp = New-AzPublicIpAddress -Name “ContosIp” -ResourceGroupName “ContosOrg” -Location “East US” -AllocationMethod Dynamic -IpAddressVersion IPv4 -DomainNameLabel “contosoappdns” -Sku Basic 
    
  5. Skapa ett nätverksprofilobjekt och associera den offentliga IP-adressen till lastbalanserarens klientdel. Azure-plattformen skapar automatiskt en "klassisk" SKU-lastbalanserare i samma prenumeration som molntjänstresursen. Lastbalanserarens resurs är en skrivskyddad resurs i Azure Resource Manager. Alla uppdateringar av resursen stöds endast via molntjänstdistributionsfilerna (.cscfg & .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. Skapa ett nyckelvalv. Det här Nyckelvalvet används för att lagra certifikat som är associerade med cloud service-rollerna (utökad support). Key Vault måste finnas i samma region och prenumeration som molntjänsten och ha ett unikt namn. Mer information finns i Använda certifikat med Azure Cloud Services (utökad support).

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. Uppdatera åtkomstprincipen för Key Vault och bevilja certifikatbehörigheter till ditt användarkonto.

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

    Alternativt kan du ange åtkomstprincip via ObjectId (som kan hämtas genom att köra Get-AzADUser).

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. I det här exemplet lägger vi till ett självsignerat certifikat i ett Key Vault. Certifikatets tumavtryck måste läggas till i cloud service-konfigurationsfilen (.cscfg) för distribution på molntjänstroller.

    $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. Skapa ett minnesinternt os-profilobjekt. OS-profilen anger certifikaten, som är associerade med molntjänstroller. Det här är samma certifikat som skapades i föregående steg.

    $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. Skapa ett minnesinternt rollprofilobjekt. Rollprofil definierar en roll-SKU-specifika egenskaper, till exempel namn, kapacitet och nivå. I det här exemplet har vi definierat två roller: frontendRole och backendRole. Information om rollprofilen ska matcha rollkonfigurationen som definierats i konfigurationsfilen (cscfg) och tjänstdefinitionsfilen (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. (Valfritt) Skapa ett minnesinternt tilläggsprofilobjekt som du vill lägga till i molntjänsten. I det här exemplet lägger vi till RDP-tillägget.

    $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)} 
    

    ConfigFile bör endast ha PublicConfig-taggar och bör innehålla ett namnområde enligt följande:

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (Valfritt) Definiera Taggar som PowerShell-hashtabell som du vill lägga till i molntjänsten.

    $tag=@{"Owner" = "Contoso"} 
    
  13. Skapa molntjänstdistribution med hjälp av profilobjekt och SAS-URL:er.

    $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 
    

Nästa steg