Ejercicio: Implementación de las plantillas de Resource Manager

Completado

Nota:

La primera vez que active un espacio aislado y acepte los términos, la cuenta de Microsoft se asocia a un nuevo directorio de Azure denominado Espacio aislado de Microsoft Learn. Se le agrega a una suscripción especial llamada Suscripción de Concierge.

Aquí se implementa una plantilla de Azure Resource Manager (ARM) desde el equipo y desde un repositorio de GitHub mediante la especificación de un URI.

Importante

En este ejercicio se utilizan las Herramientas de Azure Resource Manager para Visual Studio Code. Asegúrese de instalar esta extensión en Visual Studio Code.

Configuración del entorno con la suscripción del Espacio aislado de Microsoft Learn

Para realizar las implementaciones en esta unidad, debe iniciar sesión en la cuenta de Azure desde el terminal de Visual Studio Code.

Asegúrese de que ha iniciado sesión en la misma cuenta con la que ha activado el espacio aislado.

Inicio de sesión en Azure

  1. Desde el terminal de Visual Studio Code, ejecute el comando siguiente para iniciar sesión en Azure. Al ejecutar este comando, se abre un explorador que le permite iniciar sesión en la cuenta.

    Connect-AzAccount
    
  2. Después de iniciar sesión, verá una lista de las suscripciones asociadas a esta cuenta en el terminal. Si se ha activado el espacio aislado, la Suscripción a Concierge debe estar en esta lista.

  3. Compruebe el nombre de la suscripción. El comando siguiente muestra las suscripciones, los nombres y sus id. en un formato de tabla de fácil lectura. Busque Concierge Subscription.

    Get-AzSubscription
    
  4. Cambie la suscripción activa a la Suscripción de Concierge.

    $context = Get-AzSubscription -SubscriptionName "Concierge Subscription" | Set-AzContext
    

Establecimiento del grupo de recursos predeterminado

Ahora tendrá que establecer como predeterminado el grupo de recursos que se ha creado de forma automática en el espacio aislado. Para realizar esa operación, en primer lugar debe obtener el nombre del grupo de recursos mediante la ejecución del comando siguiente.

Get-AzResourceGroup | where-object ResourceGroupName -match "learn" | Set-AzDefault

En este comando, use el nombre del recurso que ha obtenido del comando anterior. (Tiene un aspecto similar a learn-a73131a1-b618-48b8-af70-21af7ca420c4). Este comando permite omitir ese parámetro del resto de los comandos de Azure PowerShell en este ejercicio.

Nota:

Normalmente, cuando se ejecuta un comando de PowerShell o de la CLI de Azure para implementar una plantilla, se debe especificar el nombre del grupo de recursos de destino. Al ejecutar el comando anterior, hemos establecido el contexto de la implementación. Hemos especificado el nombre del grupo de recursos del espacio aislado mediante la ejecución del comando Set-AzDefault de PowerShell:

Set-AzDefault -ResourceGroupName {Resource Group Name}

Implementación de una plantilla local

En el ejercicio siguiente, se implementa una plantilla desde el equipo local. El nombre del grupo de recursos que se usa normalmente al implementar en su propio entorno no es necesario aquí, puesto que ya hemos definido el grupo de recursos predeterminado en la sección anterior.

  1. Para empezar, copie y pegue el contenido del código de plantilla siguiente en un archivo de un directorio local. Por ejemplo, use C:\JSON\maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Una vez que haya guardado el archivo localmente, puede usar el comando de PowerShell para implementarlo en el nivel de grupo de recursos del que hemos hablado en la última unidad. Es decir, use el comando New-AzResourceGroupDeployment.

    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-"+"$today"
    
    New-AzResourceGroupDeployment `
    -Name $DeploymentName `
    -TemplateFile $templateFile
    

    Una vez que finalice, debería tener resultados como el ejemplo siguiente.

    DeploymentName          : DeployLocalTemplate-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:50:04 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Implementación de la misma plantilla local con valores de parámetro

En el último ejercicio ha implementado la plantilla con el valor predeterminado del parámetro. Cuando se implementa una plantilla de Resource Manager local, es posible que necesite pasar valores de parámetro. Puede usar parámetros insertados o un archivo de parámetros.

Para pasar parámetros insertados a la implementación, debe proporcionar los nombres del parámetro con el cmdlet New-AzResourceGroupDeployment. En el ejercicio siguiente, los parámetros se pasarán como parámetros insertados y como un archivo de parámetros.

  1. Con la misma plantilla que en el último ejercicio, construirá una tabla hash que incluirá los valores de los parámetros de plantilla necesarios.

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-2-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterObject $parameters
    

    Una vez que finalice, debería tener resultados como los siguientes:

    DeploymentName          : DeployLocalTemplate-2-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:51:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

    En lugar de pasar parámetros como valores insertados en el script, puede que le resulte más fácil usar un archivo JSON que contenga los valores de los parámetros. El archivo de parámetros puede ser un archivo local o un archivo externo/remoto con un URI accesible. Para más información sobre el archivo de parámetro, consulte Creación de un archivo de parámetros de Resource Manager.

  2. Para pasar un archivo de parámetros local, usamos el parámetro TemplateParameterFile en el mismo comando que hemos usado. Pero, en primer lugar, debe crear y guardar el archivo de parámetros.

    1. Dado que estamos usando Visual Studio Code con la extensión de Herramientas de Azure Resource Manager, puede abrir la plantilla de ARM que ha guardado localmente y seleccionar en el vínculo Seleccionar o crear un archivo de parámetros....

    2. Seleccione Nuevo en el menú y, a continuación, seleccione Solo los parámetros necesarios. La extensión crea un archivo de parámetros basado en la plantilla que está abierta actualmente.

    Captura de pantalla en la que se muestran las selecciones para crear un archivo de parámetros en Visual Studio Code.

  3. Use el comando siguiente de PowerShell con el parámetro TemplateParameterFile.

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $TemplateParameterFile= "C:\JSON\maintemplate.parameters.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-3-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterFile $TemplateParameterFile
    

    Tras la implementación, sus resultados deben tener un aspecto similar al del ejemplo siguiente.

    DeploymentName          : DeployLocalTemplate-3-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:54:40 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Implementación de una plantilla externa o remota

En algunos casos, deberá realizar la implementación desde una ubicación externa o remota, en lugar de hacerlo desde una plantilla en el equipo local. Puede almacenar plantillas en un repositorio de control de código fuente (por ejemplo, GitHub). O bien, puede almacenarlas en una cuenta de Azure Storage para el acceso compartido en su organización.

  1. Para implementar una plantilla externa, use el parámetro TemplateUri.

    En el ejercicio siguiente, realizará la implementación de una plantilla de Resource Manager desde un repositorio de GitHub. El repositorio es público y, por lo tanto, no es necesario preocuparse por implementar una plantilla que requiera un token de firma de acceso compartido (SAS). Para obtener información detallada sobre el uso de una ubicación remota privada o segura, vea Implementación de una plantilla privada con el token de SAS.

    El URI de la plantilla del ejercicio es https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Se trata de una plantilla breve que implementa una cuenta de almacenamiento básica en su entorno de espacio aislado.

  2. El comando de PowerShell es exactamente el mismo que el de una plantilla local. La única diferencia es que el parámetro -TemplateUri reemplaza al parámetro -TemplateFile.

    Use el código siguiente para realizar la implementación en el espacio aislado proporcionado:

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-4-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    Los resultados son similares al de la captura de pantalla siguiente. Describen los detalles de la ubicación de la plantilla.

    DeploymentName          : DeployLocalTemplate-4-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:56:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
                              Uri            :
                              https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
                              ContentVersion : 1.0.0.0
    
    Parameters              :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountType    String                     Standard_LRS
                              location              String                     westus
    
    Outputs                 :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountName    String                     storepgxosadmbq77e
    
    DeploymentDebugLogLevel :
    
    

Nota:

Esta sección se ha escrito con los comandos de la CLI de Azure en el Subsistema de Windows para Linux (WSL2) en Windows 10. Los comandos son los mismos tanto si usa la CLI de Azure en un shell de PowerShell como si la usa en CMD o Bash. Sin embargo, la forma en que se tratan las variables puede diferir.

Inicio de sesión en Azure

  1. Desde el terminal de Visual Studio Code, ejecute el comando siguiente para iniciar sesión en Azure. Al ejecutar este comando, se abre un explorador que le permite iniciar sesión en la cuenta.

    az login
    
  2. Después de iniciar sesión, verá una lista JSON de las suscripciones asociadas a esta cuenta en el terminal. Si se ha activado el espacio aislado, la Suscripción a Concierge debe estar en esta lista.

  3. Obtenga el identificador de la suscripción. El comando siguiente muestra las suscripciones y sus identificadores. El id. de suscripción es la tercera columna. Busque Concierge Subscription y copie la tercera columna. Debe tener un aspecto similar a cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    az account list -o table
    
  4. Cambie la suscripción activa a la suscripción de Concierge. Asegúrese de sustituir {Your subscription ID} por el id. de Suscripción de Concierge que ha obtenido en el comando anterior.

    az account set -s {Your subscription ID}
    

Establecimiento del grupo de recursos predeterminado

Ahora tendrá que establecer como predeterminado el grupo de recursos que se ha creado de forma automática en el espacio aislado. Para realizar esa operación, en primer lugar debe obtener el nombre del grupo de recursos mediante el comando siguiente:

az group list -o table

En este comando, use el nombre del recurso que ha obtenido del comando anterior. (Tiene un aspecto similar a learn-a73131a1-b618-48b8-af70-21af7ca420c4). Este comando permite omitir ese parámetro del resto de los comandos de la CLI de Azure de este ejercicio.

Nota:

Normalmente, cuando se usa un comando de la CLI de Azure para implementar una plantilla, es necesario especificar el nombre del grupo de recursos de destino. En el ejercicio de este módulo, vamos a omitir este requisito estableciendo el contexto de nuestra implementación. Vamos a especificar el nombre del grupo de recursos del espacio aislado en el paso siguiente mediante el comando az configure de la CLI de Azure.

az configure --defaults group={Resource Group Name}

Implementación de una plantilla local

En el ejercicio siguiente, se implementa una plantilla desde el equipo local. El nombre del grupo de recursos que se usa normalmente al implementar en su propio entorno no es necesario aquí, puesto que ya hemos definido el grupo de recursos predeterminado en la sección anterior.

  1. Para empezar, copie y pegue el contenido del código de plantilla siguiente en un archivo de un directorio local. Por ejemplo, utilice C:\JSON\maintemplate.json o /mnt/c/Users/you/json/maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Una vez que haya guardado el archivo localmente, puede usar el comando de la CLI de Azure para implementarlo en el nivel de grupo de recursos del que hemos hablado en la última unidad. En concreto, utilice az deployment group create.

    Nota:

    En el ejemplo siguiente, el archivo de plantilla se encuentra en una carpeta json en la unidad principal del Subsistema de Windows para Linux (WSL2). Ajuste el comando en función del shell que prefiera.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-"$today
    
    az deployment group create \
      --name $deploymentname \
      --template-file $templateFile
    

    Cuando finaliza, el resultado es semejante al del ejemplo siguiente. Para asegurarse de que la implementación se ha realizado correctamente, busque la línea "provisioningState": "Succeeded".

    {
      "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-2020-08-19",
      "properties": {
        "correlationId": "6ad759d5-cda5-4a71-a772-05a03d983c6f",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT8.9060761S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/    learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Network/virtualNetworks/VNet-001",
            "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd"
          }
        ],
        "outputs": null,
        "parameters": {
          "costCenterIO": {
            "type": "String",
            "value": "12345"
          },
          "ownerName": {
            "type": "String",
            "value": "John Smith"
          },
          "vnetName": {
            "type": "String",
            "value": "VNet-001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Network",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "virtualNetworks"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "11553431046699679955",
        "templateLink": null,
        "timestamp": "2020-08-19T14:47:06.403362+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    

Implementación de la misma plantilla local con valores de parámetro

En el último ejercicio ha implementado la plantilla con el valor predeterminado del parámetro. Cuando se implementa una plantilla de Resource Manager local, es posible que necesite pasar valores de parámetro. Puede usar parámetros insertados o un archivo de parámetros.

En el ejercicio siguiente se pasan los parámetros insertados a la implementación. Debe proporcionar los nombres de los parámetros si usa parámetros insertados o un archivo de parámetros, mediante el comando az deployment group create.

  1. Con la misma plantilla que en el último ejercicio, construirá una variable que incluye los parámetros en un formato de cadena JSON para los parámetros de plantilla necesarios.

    Nota:

    En el ejemplo siguiente, el archivo de plantilla se encuentra en una carpeta json en el Subsistema de Windows para Linux (WSL2). Ajuste el comando en función del shell y el sistema operativo que prefiera.

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-2-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters "$parameters"
    

    Una vez finalizado, debe tener resultados como los del ejemplo siguiente. Vea la sección "parameters" y el valor "provisioningState" para asegurarse de que el comando se ha ejecutado correctamente.

      {- Finished ..
        "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2-2020-08-19",      
        "location": null,
        "name": "DeployLocalTemplate-2-2020-08-19",
        "properties": {
          "correlationId": "edb2992e-08be-4ec2-940e-df23b1c09453",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.6990388S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T16:40:20.249786+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

    En lugar de pasar parámetros como valores insertados en el script, puede que le resulte más fácil usar un archivo JSON que contenga los valores de los parámetros. El archivo de parámetros puede ser un archivo local o un archivo externo/remoto con un URI accesible. Para más información sobre el archivo de parámetro, consulte Creación de un archivo de parámetros de Resource Manager.

  2. Para pasar un archivo de parámetros local, usamos el parámetro --parameters en el mismo comando que hemos usado. Pero, en primer lugar, debe crear y guardar el archivo de parámetros.

    1. Dado que estamos usando Visual Studio Code con la extensión de Herramientas de Azure Resource Manager, puede abrir la plantilla de Resource Manager que ha guardado localmente y seleccionar en el vínculo Seleccionar o crear un archivo de parámetros para habilitar la validación completa.

    2. En el menú, seleccione Nuevo. La extensión crea un archivo de parámetros basado en la plantilla que está abierta actualmente.

    Captura de pantalla en la que se muestran las selecciones para crear un archivo de parámetros en Visual Studio Code.

  3. Use el comando siguiente de la CLI de Azure con el parámetro --parameters.

    Nota:

    En el ejemplo siguiente, el archivo de plantilla se encuentra en una carpeta json en el Subsistema de Windows para Linux (WSL2). Ajuste el comando en función del shell y el sistema operativo que prefiera.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    templateparameterfile=/mnt/c/Users/<UserName>/json/maintemplate.parameters.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters $templateparameterfile
    

    Tras la implementación, sus resultados deben tener un aspecto similar al del ejemplo siguiente.

      {- Finished ..
        "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
        "location": null,
        "name": "DeployLocalTemplate-3-2020-08-19",
        "properties": {
          "correlationId": "2a668f55-d8d0-48ac-862f-7170b48c02b6",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.2058912S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T20:42:44.069215+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

Implementación de una plantilla externa o remota

En algunos casos, deberá realizar la implementación desde una ubicación externa o remota, en lugar de hacerlo desde una plantilla en el equipo local. Puede almacenar plantillas en un repositorio de control de código fuente (por ejemplo, GitHub). O bien, puede almacenarlas en una cuenta de Azure Storage para el acceso compartido en su organización.

  1. Para implementar una plantilla externa, use el parámetro --template-uri.

En este ejercicio, se implementa una plantilla de Resource Manager desde un repositorio de GitHub. El repositorio es público y, por lo tanto, no es necesario preocuparse por implementar una plantilla que requiera un token de firma de acceso compartido (SAS). Para obtener información detallada sobre el uso de una ubicación remota privada o segura, vea Implementación de una plantilla privada con el token de SAS.

El URI de la plantilla del ejercicio es https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Se trata de una plantilla breve que implementa una cuenta de almacenamiento básica en su entorno de espacio aislado.

  1. El comando de la CLI de Azure es exactamente el mismo que el de una plantilla local. La única diferencia es que el parámetro --template-uri reemplaza al parámetro --template-file.

  2. Use el código siguiente para realizar la implementación en el espacio aislado proporcionado:

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-4-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    Los resultados son similares al bloque de código siguiente. Describen los detalles de la ubicación de la plantilla en la sección "templateLink". También muestran si la implementación se ha realizado correctamente en la sección "provisioningState".

    {- Finished ..
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-4-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-4-2020-08-19",
      "properties": {
        "correlationId": "2ccc49de-9d46-4375-a25d-19ec10daf88b",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT24.3286124S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          }
        ],
        "outputs": {
          "storageAccountName": {
            "type": "String",
            "value": "store7zk7eyqew54l4"
          }
        },
        "parameters": {
          "location": {
            "type": "String",
            "value": "westus"
          },
          "storageAccountType": {
            "type": "String",
            "value": "Standard_LRS"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Storage",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "storageAccounts"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12600309984865991765",
        "templateLink": {
          "contentVersion": "1.0.0.0",
          "id": null,
          "relativePath": null,
          "uri": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json"
        },
        "timestamp": "2020-08-19T20:53:36.759312+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }