Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, usará el SDK de Azure para Go para implementar una plantilla de Azure Resource Manager.
Azure Resource Manager es el servicio de implementación y administración para Azure. Permite crear, actualizar y eliminar recursos en su cuenta de Azure. Las plantillas de Azure Resource Manager describen mediante declaración la infraestructura como código en documentos JSON.
Al final de este tutorial, escribirá e implementará una plantilla de Azure Resource Manager mediante Go.
Prerrequisitos
- Suscripción de Azure: si no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.
Creación de un nuevo módulo
En esta sección, creará un nuevo módulo de Go e instalará los paquetes necesarios del SDK de Azure. A continuación, cree el archivo de aplicación principal y agregue código que implemente una plantilla de Azure Resource Manager.
Cree un directorio denominado
deployARM-how-to. A continuación, cambie a ese directorio.mkdir deployARM-how-to cd deployARM-how-toEjecute el
go mod initcomando para crear losgo.modarchivos ygo.sum.go mod init deployARM-how-toEl SDK de Azure para Go contiene varios paquetes para trabajar con Azure. Para este tutorial, necesita los
azcore/topaquetes ,azidentityyarmresources.Ejecute el
go getcomando para descargar estos paquetes: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/armresourcesCree un archivo llamado
main.go.touch main.goAbra
main.goen el editor y agregue el código siguiente que se autentica en Azure, cree un grupo de recursos e implemente una plantilla de 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) }
Creación de la plantilla de Azure Resource Manager
En el
deployARM-how-todirectorio , cree otro archivo denominadotemplate.json.Abra el archivo y agregue el
template.jsonsiguiente código de plantilla de Azure Resource Manager que crea una cuenta de Azure Storage:{ "$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": {} }Reemplace
<StorageAccountName>y<StorageAccountDisplayName>por un valor de nombre de almacenamiento válido.
Para más información sobre las plantillas de Azure Resource Manager, consulte Introducción a las plantillas de Azure Resource Manager.
Inicio de sesión en Azure
El código de este artículo usa el tipo DefaultAzureCredential del módulo Azure Identity para Go para autenticarse en Azure.
DefaultAzureCredential admite muchos tipos de credenciales para la autenticación con Azure mediante OAuth con el identificador de Microsoft Entra. En este artículo, usará las credenciales de usuario con las que inicia sesión en la CLI de Azure.
Si aún no lo ha hecho, inicie sesión en la CLI de Azure:
az login
Si hay varias suscripciones asociadas a su cuenta, use el comando az account list para obtener una lista de esas suscripciones. Use el comando az account set para establecer la suscripción activa. Al establecer la suscripción activa, asegúrese de que los comandos de la CLI que ejecute en el resto de este artículo se ejecuten en la suscripción prevista.
Nota:
Cuando se ejecuta localmente, DefaultAzureCredential también admite las credenciales de inicio de sesión de Azure Developer CLI (AZD) o un service principal de Azure que configures en las variables de entorno. Para más información sobre todos los tipos de credenciales admitidos, consulte Autenticación de Azure con el módulo Azure Identity para Go.
Ejecutar la aplicación
Para poder implementar la plantilla, debe definir el identificador de suscripción de Azure como una variable de entorno.
Para obtener el identificador de suscripción, ejecute el siguiente comando az account show .
az account show --query id --output tsvConfigure la variable de entorno
AZURE_SUBSCRIPTION_IDcon su ID de suscripción. Reemplace<AzureSubscriptionId>con el Id. de suscripción.export AZURE_SUBSCRIPTION_ID=<AzureSubscriptionId>Ejecute el
go runcomando para implementar la plantilla:go run main.go
Troubleshoot
Si se produce un error en la implementación de la cuenta de almacenamiento, compruebe que usó un valor de nombre de almacenamiento válido. Los nombres de las cuentas de almacenamiento deben tener entre 3 y 24 caracteres y solo pueden incluir números y letras en minúscula.
Si el programa devuelve un error relacionado con la autenticación o autorización, compruebe los siguientes elementos:
Si el error comienza con una marca de tiempo y el texto siguiente: "no se pudo obtener una respuesta: DefaultAzureCredential: no se pudo adquirir un token", asegúrese de que inició sesión en la CLI de Azure como se indicó anteriormente.
Si el error es un error de autorización o prohibido (código de estado 401 o 403), asegúrese de que la cuenta de usuario está en un rol de Azure que le concede derechos para crear grupos de recursos y agregar recursos en la suscripción. Entre los ejemplos se incluyen los roles integrados colaborador o propietariode Azure. Para obtener información sobre cómo asignar roles de Azure al usuario, consulte Asignación de roles de Azure mediante la CLI de Azure.
Para obtener instrucciones de solución de problemas más detalladas, consulte Solución de problemas de autenticación de identidad de Azure.
Comprobación de los recursos en Azure
Puede usar varios comandos de la CLI de Azure para comprobar que los recursos se crearon correctamente en Azure. Los siguientes comandos son algunos ejemplos.
Para comprobar que el grupo de recursos existe, ejecute el comando az group exists .
az group exists --name deployARM-how-to
Puede enumerar los recursos del grupo mediante el comando az resource list .
az resource list --resource-group deployARM-how-to
Puede examinar los resultados de la implementación (recursos de salida) y las propiedades mediante el comando az deployment group show.
az deployment group show -g deployARM-how-to -n deployARM-how-to
Limpieza de recursos
Los recursos de Azure pueden incurrir en cargos continuos. Asegúrese de limpiar los recursos que creó en este artículo.
La implementación de una plantilla vacía en modo completo elimina todos los recursos de un grupo de recursos. Es una manera ordenada de limpiar los recursos sin eliminar el propio grupo de recursos.
Cree una plantilla vacía denominada
empty-template.json.Abra
empty-template.jsonen el editor y agregue el código siguiente:{ "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [], "outputs": {} }Abrir el archivo
main.go.Actualice el
templateFilevalor constante aempty-template.json.const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "empty-template.json" )Cambie el tiempo de implementación de incremental a completado cambiando las propiedades del modo de implementación a
DeploymentModeComplete. Para más información sobre los modos de implementación, consulte modos de implementación de 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, )Ejecute el
go runcomando para implementar la plantilla vacía y eliminar la cuenta de almacenamiento que creó anteriormente.go run main.go
En lugar de usar una implementación, puede eliminar el grupo de recursos y todos sus recursos mediante la ejecución del siguiente comando de la CLI de Azure:
az group delete --resource-group deployARM-how-to