Resources repliceren met behulp van de Azure Stack Hub-abonnementsreplicator
U kunt het PowerShell-script voor de replicator van het Azure Stack Hub-abonnement gebruiken om de resources te kopiëren tussen Azure Stack Hub-abonnementen, tussen Azure Stack Hub-stempels of tussen Azure Stack Hub en Azure. Het replicatorscript leest en herbouwt de Azure Resource Manager-resources uit verschillende Azure- en Azure Stack Hub-abonnementen. In dit artikel wordt beschreven hoe het script werkt, hoe u het script kunt gebruiken en vindt u een referentie voor scriptbewerkingen.
U vindt de scripts die in dit artikel worden gebruikt in de GitHub-opslagplaats Azure Intelligent Edge-patronen . De scripts bevinden zich in de map van de abonnementsreplicator .
Overzicht van abonnementsreplicator
De Azure-abonnementreplicator is ontworpen om modulair te zijn. Dit hulpprogramma maakt gebruik van een kernprocessor die de resourcereplicatie organiseert. Daarnaast ondersteunt het hulpprogramma aanpasbare processors die fungeren als sjablonen voor het kopiëren van verschillende typen resources.
De kernprocessor bestaat uit de volgende drie scripts:
resource_retriever.ps1
Hiermee worden mappen gegenereerd om uitvoerbestanden op te slaan.
Hiermee stelt u de context in voor het bronabonnement.
Haalt de resources op en geeft deze door aan resource_processor.ps1.
resource_processor.ps1
Hiermee wordt de resource verwerkt die door resource_retriever.ps1is doorgegeven.
Bepaalt welke aangepaste processor moet worden gebruikt en geeft de resources door.
post_process.ps1
Post verwerkt de uitvoer die is gegenereerd door de aangepaste processor om deze voor te bereiden voor implementatie in het doelabonnement.
Hiermee wordt implementatiecode gegenereerd om de resources in het doelabonnement te implementeren.
De drie scripts beheren de informatiestroom op een standaard manier om meer flexibiliteit mogelijk te maken. Als u bijvoorbeeld ondersteuning toevoegt voor aanvullende resources, hoeft u geen code in de kernprocessor te wijzigen.
Aangepaste processors, die hierboven zijn genoemd, zijn ps1
bestanden die bepalen hoe een bepaald type resource moet worden verwerkt. De naam van een aangepaste processor krijgt altijd een naam met behulp van het type gegevens in een resource. Bijvoorbeeld, ervan uitgaande dat $vm
het een virtuele-machineobject bevat, waarop wordt uitgevoerd $vm
. Het type zou opleveren Microsoft.Compute/virtualMachines
. Dit betekent dat een processor voor een virtuele machine de naam virtualMachines_processor.ps1
krijgt. De naam moet precies zijn zoals deze wordt weergegeven in de metagegevens van de resource, omdat de kernprocessor bepaalt welke aangepaste processor moet worden gebruikt.
Een aangepaste processor bepaalt hoe een resource moet worden gerepliceerd door te bepalen welke informatie belangrijk is en hoe die informatie uit de metagegevens van de resource moet worden gehaald. De aangepaste processor gebruikt vervolgens alle geëxtraheerde gegevens en gebruikt deze om een parameterbestand te genereren dat wordt gebruikt in combinatie met een Azure Resource Manager-sjabloon om de resource in het doelabonnement te implementeren. Dit parameterbestand wordt opgeslagen in de Parameter_Files nadat het is verwerkt door post_process.ps1.
De bestandsstructuur Replicator bevat een map met de naam Standardized_ARM_Templates. Afhankelijk van de bronomgeving maken de implementaties gebruik van een van deze gestandaardiseerde Azure Resource Manager-sjablonen of moet er een aangepaste Azure Resource Manager-sjabloon worden gegenereerd. In dit geval moet een aangepaste processor een Azure Resource Manager-sjabloongenerator aanroepen. In het voorbeeld dat eerder is gestart, krijgt de naam van een Azure Resource Manager-sjabloongenerator voor virtuele machines de naam virtualMachines_ARM_Template_Generator.ps1. De Sjabloongenerator van Azure Resource Manager is verantwoordelijk voor het maken van een aangepaste Azure Resource Manager-sjabloon op basis van de informatie in de metagegevens van een resource. Als de resource van de virtuele machine bijvoorbeeld metagegevens bevat die aangeven dat deze lid is van een beschikbaarheidsset, maakt de Azure Resource Manager sjabloongenerator een Azure Resource Manager-sjabloon met code die de id opgeeft van de beschikbaarheidsset waarvan de virtuele machine deel uitmaakt. Op die manier wordt de virtuele machine bij de implementatie automatisch toegevoegd aan de beschikbaarheidsset wanneer de virtuele machine wordt geïmplementeerd in het nieuwe abonnement. Deze aangepaste Azure Resource Manager-sjablonen worden opgeslagen in de map Custom_ARM_Templates in de map Standardized_ARM_Templates. De post_processor.ps1 is verantwoordelijk voor het bepalen of een implementatie een gestandaardiseerde Azure Resource Manager-sjabloon of een aangepaste sjabloon moet gebruiken en de bijbehorende implementatiecode moet genereren.
Het script post-process.ps1 is verantwoordelijk voor het opschonen van de parametersbestanden en het maken van de scripts die de gebruiker gaat gebruiken om de nieuwe resources te implementeren. Tijdens de opschoonfase vervangt het script alle verwijzingen naar de bronabonnements-id, tenant-id en locatie door de bijbehorende doelwaarden. Vervolgens wordt het parameterbestand naar de map Parameter_Files uitgevoerd. Vervolgens wordt bepaald of de resource die wordt verwerkt een aangepaste Azure Resource Manager-sjabloon gebruikt en wordt de bijbehorende implementatiecode gegenereerd, die gebruikmaakt van de cmdlet New-AzResourceGroupDeployment. De implementatiecode wordt vervolgens toegevoegd aan het bestand met de naamDeployResources.ps1 opgeslagen in de map Deployment_Files . Ten slotte bepaalt het script de resourcegroep waartoe de resource behoort en controleert het DeployResourceGroups.ps1 script om te zien of de implementatiecode voor het implementeren van die resourcegroep al bestaat. Als dat niet het geval is, wordt code aan dat script toegevoegd om de resourcegroep te implementeren. Als dat het geval is, wordt er niets uitgevoerd.
Dynamisch API-ophalen
Het hulpprogramma heeft een ingebouwd dynamisch API-ophalen, zodat de nieuwste API-versie van de resourceprovider die beschikbaar is in het bronabonnement, wordt gebruikt om de resources in het doelabonnement te implementeren:
Afbeelding van API ophalen in resource_processor.ps1.
De kans bestaat echter dat de API-versie van de resourceprovider van het doelabonnement ouder is dan die van het bronabonnement en geen ondersteuning biedt voor de versie die wordt geleverd vanuit het bronabonnement. In dit geval wordt er een fout gegenereerd wanneer de implementatie wordt uitgevoerd. U kunt dit oplossen door de resourceproviders in het doelabonnement bij te werken zodat deze overeenkomen met die in het bronabonnement.
Parallelle implementaties
Voor het hulpprogramma is een parameter met de naam parallel vereist. Deze parameter gebruikt een booleaanse waarde die aangeeft of de opgehaalde resources parallel moeten worden geïmplementeerd of niet. Als de waarde is ingesteld op true, heeft elke aanroep naar New-AzResourceGroupDeployment de vlag -asJob en worden er codeblokken toegevoegd om te wachten tot parallelle taken zijn voltooid tussen sets resource-implementaties op basis van de resourcetypen. Het zorgt ervoor dat alle resources van het ene type zijn geïmplementeerd voordat het volgende type resource wordt geïmplementeerd. Als de waarde van de parallelle parameter is ingesteld op false, worden de resources allemaal in serie geïmplementeerd.
Extra resourcetypen toevoegen
Het toevoegen van nieuwe resourcetypen is eenvoudig. De ontwikkelaar moet een aangepaste processor en een Azure Resource Manager-sjabloon of een Azure Resource Manager-sjabloongenerator maken. Nadat dit is voltooid, moet de ontwikkelaar het resourcetype toevoegen aan de ValidateSet voor de parameter $resourceType en de $resourceTypes matrix in resource_retriever.ps1. Wanneer u het resourcetype toevoegt aan de $resourceTypes matrix, moet het in de juiste volgorde worden toegevoegd. De volgorde van de matrix bepaalt de volgorde waarin resources worden geïmplementeerd, dus houd rekening met afhankelijkheden. Als de aangepaste processor ten slotte gebruikmaakt van een Sjabloongenerator van Azure Resource Manager, moeten ze de naam van het resourcetype toevoegen aan de $customTypes matrix in post_process.ps1.
Azure-abonnementreplicator uitvoeren
Als u het hulpprogramma Azure-abonnementreplicator (v3) wilt uitvoeren, moet u resource_retriever.ps1 starten en alle parameters opgeven. De parameter resourceType bevat een optie om Alle te kiezen in plaats van één resourcetype. Als Alles is geselecteerd, verwerkt resource_retriever.ps1 alle resources in een volgorde, zodat bij het uitvoeren van de implementatie eerst afhankelijke resources worden geïmplementeerd. VNets worden bijvoorbeeld geïmplementeerd vóór virtuele machines, omdat voor virtuele machines een VNet is vereist om ze correct te kunnen implementeren.
Wanneer het script is uitgevoerd, zijn er drie nieuwe mappen: Deployment_Files, Parameter_Files en Custom_ARM_Templates.
Notitie
Voordat u een van de gegenereerde scripts uitvoert, moet u de juiste omgeving instellen en u aanmelden bij het doelabonnement (in de nieuwe Azure Stack Hub voor ex) en de werkmap instellen op de map Deployment_Files .
Deployment_Files bevat twee bestanden DeployResourceGroups.ps1 en DeployResources.ps1. Als u DeployResourceGroups.ps1 uitvoert, worden de resourcegroepen geïmplementeerd. Als u DeployResources.ps1 uitvoert, worden alle verwerkte resources geïmplementeerd. In het geval dat het hulpprogramma is uitgevoerd met All of Microsoft.Compute/virtualMachines als resourcetype, vraagt DeployResources.ps1 de gebruiker om een beheerderswachtwoord voor de virtuele machine in te voeren dat wordt gebruikt om alle virtuele machines te maken.
Voorbeeld
Voer het script uit.
Notitie
Vergeet niet om de bronomgeving en de abonnementscontext voor het PS-exemplaar te configureren.
Controleer de zojuist gemaakte mappen:
Stel de context in op het doelabonnement, wijzig de map in Deployment_Files, implementeer de resourcegroepen (voer het DeployResourceGroups.ps1-script uit) en start vervolgens de resource-implementatie (voer het DeployResources.ps1-script uit).
Voer uit
Get-Job
om de status te controleren. Get-Job | Receive-Job retourneert de resultaten.
Opschonen
In de map replicatorV3 bevindt zich een bestand met de naam cleanup_generated_items.ps1 . Hiermee worden de mappen Deployment_Files, Parameter_Files en Custom_ARM_Templates mappen en alle bijbehorende inhoud verwijderd.
Bewerkingen voor abonnementreplicator
De Azure-abonnementreplicator (v3) kan momenteel de volgende resourcetypen repliceren:
Microsoft.Compute/availabilitySets
Microsoft.Compute/virtualMachines
Microsoft.Network/loadBalancers
Microsoft.Network/networkSecurityGroups
Microsoft.Network/publicIPAddresses
Microsoft.Network/routeTables
Microsoft.Network/virtualNetworks
Microsoft.Network/virtualNetworkGateways
Microsoft.Storage/storageAccounts
Bij het uitvoeren van het hulpprogramma met Alle als resourcetype, wordt de volgende volgorde gevolgd bij het repliceren en implementeren (in de onderstaande versie wordt de configuratie van alle resources gerepliceerd, zoals sku, aanbieding, enzovoort):
Microsoft.Network/virtualNetworks
- Repliceert: - Alle adresruimten - Alle subnetten
Microsoft.Network/virtualNetworkGateways
- Repliceert: - Openbare IP-configuratie - Subnetconfiguratie - VPN-type - Gatewaytype
Microsoft.Network/routeTables
Microsoft.Network/networkSecurityGroups
- Repliceert: - Alle beveiligingsregels binnenkomend en uitgaand
Microsoft.Network/publicIPAddresses
Microsoft.Network/loadBalancers
- Repliceert: - Privé-IP-adressen - Configuratie van openbaar IP-adres - Subnetconfiguratie
Microsoft.Compute/availabilitySets
- Repliceert: - Aantal foutdomeinen - Aantal updatedomeinen
Microsoft.Storage/storageAccounts
Microsoft.Compute/virtualMachines
- Repliceert:
- Gegevensschijven (zonder gegevens)
- Grootte van virtuele machine
-Besturingssysteem
- Configuratie van diagnostisch opslagaccount
- Openbare IP-configuratie
- Netwerkinterface
- Privé-IP-adres van netwerkinterface
- Configuratie van netwerkbeveiligingsgroep
- Configuratie van beschikbaarheidsset
- Repliceert:
Notitie
Maakt alleen beheerde schijven voor besturingssysteemschijven en gegevensschijven. Er is momenteel geen ondersteuning voor het gebruik van opslagaccounts
Beperkingen
Het hulpprogramma kan resources van het ene abonnement naar het andere repliceren, zolang de resourceproviders van het doelabonnement alle resources en opties ondersteunen die vanuit het bronabonnement worden gerepliceerd.
Voor een geslaagde replicatie moet u ervoor zorgen dat de resourceproviderversies van het doelabonnement overeenkomen met die van het bronabonnement.
Wanneer u repliceert van commerciële Azure naar commerciële Azure of van één abonnement in Azure Stack Hub naar een ander abonnement binnen dezelfde Azure Stack Hub, zijn er problemen bij het repliceren van opslagaccounts. Dit komt door de naamgevingsvereiste van het opslagaccount dat alle namen van opslagaccounts uniek zijn in alle commerciële Azure-accounts of voor alle abonnementen in een Azure Stack Hub-regio/-exemplaar. Het repliceren van opslagaccounts tussen verschillende Azure Stack Hub-exemplaren lukt omdat de stacks afzonderlijke regio's/exemplaren zijn.