Resources repliceren met behulp van de Azure Stack Hub-abonnementsreplicator
U kunt het PowerShell-script van de Azure Stack Hub-abonnementsreplicator gebruiken om de resources te kopiëren tussen Azure Stack Hub-abonnementen, over 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 verwijst naar scriptbewerkingen.
U vindt de scripts die in dit artikel worden gebruikt in de Azure Intelligent Edge Patterns GitHub opslagplaats. De scripts bevinden zich in de map abonnementsreplicator .
Overzicht van abonnementsreplicator
De Azure-abonnementsreplicator is ontworpen om modulair te zijn. Dit hulpprogramma maakt gebruik van een kernprocessor waarmee de resourcereplicatie wordt ingedeeld. 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 op het bronabonnement.
Haalt de resources op en geeft ze 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 doorgegeven aan de resources.
post_process.ps1
Na het verwerken van de uitvoer die is gegenereerd door de aangepaste processor om deze voor te bereiden voor implementatie in het doelabonnement.
Hiermee genereert u implementatiecode om de resources in het doelabonnement te implementeren.
De drie scripts bepalen de informatiestroom op een standaard manier om meer flexibiliteit mogelijk te maken. Als u bijvoorbeeld ondersteuning voor aanvullende resources toevoegt, 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 wordt altijd benoemd met behulp van de typegegevens in een resource. Als u bijvoorbeeld een object van een virtuele machine opneemt $vm , wordt uitgevoerd $vm. Het type zou opleveren Microsoft.Compute/virtualMachines. Dat betekent dat een processor voor een virtuele machine de naam virtualMachines_processor.ps1zou hebben, de naam moet precies zo zijn als deze wordt weergegeven in de resourcemetagegevens, zoals 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 te dicteren hoe die informatie uit de metagegevens van de resource moet worden gehaald. De aangepaste processor neemt vervolgens alle geëxtraheerde gegevens en gebruikt deze om een parametersbestand 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.
Er bevindt zich een map in de replicatorbestandsstructuur 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, zou de naam van een Azure Resource Manager sjabloongenerator voor virtuele machines de naam virtualMachines_ARM_Template_Generator.ps1hebben. 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 van de beschikbaarheidsset aangeeft waarvan de virtuele machine deel uitmaakt. Op die manier wordt de virtuele machine automatisch toegevoegd aan de beschikbaarheidsset bij de implementatie wanneer de virtuele machine wordt geïmplementeerd in het nieuwe abonnement. Deze aangepaste Azure Resource Manager-sjablonen worden opgeslagen in de Custom_ARM_Templates map 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 de bijbehorende implementatiecode genereert, die gebruikmaakt van de cmdlet New-AzResourceGroupDeployment. De implementatiecode wordt vervolgens toegevoegd aan het bestand met de naamDeployResources.ps1opgeslagen in de map Deployment_Files . Ten slotte bepaalt het script de resourcegroep waartoe de resource behoort en controleert u het DeployResourceGroups.ps1 script om te zien of de implementatiecode voor de implementatie van die resourcegroep al bestaat. Als dat niet het geval is, voegt het code toe aan dat script om de resourcegroep te implementeren, als dat wel het geval is.
Dynamische 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:

Afbeeldings-API ophalen in resource_processor.ps1.
Er is echter de kans dat de API-versie van het doelabonnement van het doelabonnement ouder is dan de bronabonnementen 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 de resourceproviders 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, wordt voor elke aanroep naar New-AzResourceGroupDeployment de vlag -asJob en 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 één 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 maken 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 Azure Resource Manager sjabloongenerator, moeten ze de naam van het resourcetype toevoegen aan de $customTypes matrix in post_process.ps1.
Azure-abonnementsreplicator uitvoeren
Als u het hulpprogramma azure-abonnementreplicator (v3) wilt uitvoeren, moet u resource_retriever.ps1 starten door alle parameters op te geven. De parameter resourceType , er is een optie om Alles te kiezen in plaats van één resourcetype. Als Alles is geselecteerd, verwerkt resource_retriever.ps1 alle resources in een volgorde, zodat afhankelijke resources eerst worden geïmplementeerd wanneer de implementatie wordt uitgevoerd. VNets worden bijvoorbeeld vóór virtuele machines geïmplementeerd omdat voor virtuele machines een VNet moet worden geïmplementeerd 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 resources geïmplementeerd die zijn verwerkt. In het geval dat het hulpprogramma is uitgevoerd met All of Microsoft.Compute/virtualMachines als resourcetype, wordt DeployResources.ps1 de gebruiker gevraagd een beheerderswachtwoord voor virtuele machines 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.
Bekijk 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 de resource-implementatie (voer het DeployResources.ps1 script uit).

Voer uit
Get-Jobom 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 Deployment_Files, Parameter_Files en Custom_ARM_Templates mappen en alle bijbehorende inhoud verwijderd.
Bewerkingen voor abonnementsreplicator
De Azure-abonnementsreplicator (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 Alles als resourcetype, wordt de volgende volgorde gevolgd bij het repliceren en implementeren (in de onderstaande lijst worden de configuratie van alle resources gerepliceerd, bijvoorbeeld 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
Er worden alleen beheerde schijven gemaakt voor besturingssysteemschijven en gegevensschijven. Momenteel is er 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.
Om een geslaagde replicatie te garanderen, 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 voor het opslagaccount dat alle namen van opslagaccounts uniek zijn in alle commerciële Azure-regio's of in alle abonnementen in een Azure Stack Hub-regio/-exemplaar. Het repliceren van opslagaccounts in verschillende Azure Stack Hub-exemplaren slaagt omdat de Stacks afzonderlijke regio's/instanties zijn.