Развертывание Облачные службы (расширенная поддержка) с помощью шаблона ARM
В этой статье показано, как использовать шаблон Azure Resource Manager (шаблон ARM) для создания развертывания Azure Облачные службы (расширенная поддержка).
Необходимые компоненты
Выполните следующие действия в качестве необходимых компонентов для создания развертывания с помощью шаблонов ARM.
Просмотрите предварительные требования развертывания для Облачные службы (расширенная поддержка) и создайте необходимые ресурсы.
Создайте новую группу ресурсов с помощью портал Azure или Azure PowerShell. Этот шаг необязателен, если вы используете существующую группу ресурсов.
Создайте новую учетную запись хранения с помощью портал Azure или Azure PowerShell. Этот шаг необязателен, если вы используете существующую учетную запись хранения.
Отправьте файл пакета (CSPKG или .zip) и файл конфигурации (CSCFG) в учетную запись хранения с помощью портал Azure или Azure PowerShell. Сохраните URI подписанного URL-адреса (SAS) для обоих файлов, чтобы добавить его в шаблон ARM на следующем шаге.
(Необязательно) Создайте хранилище ключей и передайте в него сертификаты.
- Сертификаты можно подключить к развертыванию для безопасного взаимодействия с службой и из нее. При использовании сертификатов отпечаток сертификата должен быть указан в файле конфигурации (CSCFG) и передаваться в хранилище ключей. Вы можете создать хранилище ключей с помощью портал Azure или Azure PowerShell.
- Связанное хранилище ключей должно находиться в том же регионе и подписке, что и развертывание Облачные службы (расширенная поддержка).
- Связанное хранилище ключей должно иметь соответствующие разрешения, чтобы ресурсы Облачные службы (расширенная поддержка) могли получать сертификаты из хранилища ключей. Дополнительные сведения см. в статье "Использование сертификатов с Облачные службы (расширенная поддержка)".
- Хранилище ключей должно ссылаться в
osProfile
разделе шаблона ARM, как показано на следующем шаге.
Развертывание Облачных служб (расширенная поддержка)
Чтобы развернуть Облачные службы (расширенная поддержка) с помощью шаблона:
Примечание.
Проще и быстрее создавать шаблон ARM и файл параметров с помощью портал Azure. Созданный шаблон ARM можно скачать на портале, чтобы создать Облачные службы (расширенную поддержку) с помощью Azure PowerShell.
Создайте виртуальную сеть. Имя виртуальной сети должно соответствовать ссылкам на виртуальную сеть в файле конфигурации (CSCFG). Если вы используете существующую виртуальную сеть, опустите этот раздел из шаблона ARM.
"resources": [ { "apiVersion": "2019-08-01", "type": "Microsoft.Network/virtualNetworks", "name": "[parameters('vnetName')]", "location": "[parameters('location')]", "properties": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/16" ] }, "subnets": [ { "name": "WebTier", "properties": { "addressPrefix": "10.0.0.0/24" } } ] } } ]
При создании новой виртуальной сети добавьте в раздел следующие строки
dependsOn
, чтобы убедиться, что платформа создает виртуальную сеть перед созданием экземпляра Облачные службы (расширенная поддержка):"dependsOn": [ "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" ]
Создайте общедоступный IP-адрес и (необязательно) задайте свойство метки DNS общедоступного IP-адреса. При использовании статического IP-адреса необходимо ссылаться на него как зарезервированный IP-адрес в файле конфигурации (CSCFG). Если вы используете существующий IP-адрес, пропустите этот шаг и добавьте сведения IP-адреса непосредственно в параметры конфигурации подсистемы балансировки нагрузки в шаблоне ARM.
"resources": [ { "apiVersion": "2019-08-01", "type": "Microsoft.Network/publicIPAddresses", "name": "[parameters('publicIPName')]", "location": "[parameters('location')]", "properties": { "publicIPAllocationMethod": "Dynamic", "idleTimeoutInMinutes": 10, "publicIPAddressVersion": "IPv4", "dnsSettings": { "domainNameLabel": "[variables('dnsName')]" } }, "sku": { "name": "Basic" } } ]
Если вы создаете новый IP-адрес, добавьте в раздел следующие строки
dependsOn
, чтобы убедиться, что платформа создает IP-адрес перед созданием экземпляра Облачные службы (расширенная поддержка):"dependsOn": [ "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" ]
Создайте объект Облачные службы (расширенная поддержка). Добавьте соответствующие
dependsOn
ссылки при развертывании виртуальных сетей или общедоступных IP-адресов в шаблоне.{ "apiVersion": "2021-03-01", "type": "Microsoft.Compute/cloudServices", "name": "[variables('cloudServiceName')]", "location": "[parameters('location')]", "tags": { "DeploymentLabel": "[parameters('deploymentLabel')]", "DeployFromVisualStudio": "true" }, "dependsOn": [ "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]", "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" ], "properties": { "packageUrl": "[parameters('packageSasUri')]", "configurationUrl": "[parameters('configurationSasUri')]", "upgradeMode": "[parameters('upgradeMode')]" } }
Создайте объект профиля сети для развертывания и свяжите общедоступный IP-адрес с внешним интерфейсом подсистемы балансировки нагрузки. Платформа Azure автоматически создает подсистему балансировки нагрузки.
"networkProfile": { "loadBalancerConfigurations": [ { "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/loadBalancers/', variables('lbName'))]", "name": "[variables('lbName')]", "properties": { "frontendIPConfigurations": [ { "name": "[variables('lbFEName')]", "properties": { "publicIPAddress": { "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" } } } ] } } ] }
Добавьте ссылку на хранилище ключей в
osProfile
разделе шаблона ARM. Хранилище ключей хранит сертификаты, связанные с Облачные службы (расширенная поддержка). Добавьте сертификаты в хранилище ключей и наведите ссылку на отпечатки сертификата в файле конфигурации (CSCFG). Кроме того, задайте политику доступа к хранилищу ключей для Azure Виртуальные машины для развертывания в портал Azure, чтобы ресурс Облачные службы (расширенная поддержка) смог получить сертификаты, хранящиеся в качестве секретов в хранилище ключей. Хранилище ключей должно находиться в том же регионе и подписке, что и ресурс Облачные службы (расширенная поддержка) и иметь уникальное имя. Дополнительные сведения см. в статье "Использование сертификатов с Облачные службы (расширенная поддержка)"."osProfile": { "secrets": [ { "sourceVault": { "id": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.KeyVault/vaults/{keyvault-name}" }, "vaultCertificates": [ { "certificateUrl": "https://{keyvault-name}.vault.azure.net:443/secrets/ContosoCertificate/{secret-id}" } ] } ] }
Примечание.
sourceVault
в шаблоне ARM — это значение идентификатора ресурса для хранилища ключей. Эти сведения можно получить, найдя идентификатор ресурса в разделе "Свойства " хранилища ключей.- Вы можете получить значение,
certificateUrl
перейдя к сертификату в хранилище ключей с меткой "Секретный идентификатор". certificateUrl
должен иметь формуhttps://{keyvault-endpoint}/secrets/{secret-name}/{secret-id}
.
- Вы можете получить значение,
Создайте профиль роли. Убедитесь, что количество ролей, количество экземпляров в каждой роли, имена ролей и размеры ролей совпадают в файле конфигурации (CSCFG), файле определения (CSDEF) и
roleProfile
разделе в шаблоне ARM."roleProfile": { "roles": { "value": [ { "name": "WebRole1", "sku": { "name": "Standard_D1_v2", "capacity": "1" } }, { "name": "WorkerRole1", "sku": { "name": "Standard_D1_v2", "capacity": "1" } } ] } }
(Необязательно) Создайте профиль расширения для добавления расширений в развертывание Облачные службы (расширенная поддержка). В следующем примере добавляется расширение протокола удаленного рабочего стола (RDP) и расширение Диагностика Azure.
Примечание.
Пароль для RDP должен составлять от 8 до 123 символов и должен соответствовать по крайней мере трем из следующих требований к сложности паролей:
Содержит прописный символ.
Содержит строчный символ.
Содержит числовую цифру.
Содержать специальный знак.
Не удается содержать символ элемента управления."extensionProfile": { "extensions": [ { "name": "RDPExtension", "properties": { "autoUpgradeMinorVersion": true, "publisher": "Microsoft.Windows.Azure.Extensions", "type": "RDP", "typeHandlerVersion": "1.2.1", "settings": "<PublicConfig>\r\n <UserName>[Insert Username]</UserName>\r\n <Expiration>1/21/2022 12:00:00 AM</Expiration>\r\n</PublicConfig>", "protectedSettings": "<PrivateConfig>\r\n <Password>[Insert Password]</Password>\r\n</PrivateConfig>" } }, { "name": "Microsoft.Insights.VMDiagnosticsSettings_WebRole1", "properties": { "autoUpgradeMinorVersion": true, "publisher": "Microsoft.Azure.Diagnostics", "type": "PaaSDiagnostics", "typeHandlerVersion": "1.5", "settings": "[parameters('wadPublicConfig_WebRole1')]", "protectedSettings": "[parameters('wadPrivateConfig_WebRole1')]", "rolesAppliedTo": [ "WebRole1" ] } } ] }
Просмотрите полный шаблон:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "cloudServiceName": { "type": "string", "metadata": { "description": "Name of the cloud service" } }, "location": { "type": "string", "metadata": { "description": "Location of the cloud service" } }, "deploymentLabel": { "type": "string", "metadata": { "description": "Label of the deployment" } }, "packageSasUri": { "type": "securestring", "metadata": { "description": "SAS URI of the package (.cspkg) file to deploy" } }, "configurationSasUri": { "type": "securestring", "metadata": { "description": "SAS URI of the configuration (.cscfg) file" } }, "roles": { "type": "array", "metadata": { "description": "Roles created in the cloud service application" } }, "wadPublicConfig_WebRole1": { "type": "string", "metadata": { "description": "Public configuration of the Azure Diagnostics extension" } }, "wadPrivateConfig_WebRole1": { "type": "securestring", "metadata": { "description": "Private configuration of the Azure Diagnostics extension" } }, "vnetName": { "type": "string", "defaultValue": "[concat(parameters('cloudServiceName'), 'VNet')]", "metadata": { "description": "Name of vitual network" } }, "publicIPName": { "type": "string", "defaultValue": "contosocsIP", "metadata": { "description": "Name of public IP address" } }, "upgradeMode": { "type": "string", "defaultValue": "Auto", "metadata": { "UpgradeMode": "UpgradeMode of the CloudService" } } }, "variables": { "cloudServiceName": "[parameters('cloudServiceName')]", "subscriptionID": "[subscription().subscriptionId]", "dnsName": "[variables('cloudServiceName')]", "lbName": "[concat(variables('cloudServiceName'), 'LB')]", "lbFEName": "[concat(variables('cloudServiceName'), 'LBFE')]", "resourcePrefix": "[concat('/subscriptions/', variables('subscriptionID'), '/resourceGroups/', resourceGroup().name, '/providers/')]" }, "resources": [ { "apiVersion": "2019-08-01", "type": "Microsoft.Network/virtualNetworks", "name": "[parameters('vnetName')]", "location": "[parameters('location')]", "properties": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/16" ] }, "subnets": [ { "name": "WebTier", "properties": { "addressPrefix": "10.0.0.0/24" } } ] } }, { "apiVersion": "2019-08-01", "type": "Microsoft.Network/publicIPAddresses", "name": "[parameters('publicIPName')]", "location": "[parameters('location')]", "properties": { "publicIPAllocationMethod": "Dynamic", "idleTimeoutInMinutes": 10, "publicIPAddressVersion": "IPv4", "dnsSettings": { "domainNameLabel": "[variables('dnsName')]" } }, "sku": { "name": "Basic" } }, { "apiVersion": "2021-03-01", "type": "Microsoft.Compute/cloudServices", "name": "[variables('cloudServiceName')]", "location": "[parameters('location')]", "tags": { "DeploymentLabel": "[parameters('deploymentLabel')]", "DeployFromVisualStudio": "true" }, "dependsOn": [ "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]", "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" ], "properties": { "packageUrl": "[parameters('packageSasUri')]", "configurationUrl": "[parameters('configurationSasUri')]", "upgradeMode": "[parameters('upgradeMode')]", "roleProfile": { "roles": [ { "name": "WebRole1", "sku": { "name": "Standard_D1_v2", "capacity": "1" } }, { "name": "WorkerRole1", "sku": { "name": "Standard_D1_v2", "capacity": "1" } } ] }, "networkProfile": { "loadBalancerConfigurations": [ { "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/loadBalancers/', variables('lbName'))]", "name": "[variables('lbName')]", "properties": { "frontendIPConfigurations": [ { "name": "[variables('lbFEName')]", "properties": { "publicIPAddress": { "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" } } } ] } } ] }, "osProfile": { "secrets": [ { "sourceVault": { "id": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.KeyVault/vaults/{keyvault-name}" }, "vaultCertificates": [ { "certificateUrl": "https://{keyvault-name}.vault.azure.net:443/secrets/ContosoCertificate/{secret-id}" } ] } ] }, "extensionProfile": { "extensions": [ { "name": "RDPExtension", "properties": { "autoUpgradeMinorVersion": true, "publisher": "Microsoft.Windows.Azure.Extensions", "type": "RDP", "typeHandlerVersion": "1.2.1", "settings": "<PublicConfig>\r\n <UserName>[Insert Username]</UserName>\r\n <Expiration>1/21/2022 12:00:00 AM</Expiration>\r\n</PublicConfig>", "protectedSettings": "<PrivateConfig>\r\n <Password>[Insert Password]</Password>\r\n</PrivateConfig>" } }, { "name": "Microsoft.Insights.VMDiagnosticsSettings_WebRole1", "properties": { "autoUpgradeMinorVersion": true, "publisher": "Microsoft.Azure.Diagnostics", "type": "PaaSDiagnostics", "typeHandlerVersion": "1.5", "settings": "[parameters('wadPublicConfig_WebRole1')]", "protectedSettings": "[parameters('wadPrivateConfig_WebRole1')]", "rolesAppliedTo": [ "WebRole1" ] } } ] } } } ] }
Чтобы создать развертывание Облачные службы (расширенная поддержка), разверните файл шаблона и параметра (чтобы определить параметры в файле шаблона). Эти примеры шаблонов можно использовать.
New-AzResourceGroupDeployment -ResourceGroupName "ContosOrg" -TemplateFile "file path to your template file" -TemplateParameterFile "file path to your parameter file"
Связанный контент
- Просмотрите часто задаваемые вопросы об Облачных службах (расширенная поддержка)
- Разверните Облачные службы (расширенную поддержку) с помощью портал Azure, Azure PowerShell или Visual Studio.
- Перейдите в репозиторий примеров для Облачных служб (расширенная поддержка).