Поделиться через


Управление группами ресурсов с помощью Azure SDK для Go

В этой статье вы узнаете, как создать группу ресурсов и управлять ею с помощью библиотеки управления Azure SDK для Go.

1. Настройка ресурсов Azure

Чтобы выполнить действия, описанные в этой статье, вам потребуются следующие ресурсы и идентификаторы Azure:

Прежде чем перейти к следующему разделу, убедитесь, что вы указали идентификатор подписки (GUID), идентификатор клиента (GUID) и идентификатор клиента или приложения (GUID) и секрет для субъекта-службы.

2. Установка переменных среды проверки подлинности

Используя сведения о проверке подлинности Azure, задайте соответствующие переменные среды, чтобы код мог проходить проверку подлинности в Azure.

Задайте следующие переменные среды. Замените заполнители соответствующими значениями из предыдущего раздела.

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. Создание группы ресурсов

  1. Создайте каталог для тестирования и выполнения примера кода Go и сделайте его текущим каталогом.

  2. Запустите go mod init, чтобы создать модуль в текущем каталоге.

    go mod init <module_path>
    

    Основные моменты:

    • Параметр <module_path> обычно обозначает расположение в репозитории GitHub, например github.com/<your_github_account_name>/<directory>.
    • При создании приложения командной строки в качестве теста и публикации приложения <module_path> не требуется ссылаться на фактическое расположение.
  3. Чтобы скачать, выполнить сборку и установить необходимые модули Azure SDK для Go, выполните go get.

    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
    

    Внимание

    Пакеты для текущей версии библиотек управления ресурсами Azure находятся в папке sdk/**/arm**. Пакеты для предыдущей версии библиотек управления находятся в папке /services. Если вы используете старую версию, ознакомьтесь с руководством по миграции пакета SDK Azure для Go.

  4. Создайте файл main.go и добавьте код ниже. Каждый раздел кода снабжен комментариями, которые поясняют его назначение.

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

    Основные моменты:

    • Значение subscriptionId извлекается из переменной среды AZURE_SUBSCRIPTION_ID.
    • Значения location и resourceGroupName строки задаются для тестирования. При необходимости измените эти значения на что-то подходящее для вашего расположения и подписки.
  5. Выполните команду go mod tidy, которая очищает зависимости в файле go.mod на основе анализа исходного кода.

    go mod tidy
    
  6. Чтобы выполнить сборку и запустить приложение, выполните go run.

    go run .
    

4. Проверка результатов

  1. Перейдите на портал Azure.

  2. Выполните вход и выберите подписку Azure.

  3. В меню слева выберите Группа ресурсов.

  4. Новая группа ресурсов указана в группах ресурсов подписки Azure.

5. Обновление группы ресурсов

  1. Вернитесь к файлу main.go.

  2. Вставьте следующий код непосредственно над функцией 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)
    }
    

После добавления кода перейдите к следующему разделу. Код выполняется в следующем разделе.

6. Получение списка групп ресурсов в подписке Azure

  1. Вернитесь к файлу main.go.

  2. Вставьте следующий код непосредственно над функцией 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
    }
    

После добавления кода перейдите к следующему разделу. Код выполняется в следующем разделе.

7. Удаление группы ресурсов

  1. Вернитесь к файлу main.go.

  2. Вставьте следующий код непосредственно над функцией 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
    }
    

После добавления кода перейдите к следующему разделу. Код выполняется в следующем разделе.

8. Обновление функции main

В предыдущих разделах вы добавили код для main.go создания, обновления и удаления группы ресурсов. Вы также добавили код для перечисления всех групп ресурсов в подписке Azure. Для последовательного выполнения всех этих функций выполните следующие действия:

  1. В main.go, замените функцию main следующим кодом:

    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. Запустите код и просмотрите выходные данные.

    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
    

    Примечание.

    Удаление группы ресурсов может занять несколько минут.

Устранение неполадок

  • Просмотрите ранее опубликованные ответы на вопросы на сайте Stack Overflow или задайте свои вопросы, используя теги Azure и Go.
  • Обо всех возникших ошибках сообщайте на сайте GitHub.

Следующие шаги