Een Azure Resource Manager-sjabloon implementeren met behulp van de Azure SDK voor Go

In deze zelfstudie gebruikt u de Azure SDK voor Go om een Azure Resource Manager-sjabloon te implementeren.

Azure Resource Manager is de implementatie- en beheerservice voor Azure. Hiermee kunt u resources in uw Azure-account maken, bijwerken en verwijderen. Azure Resource Manager-sjablonen beschrijven uw infrastructuur declaratief als code in JSON-documenten.

Aan het einde van deze zelfstudie schrijft en implementeert u een Azure Resource Manager-sjabloon met behulp van Go.

Vereiste voorwaarden

  • Azure-abonnement: als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Een nieuwe module maken

In deze sectie maakt u een nieuwe Go-module en installeert u de vereiste Azure SDK-pakketten. Vervolgens maakt u het hoofdtoepassingsbestand en voegt u code toe waarmee een Azure Resource Manager-sjabloon wordt geïmplementeerd.

  1. Maak een nieuwe map met de naam deployARM-how-to. Verander naar die map.

    mkdir deployARM-how-to
    cd deployARM-how-to
    
  2. Voer de go mod init opdracht uit om de go.mod en go.sum bestanden te maken.

    go mod init deployARM-how-to
    
  3. De Azure SDK voor Go bevat verschillende pakketten voor het werken met Azure. Voor deze zelfstudie hebt u de azcore/to, azidentityen armresources pakketten nodig.

    Voer de go get opdracht uit om deze pakketten te downloaden:

    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. Maak een bestand met de naam main.go.

    touch main.go
    
  5. Open main.go in uw editor en voeg de volgende code toe die zich bij Azure authenticeert, een resource group maakt en een Azure Resource Manager-sjabloon implementeert.

    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)
    }
    

De Azure Resource Manager-sjabloon maken

  1. Maak in de deployARM-how-to directory een ander bestand met de naam template.json.

  2. Open het template.json bestand en voeg de volgende Azure Resource Manager-sjablooncode toe waarmee een Azure-opslagaccount wordt gemaakt:

    {
        "$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. Vervang <StorageAccountName> en <StorageAccountDisplayName> door een geldige waarde voor de opslagnaam.

Zie het overzicht van Azure Resource Manager-sjablonen voor meer informatie over Azure Resource Manager-sjablonen.

Aanmelden bij Azure

De code in dit artikel maakt gebruik van het defaultAzureCredential-type uit de Azure Identity-module voor Go om te verifiëren bij Azure. DefaultAzureCredential ondersteunt veel referentietypen voor verificatie met Azure met behulp van OAuth met Microsoft Entra-id. In dit artikel gebruikt u de gebruikersreferenties waarmee u zich aanmeldt bij de Azure CLI.

Als u dat nog niet hebt gedaan, meldt u zich aan bij de Azure CLI:

az login

Als er meerdere abonnementen aan uw account zijn gekoppeld, gebruikt u de opdracht az account list om een lijst met deze abonnementen op te halen. Gebruik de opdracht az account set om het actieve abonnement in te stellen. Door het actieve abonnement in te stellen, zorgt u ervoor dat de CLI-opdrachten die u in de rest van dit artikel uitvoert, worden uitgevoerd op basis van uw beoogde abonnement.

Opmerking

Wanneer u lokaal werkt, DefaultAzureCredential ondersteunt u ook aanmeldingsreferenties van Azure Developer CLI (AZD) of een Azure-service-principal die u in omgevingsvariabelen configureert. Zie Azure-verificatie met de Azure Identity-module voor Go voor meer informatie over alle ondersteunde referentietypen.

De toepassing uitvoeren

Voordat u de sjabloon kunt implementeren, moet u uw Azure-abonnements-id definiëren als een omgevingsvariabele.

  1. Voer de volgende az account show-opdracht uit om de abonnements-id op te halen.

    az account show --query id --output tsv
    
  2. Stel de AZURE_SUBSCRIPTION_ID omgevingsvariabele in met uw abonnements-id. Vervang <AzureSubscriptionId> door uw abonnements-id.

    export AZURE_SUBSCRIPTION_ID=<AzureSubscriptionId>
    
  3. Voer de go run opdracht uit om de sjabloon te implementeren:

    go run main.go
    

Troubleshoot

Als de implementatie van het opslagaccount mislukt, controleert u of u een geldige waarde voor de opslagnaam hebt gebruikt. Namen van opslagaccounts moeten tussen de 3 en 24 tekens lang zijn en mogen alleen kleine letters en cijfers bevatten.

Als het programma een fout retourneert met betrekking tot verificatie of autorisatie, controleert u de volgende items:

  • Als de fout begint met een tijdstempel en de volgende tekst: 'Kan geen antwoord krijgen: DefaultAzureCredential: kan geen token verkrijgen', controleert u of u zich eerder hebt aangemeld bij de Azure CLI.

  • Als de fout een autorisatie- of verboden fout is (statuscode 401 of 403), moet u ervoor zorgen dat uw gebruikersaccount een Azure-rol heeft die deze rechten geeft om resourcegroepen te maken en resources toe te voegen aan uw abonnement. Voorbeelden zijn de ingebouwde rollen Inzender of Eigenaarvan Azure. Zie Azure-rollen toewijzen met behulp van Azure CLI voor meer informatie over het toewijzen van Azure-rollen aan uw gebruiker.

Zie Problemen met Azure Identity-verificatie oplossen voor gedetailleerdere richtlijnen voor probleemoplossing.

De resources in Azure controleren

U kunt verschillende Azure CLI-opdrachten gebruiken om te controleren of de resources zijn gemaakt in Azure. De volgende opdrachten zijn enkele voorbeelden.

Voer de opdracht az group exists uit om te controleren of de resourcegroep bestaat.

az group exists --name deployARM-how-to

U kunt de resources in de groep weergeven met behulp van de opdracht az resource list .

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

U kunt de implementatieresultaten (outputResources) en eigenschappen bekijken met behulp van de opdracht az deployment group show .

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

De hulpbronnen opschonen

Resources in Azure kunnen doorlopende kosten in rekening brengen. Zorg ervoor dat u de in dit artikel aangemaakte hulpmiddelen opschoont.

Als u een lege sjabloon in de volledige modus implementeert, worden alle resources in een resourcegroep verwijderd. Het is een handige manier om resources op te schonen zonder de resourcegroep zelf te verwijderen.

  1. Maak een nieuwe lege sjabloon met de naam empty-template.json.

  2. Open empty-template.json de editor en voeg de volgende code toe:

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

  4. Werk de templateFile constante waarde bij naar empty-template.json.

    const (
    	resourceGroupName     = "deployARM-how-to"
    	resourceGroupLocation = "eastus"
    	deploymentName        = "deployARM-how-to"
    	templateFile          = "empty-template.json"
    )
    
  5. Wijzig de implementatietijd van incrementeel naar voltooid door de eigenschappen van de implementatiemodus te wijzigen in DeploymentModeComplete. Zie Azure Resource Manager-implementatiemodivoor meer informatie over implementatiemodi.

    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. Voer de go run opdracht uit om de lege sjabloon te implementeren en verwijder het opslagaccount dat u eerder hebt gemaakt.

    go run main.go
    

In plaats van een implementatie te gebruiken, kunt u de resourcegroep en alle bijbehorende resources verwijderen door de volgende Azure CLI-opdracht uit te voeren:

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

Volgende stappen