Partager via


Gérer les groupes de ressources avec Azure SDK pour Go

Dans cet article, vous apprenez à créer et à gérer un groupe de ressources avec la bibliothèque de gestion Azure SDK pour Go.

1. Configurer des ressources Azure

Pour effectuer les étapes de cet article, vous avez besoin des ressources et des identifiants Azure suivantes :

  • Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

  • Obtenez l’ID d’abonnement Azure.

  • Obtenez l'ID de locataire Microsoft Entra.

  • Créez un principal du service. Notez l’ID et le secret (client) de l’application du principal de service. Veillez également à suivre les instructions pour attribuer à l'application le rôle de contributeur dans votre abonnement. Le rôle de Contributeur est un rôle d’administrateur privilégié qui accorde l’autorisation de gérer toutes les ressources de votre abonnement.

Avant de passer à la section suivante, vérifiez que vous avez noté votre ID d’abonnement (Guid), votre ID de locataire (Guid) et l’ID client/application (Guid) et le secret de votre principal de service.

2. Définissez l'authentification des variables d’environnement

En utilisant vos informations d’authentification Azure, définissez les variables d’environnement appropriées pour que votre code puisse s’authentifier sur Azure.

Définissez les variables d’environnement suivantes. Remplacez les espaces réservés par les valeurs appropriées de la section précédente.

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. Créer un groupe de ressources

  1. Créez un répertoire dans lequel tester et exécuter l’exemple de code Go et définissez-le comme répertoire actuel.

  2. Exécutez go mod init pour créer un module dans le répertoire actuel.

    go mod init <module_path>
    

    Points essentiels :

    • Le paramètre <module_path> est généralement un emplacement du dépôt GitHub, par exemple, github.com/<your_github_account_name>/<directory>.
    • Lorsque vous créez une application en ligne de commande à titre de test et que vous ne la publiez pas, le <module_path> n'a pas besoin de faire référence à un emplacement réel.
  3. Exécutez go get pour télécharger, générer et installer les modules nécessaires d’Azure SDK pour Go.

    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
    

    Important

    Les packages de la version actuelle des bibliothèques de gestion des ressources Azure se trouvent dans sdk/**/arm**. Les packages de la version précédente des bibliothèques de gestion se trouvent sous /services. Si vous utilisez l’ancienne version, consultez le Guide de migration du kit de développement logiciel (SDK) Azure pour Go.

  4. Créez un fichier nommé main.go et ajoutez le code suivant. Chaque section de code est commentée pour expliquer son rôle.

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

    Points essentiels :

    • La valeur subscriptionId est extraite de la variable d’environnement AZURE_SUBSCRIPTION_ID.
    • Les chaînes location et resourceGroupName sont définies pour tester les valeurs. Si nécessaire, changez ces valeurs en fonction de votre emplacement et de votre abonnement.
  5. Exécutez go mod tidy pour nettoyer les dépendances dans le fichier go.mod en fonction de votre code source.

    go mod tidy
    
  6. Exécutez go run pour générer et exécuter l’application.

    go run .
    

4. Vérifier les résultats

  1. Accédez au portail Azure.

  2. Connectez-vous et sélectionnez votre abonnement Azure.

  3. Dans le menu de gauche, sélectionnez Groupe de ressources.

  4. Le nouveau groupe de ressources est listé avec les groupes de ressources de votre abonnement Azure.

5. Mettre à jour un groupe de ressources

  1. Retournez dans votre fichier main.go.

  2. Insérez le code suivant juste au-dessus de la fonction main.

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

Une fois que vous avez ajouté le code, passez à la section suivante. Vous exécutez le code dans une section ultérieure.

6. Lister les groupes de ressources d’un abonnement Azure

  1. Retournez dans votre fichier main.go.

  2. Insérez le code suivant juste au-dessus de la fonction main.

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

Une fois que vous avez ajouté le code, passez à la section suivante. Vous exécutez le code dans une section ultérieure.

7. Supprimer un groupe de ressources

  1. Retournez dans votre fichier main.go.

  2. Insérez le code suivant juste au-dessus de la fonction main.

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

Une fois que vous avez ajouté le code, passez à la section suivante. Vous exécutez le code dans une section ultérieure.

8. Créer la fonction principale

Dans les sections précédentes, vous avez ajouté du code à main.go pour créer, mettre à jour et supprimer un groupe de ressources. Vous avez également ajouté du code pour lister tous les groupes de ressources dans un abonnement Azure. Pour exécuter toutes ces fonctions de manière séquentielle :

  1. Dans main.go, remplacez la fonction main par le code suivant :

    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. Exécutez le code et observez la sortie.

    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
    

    Remarque

    La suppression du groupe de ressources peut prendre quelques minutes.

Dépannage

Étapes suivantes