Развертывание Облачной службы (расширенная поддержка) с помощью PowerShell
В этой статье описано, как использовать модуль PowerShell Az.CloudService
для развертывания Облачных служб (расширенная поддержка) в Azure с несколькими ролями (WebRole и WorkerRole).
Предварительные требования
Ознакомьтесь с предварительными требованиями развертывания для Облачных служб (расширенная поддержка) и создайте связанные ресурсы.
Установите модуль Az.CloudService PowerShell.
Install-Module -Name Az.CloudService
Создание группы ресурсов Этот шаг можно пропустить, если вы используете имеющуюся группу ресурсов.
New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US”
Создайте учетную запись хранения и контейнер, которые будут использоваться для хранения файлов пакета Облачной службы (.cspkg) и файлов Конфигурации службы (.cscfg). Используйте для учетной записи хранения уникальное имя. Этот шаг можно пропустить, если используется существующая учетная запись хранения.
$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
Развертывание Облачных служб (расширенная поддержка)
Используйте любой из следующих командлетов PowerShell для развертывания Облачных служб (расширенная поддержка):
Быстрое создание Облачной службы с помощью учетной записи хранения:
- этот параметр задает входные файлы .cscfg, .cspkg и .csdef в качестве входных данных вместе с учетной записью хранения;
- профиль роли облачной службы, сетевой профиль и профиль ОС создаются командлетом с минимальным участием пользователя;
- для входных данных сертификата необходимо указать имя keyvault. Отпечатки сертификата в keyvault проверяются по сведениям, указанным в файле .cscfg.
Быстрое создание Облачной службы с помощью универсального кода ресурса SAS:
- этот параметр задает входные данные универсального кода ресурса SAS для файла .cspkg вместе с локальными путями для файлов .csdef и .cscfg. Ввод учетной записи хранения не требуется;
- профиль роли облачной службы, сетевой профиль и профиль ОС создаются командлетом с минимальным участием пользователя;
- для входных данных сертификата необходимо указать имя keyvault. Отпечатки сертификата в keyvault проверяются по сведениям, указанным в файле .cscfg.
-
- Этот параметр задает входные данные универсальных кодов ресурса SAS для .cscfg и .cspkg файлов;
- роль, сеть, ОС и профиль расширения должны быть указаны пользователем и должны соответствовать значениям в файлах .cscfg и .csdef.
Быстрое создание Облачной службы с помощью учетной записи хранения
Создание развертывания облачной службы с помощью файлов .cscfg, .csdef и .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>]
Быстрое создание Облачной службы с помощью универсального кода ресурса (URI) SAS
Отправьте пакет Облачной службы (CSPKG-файл) в учетную запись хранения.
$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>"
Создайте развертывание Облачной службы с помощью файлов .cscfg, .csdef и .cspkg универсального кода ресурса (URI) SAS.
New-AzCloudService -Name "ContosoCS" ` -ResourceGroupName "ContosOrg" ` -Location "EastUS" ` -ConfigurationFile $cspkgFilePath ` -DefinitionFile $csdefFilePath ` -PackageURL $cspkgUrl ` [-KeyVaultName <string>]
Создание облачной службы с помощью URI SAS для объектов профилей &
Отправьте конфигурацию облачной службы (CSCFG-файл) в учетную запись хранения.
$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
Отправьте пакет Облачной службы (CSPKG-файл) в учетную запись хранения.
$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
Создайте виртуальную сеть и подсеть. Этот шаг можно пропустить, если используется имеющаяся сеть и подсеть. В этом примере используются одна виртуальная сеть и подсеть для обеих ролей облачной службы (WebRole и 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
Создайте общедоступный IP-адрес и задайте свойство метки DNS для этого адреса. Облачные службы (расширенная поддержка) поддерживают только общедоступные Базовые IP-адреса SKU. Общедоступные IP-адреса с номерами SKU категории "Стандартный" не работают с облачными службами. Если вы используете статический IP-адрес, он должен быть указан как зарезервированный IP-адрес в файле .cscfg конфигурации службы.
$publicIp = New-AzPublicIpAddress -Name “ContosIp” -ResourceGroupName “ContosOrg” -Location “East US” -AllocationMethod Dynamic -IpAddressVersion IPv4 -DomainNameLabel “contosoappdns” -Sku Basic
Создайте объект сетевого профиля и свяжите общедоступный IP-адрес с внешним интерфейсом подсистемы балансировки нагрузки. Платформа Azure автоматически создает подсистему балансировки нагрузки с номером SKU уровня "Классический" в той же подписке, что и ресурс облачной службы. Ресурс подсистемы балансировки нагрузки представляет собой ресурс "только для чтения" в Azure Resource Manager. Любые обновления ресурса поддерживаются только через файлы развертывания облачной службы (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}
создание Key Vault; Этот Key Vault будет использоваться для хранения сертификатов, связанных с ролями Облачной службы (расширенная поддержка). Key Vault должен находиться в тех же регионе и подписке, что и облачная служба, и иметь уникальное имя. Дополнительные сведения см. в статье Использование сертификатов с Облачными службами Azure (расширенная поддержка).
New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US”
Обновите политику доступа Key Vault и предоставьте учетной записи пользователя разрешения на доступ к сертификату.
Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -EnabledForDeployment Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete
Кроме этого, можно задать политику доступа через ObjectId (его можно получить, запустив командлет
Get-AzADUser
)Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete
В этом примере мы добавим в хранилище ключей самозаверяющий сертификат. Отпечаток этого сертификата необходимо добавить в CSCFG-файл конфигурации Облачной службы для развертывания в ролях облачной службы.
$Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" -SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" -CertificatePolicy $Policy
Создайте объект профиля ОС в памяти. Профиль ОС определяет сертификаты, связанные с ролями облачной службы. Этим сертификатом будет сертификат, созданный на предыдущем шаге.
$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)}
Создайте объект профиля роли в памяти. Профиль роли определяет свойства конкретной ценовой категории роли, такие как имя, емкость и уровень. В этом примере определены две роли: frontendRole и backendRole. Сведения о профиле роли должны соответствовать конфигурации роли, определенной в CSCFG-файле конфигурации и 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)}
(Необязательно.) Создайте объект профиля расширения в памяти, который вы хотите добавить в облачную службу. В этом примере мы добавим расширение 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)}
Обратите внимание, что ConfigFile должен иметь только теги PublicConfig и содержать следующее пространство имен:
<?xml version="1.0" encoding="utf-8"?> <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration"> ............... </PublicConfig>
(Необязательно.) Определите теги как хэш-таблицу PowerShell, которую вы хотите добавить в облачную службу.
$tag=@{"Owner" = "Contoso"}
Создайте развертывание облачной службы с помощью URL-адресов SAS объектов & профиля.
$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
Дальнейшие действия
- Ознакомьтесь с часто задаваемыми вопросами об Облачных службах (расширенная поддержка).
- Разверните Облачную службу (расширенная поддержка) с помощью портала Azure, PowerShell, шаблона или Visual Studio.
- Перейдите в репозиторий примеров для Облачных служб (расширенная поддержка).