Administración de grupos de recursos con Azure SDK para Go
En este artículo, aprenderá a crear y administrar un grupo de recursos con la biblioteca de administración de Azure SDK para Go.
1. Configuración de los recursos de Azure
Para completar los pasos de este artículo, necesitará los siguientes recursos e identificadores de Azure:
Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Cree una entidad de servicio. Tome nota del identificador y el secreto de la aplicación (cliente) de la entidad de servicio. Asegúrese de seguir también las instrucciones para asignar el rol de Colaborador en la suscripción a la aplicación. El rol de Colaborador es un rol de administrador con privilegios que concede permiso para administrar todos los recursos de la suscripción.
Antes de pasar a la sección siguiente, asegúrese de que ha anotado el identificador de suscripción (GUID), el identificador de inquilino (GUID) y el identificador de cliente o aplicación (GUID) y el secreto de la entidad de servicio.
2. Definición de las variables de entono de autenticación
Utilice la información de autenticación de Azure para definir las variables de entorno adecuadas de tal manera que el código pueda autenticarse en Azure.
Establezca las siguientes variables de entorno. Reemplace los marcadores de posición por los valores correspondientes utilizados en la sección anterior.
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. Crear un grupo de recursos
Cree un directorio en el que probar y ejecutar el código de ejemplo de Go y conviértalo en el directorio actual.
Ejecute go mod init para crear un módulo en el directorio actual.
go mod init <module_path>
Puntos clave:
- El parámetro
<module_path>
suele ser una ubicación en un repositorio de GitHub, comogithub.com/<your_github_account_name>/<directory>
. - Al crear una aplicación de línea de comandos como prueba, si no va a publicar la aplicación, no es necesario que
<module_path>
haga referencia a una ubicación real.
- El parámetro
Ejecute go get para descargar, compilar e instalar los módulos de Azure SDK para Go necesarios.
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
Importante
Los paquetes de la versión actual de las bibliotecas de administración de recursos de Azure están disponibles en:
sdk/**/arm**
Los paquetes de la versión anterior de las bibliotecas de administración de recursos de Azure están disponibles en:/services
Si usa la versión anterior, consulte la Guía de migración de Azure SDK para Go.Cree un archivo llamado
main.go
y agregue el siguiente código. Cada sección del código se comenta para explicar su finalidad.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) }
Puntos clave:
- El valor
subscriptionId
se obtiene a partir de la variable de entornoAZURE_SUBSCRIPTION_ID
. - Las cadenas
location
yresourceGroupName
se establecen en valores de prueba. Si es necesario, sustituya esos valores por otros adecuados para su ubicación y suscripción.
- El valor
Ejecute go mod tidy para limpiar las dependencias del archivo
go.mod
en función del código fuente.go mod tidy
Ejecute
go run
para compilar y ejecutar la aplicación.go run .
4. Comprobar los resultados
Vaya a Azure Portal.
Inicie sesión y seleccione su suscripción de Azure.
En el menú de la izquierda, seleccione Grupos de recursos.
El nuevo grupo de recursos se muestra entre los grupos de recursos de la suscripción de Azure.
5. Actualizar un grupo de recursos
Vuelva al archivo
main.go
.Inserte el código siguiente justo encima de la función
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) }
Después de agregar el código, vaya a la sección siguiente. Ejecute el código en una sección posterior.
6. Enumerar los grupos de recursos de una suscripción de Azure
Vuelva al archivo
main.go
.Inserte el código siguiente justo encima de la función
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 }
Después de agregar el código, vaya a la sección siguiente. Ejecute el código en una sección posterior.
7. Eliminar un grupo de recursos
Vuelva al archivo
main.go
.Inserte el código siguiente justo encima de la función
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 }
Después de agregar el código, vaya a la sección siguiente. Ejecute el código en una sección posterior.
8. Actualizar la función principal
En las secciones anteriores, agregó código a main.go
para crear, actualizar y eliminar un grupo de recursos. También agregó código para mostrar todos los grupos de recursos de una suscripción de Azure. Para ejecutar todas estas funciones secuencialmente:
En
main.go
, sustituya la funciónmain
por el código siguiente: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") }
Ejecute el código y observe la salida.
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
Nota:
La eliminación del grupo de recursos puede tardar unos minutos.
Solución de problemas
- Compruebe las preguntas anteriores publicadas en Stack Overflow o formule preguntas nuevas mediante las etiquetas
Azure
yGo
. - En el caso de que se presenten errores, cree una incidencia para el problema de GitHub.