Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste tutorial, você usará o SDK do Azure para Go para implantar um modelo do Azure Resource Manager.
O Azure Resource Manager é p serviço de implantação e gerenciamento do Azure. Ele permite que você crie, atualize e exclua recursos em sua conta do Azure. Os modelos do Azure Resource Manager descrevem declarativamente sua infraestrutura como código em documentos JSON.
Ao final deste tutorial, você escreve e implanta um modelo do Azure Resource Manager usando o Go.
Pré-requisitos
- Assinatura do Azure: Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Criar um novo módulo
Nesta seção, você criará um novo módulo Go e instalará os pacotes necessários do SDK do Azure. Em seguida, você cria o arquivo de aplicativo principal e adiciona um código que implanta um modelo do Azure Resource Manager.
Crie um novo diretório chamado
deployARM-how-to. Em seguida, mude para esse diretório.mkdir deployARM-how-to cd deployARM-how-toExecute o comando
go mod initpara criar o arquivogo.mode os arquivosgo.sum.go mod init deployARM-how-toO SDK do Azure para Go contém vários pacotes para trabalhar com o Azure. Para este tutorial, você precisa dos pacotes
azcore/to,azidentityearmresources.Execute o
go getcomando para baixar estes pacotes: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/armresourcesCrie um arquivo chamado
main.go.touch main.goAbra
main.goem seu editor e adicione o seguinte código que se autentica no Azure, cria um grupo de recursos e implanta um modelo do 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) }
Criar o modelo do Azure Resource Manager
deployARM-how-toNo diretório, crie outro arquivo chamadotemplate.json.Abra o
template.jsonarquivo e adicione o seguinte código de modelo do Azure Resource Manager que cria uma conta de armazenamento do 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": {} }Substitua
<StorageAccountName>e<StorageAccountDisplayName>por um valor de nome de armazenamento válido.
Para obter mais informações sobre modelos do Azure Resource Manager, consulte a visão geral dos modelos do Azure Resource Manager.
Entrar no Azure
O código neste artigo usa o tipo DefaultAzureCredential do módulo de Identidade do Azure para Go para autenticar no Azure.
DefaultAzureCredential dá suporte a muitos tipos de credencial para autenticação com o Azure usando o OAuth com a ID do Microsoft Entra. Neste artigo, você usa as credenciais de usuário com as quais entra na CLI do Azure.
Se você ainda não fez isso, entre na CLI do Azure:
az login
Se várias assinaturas estiverem associadas à sua conta, use o comando az account list para obter uma lista dessas assinaturas. Use o comando az account set para definir a assinatura ativa. Ao definir a assinatura ativa, você garante que todos os comandos da CLI executados no restante deste artigo são executados na assinatura pretendida.
Observação
Quando executado localmente, DefaultAzureCredential também dá suporte a credenciais de autenticação da CLI do Desenvolvedor do Azure (AZD) ou a um principal de serviço do Azure que você configura em variáveis de ambiente. Para saber mais sobre todos os tipos de credencial com suporte, consulte a autenticação do Azure com o módulo identidade do Azure para Go.
Executar o aplicativo
Antes de implantar o modelo, você precisa definir sua ID de assinatura do Azure como uma variável de ambiente.
Para obter a ID da assinatura, execute o comando az account show a seguir.
az account show --query id --output tsvDefina a variável de
AZURE_SUBSCRIPTION_IDambiente com a ID da assinatura. Substitua<AzureSubscriptionId>por sua ID da assinatura.export AZURE_SUBSCRIPTION_ID=<AzureSubscriptionId>Execute o
go runcomando para implantar o modelo:go run main.go
Troubleshoot
Se a implantação da conta de armazenamento falhar, verifique se você usou um valor de nome de armazenamento válido. Os nomes da conta de armazenamento precisam ter entre 3 e 24 caracteres e podem conter apenas números e letras minúsculas.
Se o programa retornar um erro relacionado à autenticação ou autorização, verifique os seguintes itens:
Se o erro começar com um carimbo de data/hora e o seguinte texto: "falha ao obter uma resposta: DefaultAzureCredential: falha ao adquirir um token.", verifique se você efetuou login na CLI do Azure como instruído antes.
Se o erro for uma autorização ou erro proibido (código de status 401 ou 403), verifique se sua conta de usuário está em uma função do Azure que lhe dá direitos para criar grupos de recursos e adicionar recursos em sua assinatura. Exemplos incluem as funções padrão Colaborador ou Proprietário no Azure. Para saber como atribuir funções do Azure ao usuário, consulte Atribuir funções do Azure usando a CLI do Azure.
Para obter diretrizes de solução de problemas mais detalhadas, consulte Solucionar problemas de autenticação de Identidade do Azure.
Verificar os recursos no Azure
Você pode usar vários comandos da CLI do Azure para verificar se os recursos foram criados com êxito no Azure. Os comandos a seguir são alguns exemplos.
Para verificar se o grupo de recursos existe, execute o comando az group exists .
az group exists --name deployARM-how-to
Você pode listar os recursos no grupo usando o comando az resource list .
az resource list --resource-group deployARM-how-to
Você pode examinar os resultados da implantação (outputResources) e as propriedades usando o comando az deployment group show .
az deployment group show -g deployARM-how-to -n deployARM-how-to
Limpar os recursos
Os recursos no Azure podem incorrer em encargos contínuos. Certifique-se de limpar os recursos que você criou neste artigo.
Implantar um modelo vazio no modo completo exclui todos os recursos em um grupo de recursos. É uma forma eficiente de gerenciar os recursos sem excluir o próprio grupo de recursos.
Crie um novo modelo vazio chamado
empty-template.json.Abra
empty-template.jsonno editor e adicione o seguinte código:{ "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [], "outputs": {} }Abra o arquivo
main.go.Atualize o valor da
templateFileconstante paraempty-template.json.const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "empty-template.json" )Altere o tempo de implantação de incremental para concluído alterando as propriedades do modo de implantação para
DeploymentModeComplete. Para saber mais sobre os modos de implantação, consulte os modos de implantação do 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, )Execute o
go runcomando para implantar o modelo vazio e excluir a conta de armazenamento que você criou anteriormente.go run main.go
Em vez de usar uma implantação, você pode excluir o grupo de recursos e todos os seus recursos executando o seguinte comando da CLI do Azure:
az group delete --resource-group deployARM-how-to