Nasazení šablony Azure Resource Manageru pomocí sady Azure SDK for Go

V tomto kurzu použijete sadu Azure SDK for Go k nasazení šablony Azure Resource Manageru.

Azure Resource Manager je služba nasazování a správy pro Azure. Umožňuje vytvářet, aktualizovat a odstraňovat prostředky ve vašem účtu Azure. Šablony Azure Resource Manageru deklarativně popisují vaši infrastrukturu jako kód v dokumentech JSON.

Na konci tohoto kurzu napíšete a nasadíte šablonu Azure Resource Manageru pomocí Go.

Požadavky

  • Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Vytvoření nového modulu

V této části vytvoříte nový modul Go a nainstalujete požadované balíčky Sady Azure SDK. Pak vytvoříte hlavní soubor aplikace a přidáte kód, který nasadí šablonu Azure Resource Manageru.

  1. Vytvořte nový adresář s názvem deployARM-how-to. Pak přejděte do daného adresáře.

    mkdir deployARM-how-to
    cd deployARM-how-to
    
  2. Spuštěním go mod init příkazu vytvořte go.mod soubory a go.sum soubory.

    go mod init deployARM-how-to
    
  3. Sada Azure SDK for Go obsahuje několik balíčků pro práci s Azure. Pro účely tohoto kurzu potřebujete balíčky azcore/to, azidentity a armresources.

    Spuštěním go get příkazu stáhněte tyto balíčky:

    go get github.com/Azure/azure-sdk-for-go/sdk/azcore/to
    go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
    go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources
    
  4. Vytvořte soubor s názvem main.go.

    touch main.go
    
  5. Otevřete main.go v editoru a přidejte následující kód, který se ověřuje v Azure, vytvoří skupinu prostředků a nasadí šablonu Azure Resource Manageru:

    package main
    
    import (
    	"context"
    	"encoding/json"
    	"fmt"
    	"log"
    	"os"
    
    	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
    	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
    )
    
    const (
    	resourceGroupName     = "deployARM-how-to"
    	resourceGroupLocation = "eastus"
    	deploymentName        = "deployARM-how-to"
    	templateFile          = "template.json"
    )
    
    var (
    	ctx = context.Background()
    )
    
    // Read a JSON file from the given path.
    
    func readJSON(path string) (map[string]interface{}, error) {
    	data, err := os.ReadFile(path)
    	if err != nil {
    		log.Fatalf("failed to read file: %v", err)
    	}
    	contents := make(map[string]interface{})
    	_ = json.Unmarshal(data, &contents)
    	return contents, nil
    }
    
    func main() {
    	subscriptionId := os.Getenv("AZURE_SUBSCRIPTION_ID")
    
    	// Authenticate to Azure
    
    	cred, err := azidentity.NewDefaultAzureCredential(nil)
    	if err != nil {
    		log.Fatalf("failed to obtain a credential: %v", err)
    	}
    
     	// Create a resource group.
    
    	client, err := armresources.NewResourceGroupsClient(subscriptionId, cred, nil)
    	if err != nil {
    		log.Fatalf("failed to create client: %v", err)
    	}
    	resp, err := client.CreateOrUpdate(context.Background(), resourceGroupName, armresources.ResourceGroup{
    		Location: to.Ptr(resourceGroupLocation),
    	}, nil)
    	if err != nil {
    		log.Fatalf("failed to obtain a response: %v", err)
    	}
    	log.Printf("resource group ID: %s\n", *resp.ResourceGroup.ID)
    
    	// Read the template file.
    
    	template, err := readJSON(templateFile)
    	if err != nil {
    		return
    	}
    
    	// Deploy the Azure Resource Manager template.
    
    	deploymentsClient, err := armresources.NewDeploymentsClient(subscriptionId, cred, nil)
    	if err != nil {
    		log.Fatalf("failed to create client: %v", err)
    	}
    	deploy, err := deploymentsClient.BeginCreateOrUpdate(
    		ctx,
    		resourceGroupName,
    		deploymentName,
    		armresources.Deployment{
    			Properties: &armresources.DeploymentProperties{
    				Template: template,
    				Mode:     to.Ptr(armresources.DeploymentModeIncremental),
    			},
    		},
    		nil,
    	)
    	if err != nil {
    		log.Fatalf("failed to deploy template: %v", err)
    	}
    
    	fmt.Println(deploy)
    }
    

Vytvoření šablony Azure Resource Manageru

  1. V adresáři deployARM-how-to vytvořte další soubor s názvem template.json.

  2. template.json Otevřete soubor a přidejte následující kód šablony Azure Resource Manageru, který vytvoří účet úložiště Azure:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
        },
        "functions": [],
        "variables": {},
        "resources": [{
            "name": "<StorageAccountName>",
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2021-04-01",
            "tags": {
                "displayName": "<StorageAccountDisplayName>"
            },
            "location": "EastUS",
            "kind": "StorageV2",
            "sku": {
                "name": "Premium_LRS",
                "tier": "Premium"
            }
        }],
        "outputs": {}
    }
    
  3. Nahraďte <StorageAccountName> a <StorageAccountDisplayName>platnou hodnotou názvu úložiště.

Další informace o šablonách Azure Resource Manageru najdete v přehledu šablon Azure Resource Manageru.

Přihlásit se do Azure

Kód v tomto článku používá typ DefaultAzureCredential z modulu Azure Identity pro Go k ověření v Azure. DefaultAzureCredential podporuje mnoho typů přihlašovacích údajů pro ověřování v Azure pomocí OAuth s ID Microsoft Entra. V tomto článku použijete přihlašovací údaje uživatele, pomocí kterého se přihlásíte k Azure CLI.

Pokud jste to ještě neudělali, přihlaste se k Azure CLI:

az login

Pokud je k vašemu účtu přidruženo více předplatných, pomocí příkazu az account list získejte seznam těchto předplatných. K nastavení aktivního předplatného použijte příkaz az account set . Nastavením aktivního předplatného se ujistěte, že všechny příkazy rozhraní příkazového řádku, které spustíte ve zbývající části tohoto článku, běží proti zamýšlenému předplatnému.

Poznámka:

Při místním spuštění DefaultAzureCredential také podporuje přihlašovací údaje Azure Developer CLI (AZD) nebo služební principál Azure, který nakonfigurujete v proměnných prostředí. Další informace o všech podporovaných typech přihlašovacích údajů najdete v tématu Ověřování Azure pomocí modulu Identita Azure pro Go.

Spuštění aplikace

Před nasazením šablony je potřeba definovat ID předplatného Azure jako proměnnou prostředí.

  1. Id předplatného získáte spuštěním následujícího příkazu az account show .

    az account show --query id --output tsv
    
  2. Nastavte proměnnou AZURE_SUBSCRIPTION_ID prostředí s ID předplatného. Nahraďte <AzureSubscriptionId> svou ID předplatného.

    export AZURE_SUBSCRIPTION_ID=<AzureSubscriptionId>
    
  3. Spuštěním go run příkazu nasaďte šablonu:

    go run main.go
    

Troubleshoot

Pokud se nasazení účtu úložiště nezdaří, ověřte, že jste použili platnou hodnotu názvu úložiště. Názvy účtů úložiště musí mít délku 3 až 24 znaků a můžou obsahovat jenom malá písmena a číslice.

Pokud program vrátí chybu související s ověřováním nebo autorizací, zkontrolujte následující položky:

  • Pokud chyba začíná časovým razítkem a následujícím textem: "Nepodařilo se získat odpověď: DefaultAzureCredential: Nepodařilo se získat token.", ujistěte se, že jste se přihlásili k Azure CLI podle předchozích pokynů.

  • Pokud se jedná o chybu autorizace nebo chybu zakázána (stavový kód 401 nebo 403), ujistěte se, že je váš uživatelský účet v roli Azure, která mu dává práva k vytváření skupin prostředků a přidávání prostředků v rámci vašeho předplatného. Mezi příklady patří předdefinované rolePřispěvatel nebo Vlastník Azure. Informace o přiřazování rolí Azure uživateli najdete v tématu Přiřazení rolí Azure pomocí Azure CLI.

Podrobnější pokyny k řešení potíží najdete v tématu Řešení potíží s ověřováním identit Azure.

Ověření prostředků v Azure

K ověření úspěšného vytvoření prostředků v Azure můžete použít několik příkazů Azure CLI. Příklady jsou následující příkazy.

Pokud chcete ověřit, že skupina prostředků existuje, spusťte příkaz az group exists .

az group exists --name deployARM-how-to

Prostředky ve skupině můžete vypsat pomocí příkazu az resource list .

az resource list --resource-group deployARM-how-to

Výsledky nasazení ("outputResources") a vlastnosti můžete prozkoumat pomocí příkazu az deployment group show.

az deployment group show -g deployARM-how-to -n deployARM-how-to

Vyčistěte zdroje

Za prostředky v Azure se můžou účtovat průběžné poplatky. Nezapomeňte vyčistit prostředky, které jste vytvořili v tomto článku.

Nasazení prázdné šablony v úplném režimu vymaže všechny prostředky ve skupině prostředků. Je to elegantní způsob, jak vyčistit prostředky bez odstranění samotné skupiny prostředků.

  1. Vytvořte novou prázdnou šablonu s názvem empty-template.json.

  2. Otevřete empty-template.json v editoru a přidejte následující kód:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {},
        "variables": {},
        "resources": [],
        "outputs": {}
    }
    
  3. Otevřete soubor main.go.

  4. Aktualizujte konstantní hodnotu templateFile na empty-template.json.

    const (
    	resourceGroupName     = "deployARM-how-to"
    	resourceGroupLocation = "eastus"
    	deploymentName        = "deployARM-how-to"
    	templateFile          = "empty-template.json"
    )
    
  5. Změňte čas nasazení z přírůstkového na dokončení změnou vlastností režimu nasazení na DeploymentModeComplete. Další informace o režimech nasazení najdete v tématu režimy nasazení Azure Resource Manageru.

    deploy, err = deploymentsClient.BeginCreateOrUpdate(
    	ctx,
    	resourceGroupName,
    	deploymentName,
    	armresources.Deployment{
    		Properties: &armresources.DeploymentProperties{
    			Template: template,
    			Mode:     to.Ptr(armresources.DeploymentModeComplete), //Deployment Mode is here
    		},
    	},
    	nil,
    )
    
  6. Spuštěním go run příkazu nasaďte prázdnou šablonu a odstraňte účet úložiště, který jste vytvořili dříve.

    go run main.go
    

Místo nasazení můžete odstranit skupinu prostředků a všechny její prostředky spuštěním následujícího příkazu Azure CLI:

az group delete --resource-group deployARM-how-to

Další kroky