Creación e implementación de grupos de recursos de Azure mediante Visual Studio

Con Visual Studio, puede crear un proyecto que implementa su infraestructura y código en Azure. Por ejemplo, puede implementar el host web, el sitio web y el código del sitio web. Visual Studio proporciona muchas plantillas de inicio diferentes para la implementación de escenarios comunes. En este artículo se implementa una aplicación web.

En este artículo se muestra cómo usar Visual Studio 2019 o posterior con el desarrollo de Azure y las cargas de trabajo de ASP.NET instalados. Si utiliza Visual Studio 2017, su experiencia es muy similar.

Creación de un proyecto de grupo de recursos de Azure

En esta sección, va a crear un proyecto de Grupo de recursos de Azure con una plantilla Aplicación web.

  1. En Visual Studio, seleccione Archivo>Nuevo>Proyecto.

  2. Seleccione la plantilla del proyecto Grupo de recursos de Azure y Siguiente.

    Captura de pantalla de la ventana Crear un nuevo proyecto en la que se resaltan Azure Resource Group y el botón Siguiente.

  3. Asigne un nombre a su proyecto. El resto de las opciones de configuración predeterminadas probablemente sea correctas, pero revíselas para realizar cómo funcionan en su entorno. Cuando haya terminado, seleccione Crear.

    Captura de pantalla de la ventana de nomenclatura de proyectos en Visual Studio.

  4. Elija la plantilla que desea implementar en Azure Resource Manager. Observe que hay muchas opciones diferentes basadas en el tipo de proyecto que desee implementar. Para este artículo, elija la plantilla Aplicación web y Aceptar.

    Captura de pantalla de la ventana de selección de plantillas con la plantilla de aplicación web resaltada.

    La plantilla que elija es simplemente un punto de partida, puede agregar y quitar recursos para adaptarse a su escenario específico.

  5. Visual Studio crea un proyecto de implementación de grupo de recursos para la aplicación web. Para ver los archivos del proyecto, examine el nodo del proyecto de implementación.

    Captura de pantalla del Explorador de soluciones de Visual Studio que muestra los archivos del proyecto de implementación del grupo de recursos.

    Dado que eligió la plantilla de aplicación web, verá los archivos a continuación:

    Nombre de archivo Descripción
    Deploy-AzureResourceGroup.ps1 Un script de PowerShell que ejecuta los comandos de PowerShell que se implementarán en Azure Resource Manager. Visual Studio usa este script de PowerShell para implementar su plantilla.
    WebSite.json La plantilla de Resource Manager que define la infraestructura que desea implementar en Azure y los parámetros que puede proporcionar durante la implementación. También define las dependencias entre los recursos, de modo que Resource Manager implemente los recursos en el orden correcto.
    WebSite.parameters.json Un archivo de parámetros que tiene valores necesarios para la plantilla. Transferirá los valores de los parámetros para personalizar cada implementación. Observe que Acción de compilación se establece en Contenido. Si agrega más archivos de parámetros, asegúrese de que la acción de compilación está establecida en Contenido.

    Todos los proyectos de implementación del grupo de recursos tienen estos archivos básicos. Otros proyectos pueden tener más archivos para admitir otras funcionalidades.

Personalización de la plantilla de Resource Manager

Puede personalizar un proyecto de implementación si modifica la plantilla de Resource Manager que describen los recursos que desea implementar. Para más información sobre los elementos de la plantilla de Resource Manager, consulte Creación de plantillas de Azure Resource Manager.

  1. Para trabajar en la plantilla, abra WebSite.json.

  2. El editor de Visual Studio proporciona herramientas para ayudarle con la edición de la plantilla de Resource Manager. La ventana Esquema JSON facilita la visualización de los elementos definidos en la plantilla.

    Captura de pantalla de la ventana Esquema JSON en Visual Studio para la plantilla de Resource Manager.

  3. Seleccione un elemento en el esquema para ir a esa parte de la plantilla.

    Captura de pantalla del editor Visual Studio con un elemento seleccionado en la ventana Esquema JSON.

  4. Para agregar un recurso, haga clic en el botón Agregar recurso de la parte superior de la ventana Esquema JSON, o haga clic con el botón derecho en recursos y seleccione Agregar nuevo recurso.

    Captura de pantalla de la ventana Esquema JSON en la que se resalta la opción Añadir nuevo recurso.

  5. Seleccione Cuenta de almacenamiento y asígnele un nombre. Proporcione un nombre que no tenga más de 11 caracteres y que solo contenga números y letras minúsculas.

    Captura de pantalla de la ventana Añadir nuevo recurso con la opción Cuenta de almacenamiento seleccionada.

  6. Tenga en cuenta que no solo se agregó el recurso, sino que también se agregó un parámetro para la cuenta de almacenamiento de tipo y una variable para el nombre de la cuenta de almacenamiento.

    Captura de pantalla de la ventana Esquema JSON que muestra el recurso Cuenta de almacenamiento añadido.

  7. El parámetro para el tipo de cuenta de almacenamiento está predefinido con los tipos permitidos y un tipo predeterminado. Puede dejar estos valores o modificarlos para su escenario específico. Si no quiere que nadie pueda implementar una cuenta de almacenamiento Premium_LRS a través de esta plantilla, quítela de los tipos permitidos.

    "demoaccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_ZRS",
        "Standard_GRS",
        "Standard_RAGRS"
      ]
    }
    
  8. Visual Studio también proporciona IntelliSense para ayudarle a entender qué propiedades están disponibles al editar la plantilla. Por ejemplo, para editar las propiedades de su plan de App Service, navegue al recurso HostingPlan y agregue un valor a las propiedades. Observe que IntelliSense muestra los valores disponibles y proporciona una descripción de cada valor.

    Captura de pantalla del editor Visual Studio que muestra las sugerencias de IntelliSense para la plantilla de Resource Manager.

    Puede establecer numberOfWorkers en 1 y guardar el archivo.

    "properties": {
      "name": "[parameters('hostingPlanName')]",
      "numberOfWorkers": 1
    }
    
  9. Abra el archivo WebSite.parameters.json. Utilice el archivo de parámetros para pasar valores durante la implementación que personalizan el recurso que se va a implementar. Asigne un nombre al plan de hospedaje y guarde el archivo.

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "hostingPlanName": {
          "value": "demoHostPlan"
        }
      }
    }
    

Implementación del proyecto en Azure

Ahora está preparado para implementar el proyecto en un grupo de recursos.

De forma predeterminada, el script de PowerShell (Deploy-AzureResourceGroup.ps1) en el proyecto usa el módulo de AzureRM. Si todavía tiene instalado el módulo de AzureRM y desea seguir utilizándolo, puede utilizar este script predeterminado. Con este script, puede usar la interfaz de Visual Studio para implementar la solución.

Sin embargo, si ha migrado al nuevo módulo Az, deberá agregar un nuevo script al proyecto. Para agregar un script que usa el módulo de Az, copie el script Deploy-AzTemplate.ps1 y agréguelo al proyecto. Para utilizar este script para la implementación, debe ejecutarlo desde una consola de PowerShell, en lugar de utilizar la interfaz de la implementación de Visual Studio.

En este artículo se muestran ambos enfoques. Este artículo se refiere al script predeterminado como script del módulo de AzureRM y el nuevo script como el del módulo de Az.

Script de módulo de Az

Para el script del módulo Az, abra una consola de PowerShell y ejecute:

.\Deploy-AzTemplate.ps1 -ArtifactStagingDirectory . -Location centralus -TemplateFile WebSite.json -TemplateParametersFile WebSite.parameters.json

Script del módulo AzureRM

Para el script del módulo AzureRM, use Visual Studio:

  1. En el menú contextual del nodo del proyecto de implementación, elija Implementar>Nueva.

    Captura de pantalla del menú contextual del proyecto de implementación con las opciones Implementar y Nuevo resaltadas.

  2. Aparece el cuadro de diálogo Implementar en grupo de recursos. En el cuadro de lista desplegable Grupo de recursos, elija un grupo de recursos existente o cree uno nuevo. Seleccione Implementar.

    Captura de pantalla del cuadro de diálogo Implementar en grupo de recursos de Visual Studio.

  3. En la ventana Salida puede ver el estado de la implementación. Cuando se termina la implementación, el último mensaje indica una implementación satisfactoria de una forma parecida a esta:

    18:00:58 - Successfully deployed template 'website.json' to resource group 'ExampleAppDeploy'.
    

Visualización de los recursos implementados

Comprobemos los resultados.

  1. En un explorador, abra Azure Portal e inicie sesión en su cuenta. Para ver el grupo de recursos, seleccione Grupos de recursos y el grupo de recursos que implementó.

  2. Verá todos los recursos implementados. Observe que el nombre de la cuenta de almacenamiento no es exactamente el que especificó al agregar ese recurso. La cuenta de almacenamiento debe ser única. La plantilla agrega automáticamente una cadena de caracteres al nombre que proporcionó para crear uno único.

    Captura de pantalla del portal Azure que muestra los recursos implementados en un grupo de recursos.

Agregar código al proyecto

A estas alturas ha implementado la infraestructura de la aplicación, pero no hay ningún código real que se haya implementado con el proyecto.

  1. Agregue un proyecto a la solución de Visual Studio. Haga clic con el botón derecho en la solución y seleccione Agregar>Nuevo proyecto.

    Captura de pantalla del menú contextual Añadir nuevo proyecto en Visual Studio.

  2. Agregue una aplicación web ASP.NET Core.

    Captura de pantalla de la ventana Nuevo proyecto con la opción Aplicación web ASP.NET Core seleccionada.

  3. Asigne un nombre a la aplicación web y seleccione Crear.

    Captura de pantalla de la ventana de nomenclatura de proyecto para la aplicación web ASP.NET Core.

  4. Seleccione Aplicación web y Crear.

    Captura de pantalla de la ventana Nueva aplicación web ASP.NET Core con la opción Aplicación web seleccionada.

  5. Después de que Visual Studio cree la aplicación web, podrá ver ambos proyectos en la solución.

    Captura de pantalla del Explorador de soluciones de Visual Studio que muestra los dos proyectos de la solución.

  6. Ahora, debe asegurarse de que el proyecto del grupo de recursos reconoce el nuevo proyecto. Vuelva al proyecto del grupo de recursos (ExampleAppDeploy). Haga clic con el botón derecho en Referencias y seleccione Agregar referencia.

    Captura de pantalla del menú contextual de ExampleAppDeploy en la que se resalta la opción Añadir referencia.

  7. Seleccione el proyecto de la aplicación web que ha creado.

    Captura de pantalla de la ventana Añadir referencia en Visual Studio con la opción del proyecto de aplicación web seleccionada.

    Al agregar una referencia, se vincula el proyecto de aplicación web con el proyecto del grupo de recursos y automáticamente se establecen algunas propiedades. Puede ver estas propiedades en la ventana Propiedades de la referencia. Include File Path (Incluir ruta del archivo) contiene la ruta de acceso donde se crea el paquete. Observe la carpeta (ExampleApp) y el archivo (package.zip). Debe conocer estos valores porque los proporcionará como parámetros al implementar la aplicación.

    Captura de pantalla de la ventana Propiedades que muestra las propiedades de referencia del proyecto de aplicación web.

  8. Vuelva a su plantilla (WebSite.json) y agréguele un recurso.

    Captura de pantalla de la ventana Esquema JSON con la opción Agregar nuevo recurso resaltada.

  9. En esta ocasión, seleccione Web Deploy para Web Apps.

    Captura de pantalla de la ventana Añadir nuevo recurso con la opción Web Deploy para Web Apps seleccionada.

    Guarde la plantilla.

  10. Hay algunos parámetros nuevos en la plantilla. Se han agregado en el paso anterior. No es necesario especificar valores en _artifactsLocation o _artifactsLocationSasToken, ya que se generan automáticamente. Sin embargo, debe establecer la carpeta y el nombre de archivo con la ruta de acceso que contiene el paquete de implementación. Los nombres de estos parámetros terminan con PackageFolder y PackageFileName. La primera parte del nombre es el nombre del recurso Web Deploy que agregó. En este artículo, se llaman ExampleAppPackageFolder y ExampleAppPackageFileName.

    Abra Website.parameters.json y establezca esos parámetros en los valores que ha visto en las propiedades de referencia. Establezca ExampleAppPackageFolder en el nombre de la carpeta. Establezca ExampleAppPackageFileName en el nombre del archivo ZIP.

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "hostingPlanName": {
          "value": "demoHostPlan"
        },
        "ExampleAppPackageFolder": {
          "value": "ExampleApp"
        },
        "ExampleAppPackageFileName": {
          "value": "package.zip"
        }
      }
    }
    

Implementación de código con la infraestructura

Dado que ha agregado código para el proyecto, la implementación es un poco diferente en este momento. Durante la implementación, almacena provisionalmente los artefactos para el proyecto en un lugar al que Resource Manager pueda tener acceso. Los artefactos se almacenan en una cuenta de almacenamiento.

Script de módulo de Az

Hay un pequeño cambio que debe realizar en la plantilla si está utilizando el script del módulo Az. Este script agrega una barra diagonal a la ubicación de artefactos, pero la plantilla no la espera. Abra WebSite.json y busque las propiedades de la extensión de MSDeploy. Tiene una propiedad denominada packageUri. Quite la barra diagonal entre la ubicación de los artefactos y la carpeta del paquete.

Debe verse de una manera similar a:

"packageUri": "[concat(parameters('_artifactsLocation'), parameters('ExampleAppPackageFolder'), '/', parameters('ExampleAppPackageFileName'), parameters('_artifactsLocationSasToken'))]",

Observe que, en el ejemplo anterior, no hay ningún '/', entre parameters('_artifactsLocation') y parameters('ExampleAppPackageFolder') .

Recompile el proyecto. Compilar el proyecto garantiza que los archivos que necesita implementar se agregan a la carpeta provisional.

Ahora, abra una consola de PowerShell y ejecute:

.\Deploy-AzTemplate.ps1 -ArtifactStagingDirectory .\bin\Debug\staging\ExampleAppDeploy -Location centralus -TemplateFile WebSite.json -TemplateParametersFile WebSite.parameters.json -UploadArtifacts -StorageAccountName <storage-account-name>

Script del módulo AzureRM

Para el script del módulo AzureRM, use Visual Studio:

  1. Para volver a implementar, elija Implementar y el grupo de recursos que implementó anteriormente.

    Captura de pantalla del menú contextual del proyecto de implementación con las opciones Implementar y el grupo de recursos utilizado anteriormente resaltados.

  2. Seleccione la cuenta de almacenamiento implementada con este grupo de recursos para la Cuenta de almacenamiento de artefactos.

    Captura de pantalla del cuadro de diálogo Implementar en grupo de recursos con la opción Cuenta de almacenamiento de artefactos seleccionada.

Ver aplicación web

  1. Una vez finalizada la implementación, seleccione la aplicación web en el portal. Seleccione la dirección URL para navegar al sitio.

    Captura de pantalla de Azure Portal que muestra el recurso de la aplicación web con la URL resaltada.

  2. Observe que ha implementado correctamente la aplicación ASP.NET predeterminada.

    Captura de pantalla de la aplicación ASP.NET implementada por defecto en un navegador web.

Agregar panel de operaciones

No está limitado únicamente a los recursos que están disponibles a través de la interfaz de Visual Studio. Puede personalizar la implementación si agrega un recurso personalizado a la plantilla. Para mostrar la incorporación de un recurso, agregue un panel de operaciones para administrar el recurso que implementó.

  1. Abra el archivo Website.json y agregue el JSON siguiente después del recurso de la cuenta de almacenamiento y antes del símbolo ] de cierre de la sección de recursos.

     ,{
       "properties": {
         "lenses": {
           "0": {
             "order": 0,
             "parts": {
               "0": {
                 "position": {
                   "x": 0,
                   "y": 0,
                   "colSpan": 4,
                   "rowSpan": 6
                 },
                 "metadata": {
                   "inputs": [
                     {
                       "name": "resourceGroup",
                       "isOptional": true
                     },
                     {
                       "name": "id",
                       "value": "[resourceGroup().id]",
                       "isOptional": true
                     }
                   ],
                   "type": "Extension/HubsExtension/PartType/ResourceGroupMapPinnedPart"
                 }
               },
               "1": {
                 "position": {
                   "x": 4,
                   "y": 0,
                   "rowSpan": 3,
                   "colSpan": 4
                 },
                 "metadata": {
                   "inputs": [],
                   "type": "Extension[azure]/HubsExtension/PartType/MarkdownPart",
                   "settings": {
                     "content": {
                       "settings": {
                         "content": "__Customizations__\n\nUse this dashboard to create and share the operational views of services critical to the application performing. To customize simply pin components to the dashboard and then publish when you're done. Others will see your changes when you publish and share the dashboard.\n\nYou can customize this text too. It supports plain text, __Markdown__, and even limited HTML like images <img width='10' src='https://portal.azure.com/favicon.ico'/> and <a href='https://azure.microsoft.com' target='_blank'>links</a> that open in a new tab.\n",
                         "title": "Operations",
                         "subtitle": "[resourceGroup().name]"
                       }
                     }
                   }
                 }
               }
             }
           }
         },
         "metadata": {
           "model": {
             "timeRange": {
               "value": {
                 "relative": {
                   "duration": 24,
                   "timeUnit": 1
                 }
               },
               "type": "MsPortalFx.Composition.Configuration.ValueTypes.TimeRange"
             }
           }
         }
       },
       "type": "Microsoft.Portal/dashboards",
       "apiVersion": "2015-08-01-preview",
       "name": "[concat('ARM-',resourceGroup().name)]",
       "location": "[resourceGroup().location]",
       "tags": {
         "hidden-title": "[concat('OPS-',resourceGroup().name)]"
       }
     }
    
  2. Vuelva a implementar el proyecto.

  3. Una vez finalizada la implementación, puede ver el panel en el portal. Seleccione Panel y elija el que haya implementado.

    Captura de pantalla de la página Panel de Azure Portal en la que se resalta un ejemplo de panel personalizado.

  4. Verá el panel personalizado.

    Captura de pantalla del panel operativo personalizado en Azure Portal.

Puede administrar el acceso al panel mediante el control de acceso basado en rol de Azure (Azure RBAC). También puede personalizar la apariencia del panel después de implementarlo. Sin embargo, si vuelve a implementar el grupo de recursos, el panel se restablece a su estado predeterminado en la plantilla. Para más información sobre cómo crear paneles, consulte Creación mediante programación de paneles de Azure.

Limpieza de recursos

Cuando los recursos de Azure ya no sean necesarios, limpie los recursos que implementó eliminando el grupo de recursos.

  1. En Azure Portal, seleccione Grupos de recursos en el menú de la izquierda.

  2. Seleccione el nombre del grupo de recursos.

  3. Seleccione Eliminar grupo de recursos del menú superior.

Pasos siguientes

En este artículo, aprendió a crear e implementar plantillas con Visual Studio. Para más información sobre el desarrollo de plantillas, consulte nuestra nueva serie de tutoriales para principiantes: