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


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

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

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

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

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

2. Настройка проверки подлинности

Выберите метод проверки подлинности, который соответствует вашим потребностям. Мы предлагаем несколько методов проверки подлинности без учетных данных для приложений, размещенных в серверных и локальных средах. Проверка подлинности приложений Go в службах Azure с помощью статьи Azure SDK для Go поможет решить, какой механизм проверки подлинности лучше подходит для вашего сценария.

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. Запустите go get для загрузки, сборки и установки необходимых модулей Azure SDK для 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
    

    Это важно

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

  4. Создайте файл с именем main.go и добавьте следующий код. Каждый раздел кода закомментирован для объяснения своей цели.

    package main
    
    // Import key modules.
    import (
        "context"
        "log"
    
        "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    = "<your_subscription_id>"
        location          = "<your_region>"
        resourceGroupName = "<your_resource_group_name>" // !! 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)
    }
    

    Значения 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.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
    

    Замечание

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

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

Дальнейшие шаги