Управление группами ресурсов с помощью Azure SDK для Go
В этой статье вы узнаете, как создать группу ресурсов и управлять ею с помощью библиотеки управления Azure SDK для Go.
1. Настройка ресурсов Azure
Чтобы выполнить действия, описанные в этой статье, вам потребуются следующие ресурсы и идентификаторы Azure:
Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Получите идентификатор клиента Microsoft Entra.
Создайте субъект-службу. Обратите внимание на идентификатор и секрет приложения (клиента) субъекта-службы. Убедитесь, что вы также следуйте инструкциям, чтобы назначить роль участника в подписке приложению. Роль участника — это роль привилегированного администратора, которая предоставляет разрешение на управление всеми ресурсами в подписке.
Прежде чем перейти к следующему разделу, убедитесь, что вы указали идентификатор подписки (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. Создание группы ресурсов
Создайте каталог для тестирования и выполнения примера кода Go и сделайте его текущим каталогом.
Запустите go mod init, чтобы создать модуль в текущем каталоге.
go mod init <module_path>
Основные моменты:
- Параметр
<module_path>
обычно обозначает расположение в репозитории GitHub, напримерgithub.com/<your_github_account_name>/<directory>
. - При создании приложения командной строки в качестве теста и публикации приложения
<module_path>
не требуется ссылаться на фактическое расположение.
- Параметр
Чтобы скачать, выполнить сборку и установить необходимые модули 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.Создайте файл
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
строки задаются для тестирования. При необходимости измените эти значения на что-то подходящее для вашего расположения и подписки.
- Значение
Выполните команду go mod tidy, которая очищает зависимости в файле
go.mod
на основе анализа исходного кода.go mod tidy
Чтобы выполнить сборку и запустить приложение, выполните
go run
.go run .
4. Проверка результатов
Перейдите на портал Azure.
Выполните вход и выберите подписку Azure.
В меню слева выберите Группа ресурсов.
Новая группа ресурсов указана в группах ресурсов подписки Azure.
5. Обновление группы ресурсов
Вернитесь к файлу
main.go
.Вставьте следующий код непосредственно над функцией
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
Вернитесь к файлу
main.go
.Вставьте следующий код непосредственно над функцией
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. Удаление группы ресурсов
Вернитесь к файлу
main.go
.Вставьте следующий код непосредственно над функцией
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. Для последовательного выполнения всех этих функций выполните следующие действия:
В
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") }
Запустите код и просмотрите выходные данные.
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.