Aktualisieren einer Ressource in einer Azure Resource Manager-Vorlage
Es kann vorkommen, dass Sie eine Ressource während einer Bereitstellung aktualisieren müssen. Dies ist z. B. der Fall, wenn Sie alle Eigenschaften für eine Ressource erst angeben können, nachdem andere, abhängige Ressourcen erstellt wurden. Wenn Sie z.B einen Back-End-Adresspool für einen Load Balancer erstellen, könnten Sie vielleicht die Netzwerkschnittstellen (NICs) auf Ihren virtuellen Computern (VMs) aktualisieren, um sie in den Back-End-Pool einzubeziehen. Resource Manager unterstützt das Aktualisieren von Ressourcen während der Bereitstellung, aber Sie müssen die Vorlage ordnungsgemäß entwerfen, um Fehler zu vermeiden und sicherzustellen, dass die Bereitstellung als Update behandelt wird.
Wenn Sie eine Ressource erstellen und später aktualisieren, wird zweimal darauf verwiesen. Sie verweisen darauf zuerst in der Vorlage, mit der sie erstellt wird. Wenn Sie die Ressource später aktualisieren, verweisen Sie mit demselben Namen darauf. Wenn jedoch zwei Ressourcen in einer Vorlage den gleichen Namen besitzen, löst der Resource Manager eine Ausnahme aus. Um diesen Fehler zu vermeiden, geben Sie die aktualisierte Ressource mit dem Ressourcentyp Microsoft.Resources/deployments
in einer zweiten Vorlage an, die entweder verknüpft oder als Untervorlage enthalten ist.
In der zweiten Vorlage müssen Sie entweder den Namen der zu ändernden Eigenschaft oder einen neuen Namen für eine hinzuzufügende Eigenschaft angeben. Sie müssen auch die Namen und ursprünglichen Werte der Eigenschaften angeben, die sich nicht ändern. Wenn Sie eine der ursprünglichen Eigenschaften nicht angeben, geht Resource Manager davon aus, dass Sie eine neue Ressource erstellen möchten, und die ursprüngliche Ressource wird gelöscht.
Beispielvorlage
Sehen wir uns eine Beispielvorlage an, die diese Technik veranschaulicht. Die Vorlage stellt das virtuelle Netzwerk firstVNet
bereit, das ein Subnetz mit dem Namen firstSubnet
enthält. Anschließend stellt sie eine virtuelle Netzwerkschnittstelle (NIC) mit dem Namen nic1
bereit und ordnet sie dem Subnetz zu. Eine Bereitstellungsressource namens updateVNet
enthält eine geschachtelte Vorlage, die firstVNet
durch Hinzufügen eines zweiten Subnetzes namens secondSubnet
aktualisiert.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [
{
"apiVersion": "2020-05-01",
"name": "firstVNet",
"location": "[resourceGroup().location]",
"type": "Microsoft.Network/virtualNetworks",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/22"
]
},
"subnets": [
{
"name": "firstSubnet",
"properties": {
"addressPrefix": "10.0.0.0/24"
}
}
]
}
},
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/networkInterfaces",
"name": "nic1",
"location": "[resourceGroup().location]",
"dependsOn": [
"firstVNet"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'firstVNet', 'firstSubnet')]"
}
}
}
]
}
},
{
"apiVersion": "2020-06-01",
"type": "Microsoft.Resources/deployments",
"name": "updateVNet",
"dependsOn": [
"nic1"
],
"properties": {
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {},
"variables": {},
"resources": [
{
"apiVersion": "2020-05-01",
"name": "firstVNet",
"location": "[resourceGroup().location]",
"type": "Microsoft.Network/virtualNetworks",
"properties": {
"addressSpace": "[reference('firstVNet').addressSpace]",
"subnets": [
{
"name": "[reference('firstVNet').subnets[0].name]",
"properties": {
"addressPrefix": "[reference('firstVNet').subnets[0].properties.addressPrefix]"
}
},
{
"name": "secondSubnet",
"properties": {
"addressPrefix": "10.0.1.0/24"
}
}
]
}
}
],
"outputs": {}
}
}
}
],
"outputs": {}
}
Betrachten Sie das Ressourcenobjekt für unsere firstVNet
- Ressource. Beachten Sie, dass neue Einstellungen für firstVNet
in einer geschachtelten Vorlage angegeben werden, da Resource Manager keine gleichnamige Bereitstellung innerhalb einer Vorlage erlaubt und geschachtelte Vorlagen als eine andere Vorlage gelten. Durch die neuen Angaben für die Werte unserer firstSubnet
-Ressource weisen wir Resource Manager an, die vorhandene Ressource zu aktualisieren, anstatt sie zu löschen und erneut bereitzustellen. Abschließend werden unsere neuen Einstellungen für secondSubnet
während des Updates übernommen.
Testen der Vorlage
Eine Beispielvorlage finden Sie auf GitHub. Führen Sie zum Bereitstellen der Vorlage die folgenden Befehle der Azure-Befehlszeilenschnittstelle aus:
az group create --location <location> --name <resource-group-name>
az deployment group create -g <resource-group-name> \
--template-uri https://raw.githubusercontent.com/mspnp/template-examples/master/example1-update/deploy.json
Öffnen Sie nach der Bereitstellung die Ressourcengruppe, die Sie im Portal angegeben haben. Sie sehen ein virtuelles Netzwerk mit dem Namen firstVNet
und eine NIC mit dem Namen nic1
. Klicken Sie auf firstVNet
und dann auf subnets
. Sie sehen das ursprünglich erstellte firstSubnet
und das secondSubnet
, das in der updateVNet
-Ressource hinzugefügt wurde.
Gehen Sie dann zurück zur Ressourcengruppe, und klicken Sie auf nic1
und dann auf IP configurations
. Im IP configurations
-Abschnitt ist subnet
auf firstSubnet (10.0.0.0/24)
festgelegt.
Das ursprüngliche firstVNet
wurde nicht neu erstellt, sondern aktualisiert. Wäre firstVNet
neu erstellt worden, wäre nic1
nicht firstVNet
zugeordnet.
Nächste Schritte
- Azure Resource Manager
- Was sind ARM-Vorlagen?
- Tutorial: Erstellen und Bereitstellen Ihrer ersten ARM-Vorlage
- Tutorial: Hinzufügen einer Ressource zu Ihrer ARM-Vorlage
- Bewährte Methoden für ARM-Vorlagen
- Dokumentation zu Azure Resource Manager
- Dokumentation zu ARM-Vorlagen