Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы используете пакет SDK Azure для Go для развертывания шаблона Azure Resource Manager.
Azure Resource Manager — это служба развертывания и управления для Azure. Он позволяет создавать, обновлять и удалять ресурсы в учетной записи Azure. Шаблоны Azure Resource Manager декларативно описывают инфраструктуру как код в документах JSON.
В конце этого руководства вы напишете и развернете шаблон Azure Resource Manager с помощью Go.
Предпосылки
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Создание модуля
В этом разделе описано, как создать модуль Go и установить необходимые пакеты azure SDK. Затем вы создадите основной файл приложения и добавьте код, который развертывает шаблон Azure Resource Manager.
Создайте новый каталог с именем
deployARM-how-to. Затем перейдите в этот каталог.mkdir deployARM-how-to cd deployARM-how-togo mod initВыполните команду, чтобы создать файлgo.modи файлgo.sum.go mod init deployARM-how-toПакет SDK Azure для Go содержит несколько пакетов для работы с Azure. Для прохождения этого руководства вам понадобятся пакеты
azcore/to,azidentityиarmresources.go getВыполните команду, чтобы скачать эти пакеты: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Создайте файл с именем
main.go.touch main.goОткройте
main.goв редакторе и добавьте следующий код, который проходит проверку подлинности в Azure, создает группу ресурсов и развертывает шаблон Azure Resource Manager:package main import ( "context" "encoding/json" "fmt" "log" "os" "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" ) const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "template.json" ) var ( ctx = context.Background() ) // Read a JSON file from the given path. func readJSON(path string) (map[string]interface{}, error) { data, err := os.ReadFile(path) if err != nil { log.Fatalf("failed to read file: %v", err) } contents := make(map[string]interface{}) _ = json.Unmarshal(data, &contents) return contents, nil } func main() { subscriptionId := os.Getenv("AZURE_SUBSCRIPTION_ID") // Authenticate to Azure cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } // Create a resource group. client, err := armresources.NewResourceGroupsClient(subscriptionId, cred, nil) if err != nil { log.Fatalf("failed to create client: %v", err) } resp, err := client.CreateOrUpdate(context.Background(), resourceGroupName, armresources.ResourceGroup{ Location: to.Ptr(resourceGroupLocation), }, nil) if err != nil { log.Fatalf("failed to obtain a response: %v", err) } log.Printf("resource group ID: %s\n", *resp.ResourceGroup.ID) // Read the template file. template, err := readJSON(templateFile) if err != nil { return } // Deploy the Azure Resource Manager template. deploymentsClient, err := armresources.NewDeploymentsClient(subscriptionId, cred, nil) if err != nil { log.Fatalf("failed to create client: %v", err) } deploy, err := deploymentsClient.BeginCreateOrUpdate( ctx, resourceGroupName, deploymentName, armresources.Deployment{ Properties: &armresources.DeploymentProperties{ Template: template, Mode: to.Ptr(armresources.DeploymentModeIncremental), }, }, nil, ) if err != nil { log.Fatalf("failed to deploy template: %v", err) } fmt.Println(deploy) }
Создание шаблона Azure Resource Manager
В каталоге
deployARM-how-toсоздайте другой файл с именемtemplate.json.template.jsonОткройте файл и добавьте следующий код шаблона Azure Resource Manager, создающий учетную запись хранения Azure:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { }, "functions": [], "variables": {}, "resources": [{ "name": "<StorageAccountName>", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2021-04-01", "tags": { "displayName": "<StorageAccountDisplayName>" }, "location": "EastUS", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } }], "outputs": {} }Замените
<StorageAccountName>и<StorageAccountDisplayName>на допустимое значение имени хранилища.
Дополнительные сведения о шаблонах Azure Resource Manager см. в обзоре шаблонов Azure Resource Manager.
Вход в Azure
В этом коде используется тип DefaultAzureCredential из модуля удостоверений Azure для Go для проверки подлинности в Azure.
DefaultAzureCredential поддерживает множество типов учетных данных для проверки подлинности в Azure с помощью OAuth с идентификатором Microsoft Entra. В этой статье используются учетные данные пользователя, с которыми вы входите в Azure CLI.
Если вы еще не сделали этого, войдите в Azure CLI:
az login
Если несколько подписок связаны с вашей учетной записью, используйте команду az account list , чтобы получить список этих подписок. Используйте команду az account set , чтобы задать активную подписку. Установив активную подписку, вы гарантируете, что все команды CLI, выполняемые в остальной части этой статьи, выполняются в вашей предполагаемой подписке.
Замечание
При локальном запуске DefaultAzureCredential также поддерживает учетные данные для входа в Azure Developer CLI (AZD) или служебного принципала Azure, настроенного в переменных среды. Дополнительные сведения обо всех поддерживаемых типах учетных данных см. в статье "Проверка подлинности Azure" с помощью модуля удостоверений Azure для Go.
Запуск приложения
Прежде чем развернуть шаблон, необходимо определить идентификатор подписки Azure в качестве переменной среды.
Чтобы получить идентификатор подписки, выполните следующую команду az account show .
az account show --query id --output tsvЗадайте переменную среды
AZURE_SUBSCRIPTION_IDс идентификатором подписки. Замените<AzureSubscriptionId>идентификатором своей подписки.export AZURE_SUBSCRIPTION_ID=<AzureSubscriptionId>go runВыполните команду, чтобы развернуть шаблон:go run main.go
Troubleshoot
Если развертывание учетной записи хранения завершается ошибкой, убедитесь, что вы использовали допустимое значение имени хранилища. Имена учетных записей хранения должны быть от 3 до 24 символов длиной и могут содержать только строчные буквы и цифры.
Если программа возвращает ошибку, связанную с проверкой подлинности или авторизацией, проверьте следующие элементы:
Если ошибка начинается с метки времени и следующего текста: "Не удалось получить ответ: DefaultAzureCredential: не удалось получить токен". Убедитесь, что вы вошли в Azure CLI, как показано ранее.
Если ошибка является ошибкой авторизации или запрещена (код состояния 401 или 403), убедитесь, что учетная запись пользователя находится в роли Azure, которая предоставляет ему права на создание групп ресурсов и добавление ресурсов в подписку. Примерами являются встроенные ролиучастника или владельца Azure. Сведения о назначении ролей Azure пользователю см. в статье "Назначение ролей Azure с помощью Azure CLI".
Дополнительные сведения об устранении неполадок см. в статье "Устранение неполадок с проверкой подлинности удостоверений Azure".
Проверка ресурсов в Azure
Для проверки успешности создания ресурсов в Azure можно использовать несколько команд Azure CLI. Следующие команды — это некоторые примеры.
Чтобы убедиться, что группа ресурсов существует, выполните команду az group.
az group exists --name deployARM-how-to
Вы можете перечислить ресурсы в группе с помощью команды az resource list .
az resource list --resource-group deployARM-how-to
Можно проверить результаты развертывания (outputResources) и свойства с помощью команды az deployment group show.
az deployment group show -g deployARM-how-to -n deployARM-how-to
Очистите ресурсы
Ресурсы в Azure могут приводить к текущим расходам. Не забудьте очистить ресурсы, созданные в этой статье.
Развертывание пустого шаблона в полном режиме удаляет все ресурсы в группе ресурсов. Это простой способ очистки ресурсов без удаления самой группы ресурсов.
Создайте пустой шаблон с именем
empty-template.json.Откройте
empty-template.jsonв редакторе и добавьте следующий код:{ "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [], "outputs": {} }main.goОткройте файл.Обновите значение константы
templateFileнаempty-template.json.const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "empty-template.json" )Измените время развертывания с инкрементного на полное, изменив свойства режима Mode на
DeploymentModeComplete. Дополнительные сведения о режимах развертывания см. в режимах развертывания в Azure Resource Manager.deploy, err = deploymentsClient.BeginCreateOrUpdate( ctx, resourceGroupName, deploymentName, armresources.Deployment{ Properties: &armresources.DeploymentProperties{ Template: template, Mode: to.Ptr(armresources.DeploymentModeComplete), //Deployment Mode is here }, }, nil, )go runВыполните команду, чтобы развернуть пустой шаблон и удалить созданную ранее учетную запись хранения.go run main.go
Вместо использования развертывания можно удалить группу ресурсов и все ее ресурсы, выполнив следующую команду Azure CLI:
az group delete --resource-group deployARM-how-to