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.
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
Créez un répertoire dans lequel tester et exécuter l’exemple de code Go et définissez-le comme répertoire actuel.
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.
- Le paramètre
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.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’environnementAZURE_SUBSCRIPTION_ID
. - Les chaînes
location
etresourceGroupName
sont définies pour tester les valeurs. Si nécessaire, changez ces valeurs en fonction de votre emplacement et de votre abonnement.
- La valeur
Exécutez go mod tidy pour nettoyer les dépendances dans le fichier
go.mod
en fonction de votre code source.go mod tidy
Exécutez
go run
pour générer et exécuter l’application.go run .
4. Vérifier les résultats
Accédez au portail Azure.
Connectez-vous et sélectionnez votre abonnement Azure.
Dans le menu de gauche, sélectionnez Groupe de ressources.
Le nouveau groupe de ressources est listé avec les groupes de ressources de votre abonnement Azure.
5. Mettre à jour un groupe de ressources
Retournez dans votre fichier
main.go
.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
Retournez dans votre fichier
main.go
.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
Retournez dans votre fichier
main.go
.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 :
Dans
main.go
, remplacez la fonctionmain
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") }
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
- Consultez les questions précédentes publiées sur Stack Overflow ou posez de nouvelles questions à l’aide des étiquettes
Azure
etGo
. - Pour les erreurs rencontrées, consignez un problème GitHub