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.
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
Erstellen Sie ein Verzeichnis, in dem der Go-Beispielcode getestet und ausgeführt werden soll, und legen Sie es als aktuelles Verzeichnis fest.
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, etwagithub.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.
- Der Parameter
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.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 UmgebungsvariablenAZURE_SUBSCRIPTION_ID
abgerufen. - Die Zeichenfolgen
location
undresourceGroupName
sind auf Testwerte gesetzt. Ändern Sie diese Werte bei Bedarf zu für Ihre Umgebung und Ihr Abonnement geeignete Werte.
- Der Wert
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
Führen Sie
go run
aus, um die App zu erstellen und auszuführen.go run .
4. Überprüfen der Ergebnisse
Navigieren Sie zum Azure-Portal.
Melden Sie sich an, und wählen Sie Ihr Abonnement aus.
Wählen Sie im Menü auf der linken Seite die Option Ressourcengruppen aus.
Die neue Ressourcengruppe ist in den Ressourcengruppen Ihres Azure-Abonnements aufgeführt.
5. Aktualisieren einer Ressourcengruppe
Wechseln Sie zurück zur Datei
main.go
.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
Wechseln Sie zurück zur Datei
main.go
.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
Wechseln Sie zurück zur Datei
main.go
.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:
Ersetzen Sie in
main.go
die Funktionmain
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") }
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
- Sehen Sie sich die zuvor auf Stack Overflow geposteten Fragen an, oder stellen Sie unter Verwendung der Tags
Azure
undGo
neue Fragen. - Sollten bei Ihnen Fehler auftreten, melden Sie diese über GitHub.