Führen Sie die folgenden Schritte als Voraussetzung für die Erstellung Ihrer Bereitstellung mithilfe von ARM-Vorlagen aus.
So stellen Sie Cloud Services (erweiterter Support) mithilfe einer Vorlage bereit
Erstellen Sie ein virtuelles Netzwerk. Der Name des virtuellen Netzwerks muss den VNet-Verweisen in der Konfigurationsdatei (CSCFG-Datei) entsprechen. Sollten Sie ein vorhandenes virtuelles Netzwerk verwenden, überspringen Sie diesen Abschnitt in der ARM-Vorlage.
"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"
}
}
]
}
}
]
Wenn Sie ein neues virtuelles Netzwerk erstellen, fügen Sie dem Abschnitt dependsOn
die folgenden Zeilen hinzu, um sicherzustellen, dass die Plattform das virtuelle Netzwerk erstellt, bevor sie die Instanz für Cloud Services (erweiterter Support) erstellt:
"dependsOn": [
"[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]"
]
Erstellen Sie eine öffentliche IP-Adresse, und legen Sie (optional) die DNS-Bezeichnungseigenschaft der öffentlichen IP-Adresse fest. Wenn Sie eine statische IP-Adresse verwenden, müssen Sie in der Konfigurationsdatei (CSCFG) auf sie als reservierte IP-Adresse verweisen. Wenn Sie eine vorhandene IP-Adresse verwenden, überspringen Sie diesen Schritt, und fügen Sie die IP-Adressinformationen in Ihrer ARM-Vorlage direkt den Konfigurationseinstellungen für den Lastenausgleich hinzu.
"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"
}
}
]
Wenn Sie eine neue IP-Adresse erstellen, fügen Sie dem Abschnitt dependsOn
die folgenden Zeilen hinzu, um sicherzustellen, dass die Plattform die IP-Adresse erstellt, bevor sie die Instanz für Cloud Services (erweiterter Support) erstellt:
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]"
]
Erstellen Sie ein Objekt für Cloud Services (erweiterter Support). Fügen Sie in Ihrer Vorlage entsprechende dependsOn
-Verweise hinzu, wenn Sie virtuelle Netzwerke oder öffentliche IP-Adressen bereitstellen.
{
"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')]"
}
}
Erstellen Sie ein Netzwerkprofilobjekt für Ihre Bereitstellung, und ordnen Sie die öffentliche IP-Adresse dem Front-End des Lastenausgleichs zu. Die Plattform erstellt automatisch einen Lastenausgleich.
"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'))]"
}
}
}
]
}
}
]
}
Fügen Sie im Abschnitt osProfile
der ARM-Vorlage Ihren Schlüsseltresorverweis hinzu. Ein Schlüsseltresor speichert Zertifikate, die Cloud Services (erweiterter Support) zugeordnet sind. Fügen Sie dem Schlüsseltresor die Zertifikate hinzu, und verweisen Sie dann in der Konfigurationsdatei (.cscfg) auf die Zertifikatfingerabdrücke. Außerdem müssen Sie die Schlüsseltresor-Zugriffsrichtlinien für Azure Virtual Machines für Bereitstellung im Azure-Portal aktivieren, damit die Ressource vom Typ „Cloud Services (erweiterter Support)“ die als Geheimnisse im Schlüsseltresor gespeicherten Zertifikate abrufen kann. Der Schlüsseltresor muss sich in der gleichen Region und im gleichen Abonnement befinden wie die Ressource für Cloud Services (erweiterter Support) und einen eindeutigen Namen besitzen. Weitere Informationen finden Sie unter Verwenden von Zertifikaten mit Azure Cloud Services (erweiterter Support).
"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}"
}
]
}
]
}
Hinweis
sourceVault
in der ARM-Vorlage ist der Wert der Ressourcen-ID für Ihren Schlüsseltresor. Sie rufen diese Informationen ab, indem Sie im Abschnitt Eigenschaften Ihres Schlüsseltresors nach der Ressourcen-ID suchen.
- Sie können den Wert für
certificateUrl
abrufen, indem Sie zum Zertifikat im Schlüsseltresor wechseln, der als Geheimnisbezeichner bezeichnet wird.
certificateUrl
muss das Format https://{keyvault-endpoint}/secrets/{secret-name}/{secret-id}
aufweisen.
Erstellen Sie ein Rollenprofil. Stellen Sie sicher, dass die Anzahl von Rollen, die Anzahl von Instanzen in den einzelnen Rollen, die Rollennamen sowie die Rollengrößen in der Konfigurationsdatei (.cscfg), in der Definitionsdatei (.csdef) und im Abschnitt roleProfile
der ARM-Vorlage jeweils identisch sind.
"roleProfile": {
"roles": {
"value": [
{
"name": "WebRole1",
"sku": {
"name": "Standard_D1_v2",
"capacity": "1"
}
},
{
"name": "WorkerRole1",
"sku": {
"name": "Standard_D1_v2",
"capacity": "1"
}
}
]
}
}
(Optional) Erstellen Sie ein Erweiterungsprofil, um Ihrer Bereitstellung für Cloud Services (erweiterter Support) Erweiterungen hinzuzufügen. Im folgenden Beispiel werden die Erweiterungen für das Remotedesktopprotokoll (RDP) und die Azure-Diagnose hinzugefügt.
Hinweis
Das Kennwort für RDP muss aus 8 bis 123 Zeichen bestehen und mindestens drei der folgenden Anforderungen an die Kennwortkomplexität erfüllen:
Enthält einen Großbuchstaben.
Enthält einen Kleinbuchstaben.
Enthält eine Ziffer.
Enthält ein Sonderzeichen
Darf kein Steuerzeichen enthalten.
"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"
]
}
}
]
}
Überprüfen Sie die gesamte Vorlage:
{
"$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 virtual 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"
]
}
}
]
}
}
}
]
}
Stellen Sie zum Erstellen der Bereitstellung für Cloud Services (erweiterter Support) die Vorlagen- und Parameterdatei (zum Definieren von Parametern in der Vorlagendatei) bereit. Sie können diese Beispielvorlagen verwenden.
New-AzResourceGroupDeployment -ResourceGroupName "ContosOrg" -TemplateFile "file path to your template file" -TemplateParameterFile "file path to your parameter file"