2019-08-19

Klonování Resource Group v Azure

Zadání bylo jednoduché, naklonujte resource group (něco jako složka ve které jsou součástky patřící k sobě v rámci nějakého projektu). První zádrhel je, že na to nemá webový Azure Resource Manager žádné klikátko - taková funkce v rozhraní chybí. Co s tím tedy?

Nejprve jsem našel skript Clone-AzureRMresourceGroup.ps1, který ovšem vyžaduje vypnutí původní infrastruktury, což je i v předprodukčním prostředí poněkud nechtěná vlastnost a nápad opustil.

Dalším pokusem bylo znovu zkopírování RG pomocí ARM template, kterou umí Azure RM ve webovém rozhraní snadno vyexportovat. Dokonce mnoho ostatních uživatelů jde touto cestou. Zádrhel je ve velikosti RG, kterou kopírujete. Jeden virtuální server s příslušenství asi jde, ale jakmile byl zahrnut Availability Set či Load Balancer, vytváří se ve schématech kruhové závislosti přes položku dependsOn a vůbec se konfigurační soubory nedají zrecyklovat pro nový i když identický deployment. 

Co se děje v template.json a parameters.json? Čekali byste, že všechno co se nastavuje bude v parameterech a v template jenom schéma, ale ono ne! Některé položky jsou po exportování v template natvrdo zapsané, typicky třeba lokalita, takže změnou parametrů se dostanou do schématu ještě větší zmatky. Další unikátní zdroje jako IP adresy či DNS názvy najdete v template.json také, což je samozřejmě špatně, pokud nevytváříte identickou RG znovu po smazání té předchozí, ale chcete klonovat.


Taktéž se mi celý template v jednom kuse nechtěl ani po úpravách nasadit do Azure, protože závislosti jako VM potřebuje IP, kterou chce NIC, ale NIC bez VM nejde apod. Řešením mohlo být vyexportovat jednotlivé šablony a hodnoty samostatně tak, jak byly vytvářeny chronologicky a to přes boční panel Deployments v RG.  Získal jsem tak 25x2 souborů, které bylo nutné ručně projít a zpracovat uvedené hodnoty, které měly navíc všelijaké nehomogenní identifikátory. Šlo by to u pár stupňové implementace, já se ztratil u 4. template z 25.

Takže zpátky k rýsovacími prknu. Dostal jsem povolení udělat odstávku běžících serverů a znovu použil výše zmíněný skript Jeffa Bowa, který asi za 20 minut vytvořil klon běžící RB bez nutnosti do toho nikterak více zasahovat a bez možnosti třeba přejmenovat zdroje v RG obsažené.

Pozor, po dokončení činnosti skriptu je potřeba zkontrolovat, zda-li se zkopírovalo všechno. Application gateway nebo SQL server se mi při použití skriptu nenaklonovaly. Taktéž chyběl diagnostický storage account, ale to zjevně nevadí.

Závěr? Buď si připravte velmi detailně ARM šablonu, zejména v případě, že budete RG vytvářet vícekrát nebo použijte script, ale počítejte s výpadkem.

Poznámka pod čarou: je těžké v česky psaném příspěvku hledat slova, tak aby nebyl text plný anglicismů, ale zároveň aby odborníci věděli o čem je řeč. Deploymnout je krásné, ale v obou jazycích špatně. Nadruhou stranu nad přepínáním a směrováním je třeba se pokaždé zamyslet, co je switching a co routing. Ale to jen tak na okraj...

Žádné komentáře :

Okomentovat

Dotaz, připomínka, oprava?
(pokud máte problém s vložením příspěvku, vyzkoušejte to v prohlížeči Chrome)