Freigeben über


Verwalten von Ressourcengruppen mit dem Azure SDK für Go

In diesem Artikel erfahren Sie, wie Sie mit der Managementbibliothek des Azure SDK für Go eine Ressourcengruppe erstellen und verwalten.

1. Einrichten von Azure-Ressourcen

Zum Ausführen der Schritte in diesem Artikel benötigen Sie die folgenden Azure-Ressourcen und Bezeichner:

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

  • Abrufen der Azure-Abonnement-ID

  • Abrufen der Microsoft Entra-Mandanten-ID.

  • Erstellen Sie einen Dienstprinzipal. Notieren Sie sich die Anwendungs-ID (Client) und das Geheimnis des Dienstprinzipals. Stellen Sie sicher, dass Sie auch die Anweisungen befolgen, um die Rolle „Mitwirkender“ in Ihrem Abonnement der Anwendung zuzuweisen. Die Rolle „Mitwirkender“ ist eine privilegierte Administratorrolle, die die Berechtigung zum Verwalten aller Ressourcen in Ihrem Abonnement gewährt.

Bevor Sie mit dem nächsten Abschnitt fortfahren, stellen Sie sicher, dass Sie Ihre Abonnement-ID (Guid), die Mandanten-ID (Guid) und die Client-/Anwendungs-ID (Guid) sowie das Secret für Ihren Serviceprinzipal notiert haben.

2. Einrichten der Umgebungsvariablen für die Authentifizierung

Legen Sie unter Verwendung Ihrer Azure-Authentifizierungsinformationen die entsprechenden Umgebungsvariablen fest, damit sich Ihr Code bei Azure authentifizieren kann.

Legen Sie die folgenden Umgebungsvariablen fest. Ersetzen Sie die Platzhalter durch die entsprechenden Werte aus dem vorherigen Abschnitt.

export AZURE_SUBSCRIPTION_ID="<azure_subscription_id>"
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

3. Erstellen einer Ressourcengruppe

  1. Erstellen Sie ein Verzeichnis, in dem der Go-Beispielcode getestet und ausgeführt werden soll, und legen Sie es als aktuelles Verzeichnis fest.

  2. Führen Sie go mod init aus, um ein Modul im aktuellen Verzeichnis zu erstellen.

    go mod init <module_path>
    

    Die wichtigsten Punkte:

    • Der Parameter <module_path> ist im Allgemeinen ein Speicherort in einem GitHub-Repository, etwa github.com/<your_github_account_name>/<directory>.
    • Wenn Sie eine Befehlszeilen-App als Test erstellen und die App nicht veröffentlichen, muss <module_path> nicht auf einen tatsächlichen Speicherort verweisen.
  3. Führen Sie go get aus, um die erforderlichen Module des Azure SDK für Go herunterzuladen, zu erstellen und zu installieren.

    go get github.com/Azure/azure-sdk-for-go/sdk/azcore
    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
    

    Wichtig

    Die Pakete für die aktuelle Version der Azure-Ressourcenverwaltungsbibliotheken befinden sich unter sdk/**/arm**. Die Pakete für die vorherige Version der Verwaltungsbibliotheken befinden sich unter /services. Wenn Sie die ältere Version verwenden, lesen Sie den Migrationsleitfaden für Azure SDK für Go.

  4. Erstellen Sie eine Datei namens main.go, und fügen Sie den folgenden Code hinzu. Jeder Codeabschnitt ist kommentiert, um seinen Zweck zu erläutern.

    package main
    
    // Import key modules.
    import (
    	"context"
    	"log"
    	"os"
    
    	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
    	"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"
    )
    
    // Define key global variables.
    var (
    	subscriptionId    = os.Getenv("AZURE_SUBSCRIPTION_ID")
    	location          = "eastus"
    	resourceGroupName = "myResourceGroup" // !! IMPORTANT: Change this to a unique name in your subscription.
    	ctx               = context.Background()
    )
    
    // Define the function to create a resource group.
    func createResourceGroup(subscriptionId string, credential azcore.TokenCredential) (armresources.ResourceGroupsClientCreateOrUpdateResponse, error) {
    	rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
    	param := armresources.ResourceGroup{
    		Location: to.Ptr(location),
    	}
    
    	return rgClient.CreateOrUpdate(ctx, resourceGroupName, param, nil)
    }
    
    // Define the standard 'main' function for an app that is called from the command line.
    func main() {
    
    	// Create a credentials object.
    	cred, err := azidentity.NewDefaultAzureCredential(nil)
    	if err != nil {
    		log.Fatalf("Authentication failure: %+v", err)
    	}
    
    	// Call your function to create an Azure resource group.
    	resourceGroup, err := createResourceGroup(subscriptionId, cred)
    	if err != nil {
    		log.Fatalf("Creation of resource group failed: %+v", err)
    	}
    
    	// Print the name of the new resource group.
    	log.Printf("Resource group %s created", *resourceGroup.ResourceGroup.ID)
    }
    

    Die wichtigsten Punkte:

    • Der Wert subscriptionId wird aus der Umgebungsvariablen AZURE_SUBSCRIPTION_ID abgerufen.
    • Die Zeichenfolgen location und resourceGroupName sind auf Testwerte gesetzt. Ändern Sie diese Werte bei Bedarf zu für Ihre Umgebung und Ihr Abonnement geeignete Werte.
  5. Führen Sie go mod tidy aus, um die Abhängigkeiten in der Datei go.mod basierend auf Ihrem Quellcode zu bereinigen.

    go mod tidy
    
  6. Führen Sie go run aus, um die App zu erstellen und auszuführen.

    go run .
    

4. Überprüfen der Ergebnisse

  1. Navigieren Sie zum Azure-Portal.

  2. Melden Sie sich an, und wählen Sie Ihr Abonnement aus.

  3. Wählen Sie im Menü auf der linken Seite die Option Ressourcengruppen aus.

  4. Die neue Ressourcengruppe ist in den Ressourcengruppen Ihres Azure-Abonnements aufgeführt.

5. Aktualisieren einer Ressourcengruppe

  1. Wechseln Sie zurück zur Datei main.go.

  2. Fügen Sie den folgenden Code direkt über der Funktion main ein.

    // Update the resource group by adding a tag to it.
    func updateResourceGroup(subscriptionId string, credential azcore.TokenCredential) (armresources.ResourceGroupsClientUpdateResponse, error) {
        rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
        update := armresources.ResourceGroupPatchable{
            Tags: map[string]*string{
                "new": to.Ptr("tag"),
            },
        }
        return rgClient.Update(ctx, resourceGroupName, update, nil)
    }
    

Nachdem Sie den Code hinzugefügt haben, fahren Sie mit dem nächsten Abschnitt fort. Sie führen den Code in einem späteren Abschnitt aus.

6. Auflisten der Ressourcengruppen eines Azure-Abonnements

  1. Wechseln Sie zurück zur Datei main.go.

  2. Fügen Sie den folgenden Code direkt über der Funktion main ein.

    // List all the resource groups of an Azure subscription.
    func listResourceGroups(subscriptionId string, credential azcore.TokenCredential) ([]*armresources.ResourceGroup, error) {
        rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
        pager := rgClient.NewListPager(nil)
    
        var resourceGroups []*armresources.ResourceGroup
        for pager.More() {
            resp, err := pager.NextPage(ctx)
            if err != nil {
                return nil, err
            }
            if resp.ResourceGroupListResult.Value != nil {
                resourceGroups = append(resourceGroups, resp.ResourceGroupListResult.Value...)
            }
        }
        return resourceGroups, nil
    }
    

Nachdem Sie den Code hinzugefügt haben, fahren Sie mit dem nächsten Abschnitt fort. Sie führen den Code in einem späteren Abschnitt aus.

7. Löschen einer Ressourcengruppe

  1. Wechseln Sie zurück zur Datei main.go.

  2. Fügen Sie den folgenden Code direkt über der Funktion main ein.

    // Delete a resource group.
    func deleteResourceGroup(subscriptionId string, credential azcore.TokenCredential) error {
        rgClient := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
        poller, err := rgClient.BeginDelete(ctx, resourceGroupName, nil)
        if err != nil {
            return err
        }
        if _, err := poller.PollUntilDone(ctx, nil); err != nil {
            return err
        }
        return nil
    }
    

Nachdem Sie den Code hinzugefügt haben, fahren Sie mit dem nächsten Abschnitt fort. Sie führen den Code in einem späteren Abschnitt aus.

8. Aktualisieren der main-Funktion

In früheren Abschnitten haben Sie Code zum main.go Erstellen, Aktualisieren und Löschen einer Ressourcengruppe hinzugefügt. Dazu haben Sie Code hinzugefügt, um alle Ressourcengruppen in einem Azure-Abonnement aufzulisten. So führen Sie alle diese Funktionen sequenziell aus:

  1. Ersetzen Sie in main.go die Funktion main durch den folgenden Code:

    func main() {
    
        // Create a credentials object.
        cred, err := azidentity.NewDefaultAzureCredential(nil)
        if err != nil {
            log.Fatalf("Authentication failure: %+v", err)
        }
    
        // Call your function to create an Azure resource group.
        resourceGroup, err := createResourceGroup(subscriptionId, cred)
        if err != nil {
            log.Fatalf("Creation of resource group failed: %+v", err)
        }
        // Print the name of the new resource group.
        log.Printf("Resource group %s created", *resourceGroup.ResourceGroup.ID)
    
        // Call your function to add a tag to your new resource group.
        updatedRG, err := updateResourceGroup(subscriptionId, cred)
        if err != nil {
            log.Fatalf("Update of resource group failed: %+v", err)
        }
        log.Printf("Resource Group %s updated", *updatedRG.ResourceGroup.ID)
    
        // Call your function to list all the resource groups.
        rgList, err := listResourceGroups(subscriptionId, cred)
        if err != nil {
            log.Fatalf("Listing of resource groups failed: %+v", err)
        }
        log.Printf("Your Azure subscription has a total of %d resource groups", len(rgList))
    
        // Call your function to delete the resource group you created.
        if err := deleteResourceGroup(subscriptionId, cred); err != nil {
            log.Fatalf("Deletion of resource group failed: %+v", err)
        }
        log.Printf("Resource group deleted")
    }
    
  2. Führen Sie den Code aus, und beobachten Sie die Ausgabe.

    go run .
    
    2024/07/31 15:29:06 Resource group /subscriptions/<subscription ID>/resourceGroups/myResourceGroup created
    2024/07/31 15:29:07 Resource Group /subscriptions/<subscription ID>/resourceGroups/myResourceGroup updated
    2024/07/31 15:29:07 Your Azure subscription has a total of 8 resource groups
    2024/07/31 15:30:25 Resource group deleted
    

    Hinweis

    Das Löschen der Ressourcengruppe kann einige Minuten dauern.

Problembehandlung

Nächste Schritte