Replikera resurser med azure Stack Hub-prenumerationsreplikatorn
Du kan använda PowerShell-skriptet för Azure Stack Hub-prenumerationsreplikatorn för att kopiera resurserna mellan Azure Stack Hub-prenumerationer, mellan Azure Stack Hub-stämplar eller mellan Azure Stack Hub och Azure. Replikatorskriptet läser och återskapar Azure-Resource Manager resurser från olika Azure- och Azure Stack Hub-prenumerationer. Den här artikeln beskriver hur skriptet fungerar, hur du kan använda skriptet och tillhandahåller en referens för skriptåtgärder.
Du hittar skripten som används i den här artikeln på GitHub-lagringsplatsen Azure Intelligent Edge Patterns . Skripten finns i mappen för prenumerationsreplikatorn .
Översikt över prenumerationsreplikator
Azure-prenumerationsreplikatorn har utformats för att vara modulär. Det här verktyget använder en kärnprocessor som samordnar resursreplikeringen. Dessutom stöder verktyget anpassningsbara processorer som fungerar som mallar för att kopiera olika typer av resurser.
Kärnprocessorn består av följande tre skript:
resource_retriever.ps1
Genererar mappar för att lagra utdatafiler.
Anger kontext till källprenumerationen.
Hämtar resurserna och skickar dem till resource_processor.ps1.
resource_processor.ps1
Bearbetar resursen som skickas av resource_retriever.ps1.
Avgör vilken anpassad processor som ska användas och skickar resurserna.
post_process.ps1
Post bearbetar utdata som genereras av den anpassade processorn för att förbereda den för distribution i målprenumerationen.
Genererar distributionskod för att distribuera resurserna i målprenumerationen.
De tre skripten styr informationsflödet på ett standard sätt för att ge större flexibilitet. Om du till exempel lägger till stöd för ytterligare resurser behöver du inte ändra någon kod i kärnprocessorn.
Anpassade processorer, som nämndes ovan, är ps1
filer som avgör hur en viss typ av resurs ska bearbetas. Namnet på en anpassad processor namnges alltid med hjälp av typdata i en resurs. Anta till exempel att $vm
innehåller ett virtuellt datorobjekt som kör $vm
. Typen skulle ge Microsoft.Compute/virtualMachines
. Det innebär att en processor för en virtuell dator skulle få namnet virtualMachines_processor.ps1
, namnet måste vara exakt som det visas i resursmetadata eftersom det är så kärnprocessorn avgör vilken anpassad processor som ska användas.
En anpassad processor avgör hur en resurs ska replikeras genom att avgöra vilken information som är viktig och diktera hur den informationen ska hämtas från resursmetadata. Den anpassade processorn tar sedan alla extraherade data och använder dem för att generera en parameterfil som ska användas tillsammans med en Azure Resource Manager-mall för att distribuera resursen i målprenumerationen. Den här parameterfilen lagras i Parameter_Files när den har bearbetats av post_process.ps1.
Det finns en mapp i replikatorfilstrukturen med namnet Standardized_ARM_Templates. Beroende på källmiljön använder distributionerna en av dessa standardiserade Azure Resource Manager-mallar, eller så måste en anpassad Azure-Resource Manager-mall genereras. I det här fallet måste en anpassad processor anropa en Azure Resource Manager-mallgenerator. I exemplet som startades tidigare skulle namnet på en Azure Resource Manager-mallgenerator för virtuella datorer få namnet virtualMachines_ARM_Template_Generator.ps1. Azure Resource Manager-mallgeneratorn ansvarar för att skapa en anpassad Azure Resource Manager-mall baserat på vilken information som finns i metadata för en resurs. Om den virtuella datorresursen till exempel har metadata som anger att den är medlem i en tillgänglighetsuppsättning, skapar Azure Resource Manager mallgenerator en Azure Resource Manager-mall med kod som anger ID:t för tillgänglighetsuppsättningen som den virtuella datorn är en del av. På så sätt läggs den virtuella datorn automatiskt till i tillgänglighetsuppsättningen vid distributionen när den virtuella datorn distribueras till den nya prenumerationen. Dessa anpassade Azure Resource Manager-mallar lagras i mappen Custom_ARM_Templates som finns i mappen Standardized_ARM_Templates. post_processor.ps1 ansvarar för att avgöra om en distribution ska använda en standardiserad Azure Resource Manager-mall eller en anpassad och generera motsvarande distributionskod.
Skriptet post-process.ps1 ansvarar för att rensa parameterfilerna och skapa skripten som användaren ska använda för att distribuera de nya resurserna. Under rensningsfasen ersätter skriptet alla referenser till källprenumerations-ID, klient-ID och plats med motsvarande målvärden. Den matar sedan ut parameterfilen till mappen Parameter_Files . Den avgör sedan om resursen som bearbetas använder en anpassad Azure Resource Manager-mall eller inte och genererar motsvarande distributionskod, som använder cmdleten New-AzResourceGroupDeployment. Distributionskoden läggs sedan till i filen med namnetDeployResources.ps1 lagras i mappen Deployment_Files . Slutligen avgör skriptet den resursgrupp som resursen tillhör och kontrollerar DeployResourceGroups.ps1 skriptet för att se om distributionskoden för att distribuera resursgruppen redan finns. Om det inte gör det kommer det att lägga till kod i skriptet för att distribuera resursgruppen, om den gör det gör den ingenting.
Dynamisk API-hämtning
Verktyget har dynamisk API-hämtning inbyggd så att den senaste api-versionen för resursprovidern som är tillgänglig i källprenumerationen används för att distribuera resurserna i målprenumerationen:
Bild-API-hämtning i resource_processor.ps1.
Det finns dock en chans att målprenumerationens API-version för resursprovidern är äldre än källprenumerationens och inte stöder den version som tillhandahålls från källprenumerationen. I det här fallet utlöses ett fel när distributionen körs. Lös detta genom att uppdatera resursprovidrar i målprenumerationen så att de matchar dem i källprenumerationen.
Parallella distributioner
Verktyget kräver en parameter med namnet parallel. Den här parametern tar ett booleskt värde som anger om de hämtade resurserna ska distribueras parallellt eller inte. Om värdet är inställt på true kommer varje anrop till New-AzResourceGroupDeployment att ha flaggan -asJob och kodblock som väntar på att parallella jobb ska slutföras läggs till mellan uppsättningar med resursdistributioner baserat på resurstyperna. Det säkerställer att alla resurser av en typ har distribuerats innan nästa typ av resurs distribueras. Om värdet för den parallella parametern är inställt på false distribueras alla resurser i seriellt.
Lägga till ytterligare resurstyper
Det är enkelt att lägga till nya resurstyper. Utvecklaren måste skapa en anpassad processor och antingen en Azure Resource Manager-mall eller en Azure Resource Manager-mallgenerator. När det är klart måste utvecklaren lägga till resurstypen i ValidateSet för parametern $resourceType och $resourceTypes-matrisen i resource_retriever.ps1. När du lägger till resurstypen i $resourceTypes matris måste den läggas till i rätt ordning. Matrisens ordning avgör i vilken ordning resurserna ska distribueras, så tänk på beroenden. Om den anpassade processorn slutligen använder en Azure Resource Manager-mallgenerator måste de lägga till resurstypsnamnet i $customTypes-matrisen i post_process.ps1.
Köra Replikatorn för Azure-prenumeration
Om du vill köra verktyget Azure-prenumerationsreplikator (v3) måste du starta resource_retriever.ps1 och ange alla parametrar. Parametern resourceType , det finns ett alternativ för att välja Alla i stället för en resurstyp. Om Alla har valts kommer resource_retriever.ps1 att bearbeta alla resurser i en ordning så att beroende resurser distribueras först när distributionen körs. Till exempel distribueras virtuella nätverk före virtuella datorer eftersom virtuella datorer kräver att ett virtuellt nätverk finns på plats för att de ska kunna distribueras korrekt.
När skriptet är klart kommer det att finnas tre nya mappar, Deployment_Files, Parameter_Files och Custom_ARM_Templates.
Anteckning
Innan du kör något av de genererade skripten måste du ange rätt miljö och logga in på målprenumerationen (i den nya Azure Stack Hub till exempel) och ange arbetskatalogen till mappen Deployment_Files .
Deployment_Files innehåller två filer DeployResourceGroups.ps1 och DeployResources.ps1. Om du kör DeployResourceGroups.ps1 distribueras resursgrupperna. Om du kör DeployResources.ps1 distribueras alla resurser som har bearbetats. Om verktyget kördes med Alla eller Microsoft.Compute/virtualMachines som resurstyp uppmanar DeployResources.ps1 användaren att ange ett administratörslösenord för virtuella datorer som ska användas för att skapa alla virtuella datorer.
Exempel
Kör skriptet.
Anteckning
Glöm inte att konfigurera källevironmentet och prenumerationskontexten för PS-instansen.
Granska de nyligen skapade mapparna:
Ange kontexten till målprenumerationen, ändra mappen till Deployment_Files, distribuera resursgrupperna (kör DeployResourceGroups.ps1 skriptet) och starta sedan resursdistributionen (kör DeployResources.ps1-skriptet).
Kör
Get-Job
för att kontrollera statusen. Get-Job | Receive-Job returnerar resultatet.
Rensa
I mappen replicatorV3 finns det en fil med namnet cleanup_generated_items.ps1 – den tar bort mapparna Deployment_Files, Parameter_Files och Custom_ARM_Templates och allt deras innehåll.
Åtgärder för prenumerationsreplikator
Azure-prenumerationsreplikatorn (v3) kan för närvarande replikera följande resurstyper:
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
När du kör verktyget med Alla som resurstyp följs följande ordning när du replikerar och distribuerar (i nedanstående avsnitt har alla resurser sin konfiguration replikerad, dvs. sku, erbjudande osv.):
Microsoft.Network/virtualNetworks
- Replikerar: – Alla adressutrymmen – Alla undernät
Microsoft.Network/virtualNetworkGateways
- Replikerar: – Offentlig IP-konfiguration – Undernätskonfiguration – VPN-typ – Gatewaytyp
Microsoft.Network/routeTables
Microsoft.Network/networkSecurityGroups
- Replikerar: – Alla säkerhetsregler inkommande och utgående
Microsoft.Network/publicIPAddresses
Microsoft.Network/loadBalancers
- Replikerar: – Privata IP-adresser – Konfiguration av offentlig IP-adress – Konfiguration av undernät
Microsoft.Compute/availabilitySets
- Replikerar: – Antal feldomäner – Antal uppdateringsdomäner
Microsoft.Storage/storageAccounts
Microsoft.Compute/virtualMachines
- Replikerar:
– Datadiskar (utan data)
– Storlek på virtuell dator
-Operativsystem
– Konfiguration av diagnostiklagringskonto
– Offentlig IP-konfiguration
– Nätverksgränssnitt
– Privat IP-adress för nätverksgränssnitt
– Konfiguration av nätverkssäkerhetsgrupp
– Konfiguration av tillgänglighetsuppsättning
- Replikerar:
Anteckning
Skapar endast hanterade diskar för OS-diskar och datadiskar. För närvarande finns det inte stöd för att använda lagringskonton
Begränsningar
Verktyget kan replikera resurser från en prenumeration till en annan så länge målprenumerationens resursprovidrar stöder alla resurser och alternativ som replikeras från källprenumerationen.
För att säkerställa en lyckad replikering kontrollerar du att målprenumerationens resursproviderversioner matchar källprenumerationens.
När du replikerar från kommersiella Azure till kommersiella Azure eller från en prenumeration i Azure Stack Hub till en annan prenumeration i samma Azure Stack Hub, uppstår det problem vid replikering av lagringskonton. Detta beror på namngivningskravet för lagringskontot att alla lagringskontonamn är unika för alla kommersiella Azure-prenumerationer eller för alla prenumerationer i en Azure Stack Hub-region/instans. Replikering av lagringskonton över olika Azure Stack Hub-instanser lyckas eftersom stackarna är separata regioner/instanser.