2 minute read

Jeden z naszych kolegów w Azurowym community, Kacper Mucha, uruchomił ostatnio swojego bloga. W związku z tym, że jest on niesamowitym ekspertem PowerShell w wydaniu chmurowym, na pewno będzie o czym czytać w miarę pojawiania się nowych wpisów.

Pierwszy wpis zawiera poradę jak wykonać inżynierię wsteczną szablonów ARMowych. W przypadku nowych usług w Azure, będących w Public Preview,  a tym bardziej tych, które udostępniane są tylko wybranym klientom Microsoft bardzo ciężko jest taki szablon samemu stworzyć. Główne powody to oczywiście brak kompletnej dokumentacji, brak przykładów, brak wpisów w sieci na ten temat. Sposób opisany przez Kacpra jest oczywiście jak najbardziej poprawny, wydaje mi się jednak, że przy użyciu dostępnych narzędzi da się operację wykonać w nieco bardziej przystępny sposób.

Historia wdrożeń dostępna w Portalu

Wdrożenie szablonu dokonywane jest w ramach jednej grupy zasobów (chociaż od niedawna mamy nieco większe spektrum możliwości) i każdorazowo składowane jest w historii wdrożeń w tej grupie. Niezależnie czy używamy szablonu z GitHuba lub Marketplace, czy wdrażamy własny szablon, nawet gdy wyklikujemy coś w portalu – wszystko ląduje w historii.

Dostęp do historii jest stosunkowo prosty. Na portalu wchodzimy do grupy zasobów, w której wykonaliśmy zmiany i otwieramy zakładkę Deployments. W zakładce mamy pełną historię wdrożeń od samego początku jej istnienia. Historia zawiera nie tylko szablon, ale również wszystkie parametry wejściowe oraz log z wykonanych kroków (niejednokrotnie zakończony błędami). W tym punkcie warto powtórzyć raz jeszcze część powyższego zdania - wszystkie parametry wejściowe, które zostały przekazane plain textem są tam dostępne, mogą zawierać loginy/hasła, klucze - warto wtedy pomyśleć o KeyVault!

img

Szablon oczywiście możemy skopiować, zmodyfikować, wdrożyć ponownie – wszystko wewnątrz portalu. Wrażenia zbliżone są do Visual Studio i okienka JSON Outline, które zwykle jest używane przy tworzeniu szablonów. Kacper przytoczył BotService jak jedna z tych usług, która jest w Preview bez dobrych przykładów szablonów. Z historii uzyskałem taki szablon:

{
    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "String"
        },
        "location": {
            "type": "String"
        },
        "subscriptionId": {
            "type": "String"
        }
    },
    "resources": [
        {
            "type": "Microsoft.Web/sites",
            "kind": "functionapp,botapp",
            "name": "[parameters('name')]",
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('name')]",
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "WEBSITE_NODE_DEFAULT_VERSION",
                            "value": "6.5.0"
                        }
                    ]
                }
            }
        }
    ]
}

Jak dobrać się do historii bez użycia Portalu?

Skoro historia leży w Azure, to na logikę powinna być ona dostępna z poziomu innych narzędzi.

Z PowerShella wydobywamy ją w następujący sposób:

#Deployments
Get-AzureRmResourceGroupDeployment -ResourceGroupName <RGName>

#Failed deployments
Get-AzureRmResourceGroupDeployment -ResourceGroupName <RGName>| Where-Object ProvisioningState -eq Failed

#Deployment details
Get-AzureRmResourceGroupDeploymentOperation -ResourceGroupName <RGName> -DeploymentName <DeplymentName>

#Download template
Save-AzureRmResourceGroupDeploymentTemplate -ResourceGroupName <RGName-DeploymentName <DeplymentName>

Z Azure CLI:

#Deployments
az group deployment list --resource-group <RGName>

#Deployment details
az group deployment show --resource-group <RGName> --name <DeploymentName> --json

#Export template
az group deployment export --resource-group <RGName> --name <DeploymentName>

Podobne dane uzyskamy poprzez REST API i z resources.azure.com. Po prostu wybierz metodę, z którą czujesz się najbardziej komfortowo, zawartość będzie identyczna.

Daj znać jak Ty tworzysz szablony ARM. Może znasz jeszcze inny sposób jak je generować?

Comments