Compartir a través de


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:

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

  1. Cree un directorio en el que probar y ejecutar el código de ejemplo de Go y conviértalo en el directorio actual.

  2. 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, como github.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.
  3. 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.

  4. 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 entorno AZURE_SUBSCRIPTION_ID.
    • Las cadenas location y resourceGroupName se establecen en valores de prueba. Si es necesario, sustituya esos valores por otros adecuados para su ubicación y suscripción.
  5. Ejecute go mod tidy para limpiar las dependencias del archivo go.mod en función del código fuente.

    go mod tidy
    
  6. Ejecute go run para compilar y ejecutar la aplicación.

    go run .
    

4. Comprobar los resultados

  1. Vaya a Azure Portal.

  2. Inicie sesión y seleccione su suscripción de Azure.

  3. En el menú de la izquierda, seleccione Grupos de recursos.

  4. El nuevo grupo de recursos se muestra entre los grupos de recursos de la suscripción de Azure.

5. Actualizar un grupo de recursos

  1. Vuelva al archivo main.go.

  2. 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

  1. Vuelva al archivo main.go.

  2. 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

  1. Vuelva al archivo main.go.

  2. 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:

  1. En main.go, sustituya la función main 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")
    }
    
  2. 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

Pasos siguientes