Ejercicio: Implementación de las plantillas de Resource Manager como parte de los esfuerzos de CI/CD con Acciones de GitHub

Completado

Aquí, va a implementar una plantilla de Azure Resource Manager (ARM) desde un flujo de trabajo de Acciones de GitHub.

Importante

Este ejercicio se realiza fuera del entorno de Microsoft Learn. Para este ejercicio se necesita una suscripción de Azure propia y puede que se apliquen cargos. Esto es necesario, ya que tendrá que crear una entidad de servicio que no se admite en la suscripción de espacio aislado. Si aún no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.

Creación de la cuenta y el repositorio de GitHub

En primer lugar, si no tiene una cuenta de GitHub, cree una ahora en la página de creación de cuentas de GitHub. (Es gratuito).

Captura de pantalla en la que se muestra la página de creación de cuentas de GitHub.

Una vez que haya creado la cuenta, inicie sesión y cree un repositorio en el que puede mantener las plantillas como parte del modelo de infraestructura como código (IaC). Para crear el repositorio (comúnmente conocido como repo en el sector), siga estos pasos:

  1. En la esquina superior derecha de cualquier página del sitio de GitHub, use el menú desplegable + y seleccione New repository (Nuevo repositorio). También puede seleccionar el botón verde Create repository (Crear repositorio), si está.

    Captura de pantalla en la que se muestran las selecciones para crear un repositorio de GitHub.

  2. Escriba un nombre corto y fácil de recordar para el repositorio. Por ejemplo, use Deploy-ARM-Template. Opcionalmente, puede agregar una descripción del repositorio. Por ejemplo, use Implementación de mi primera plantilla de Resource Manager con Acciones de GitHub.

  3. Elija una configuración de la visibilidad del repositorio. Los repositorios públicos son accesibles para todos los usuarios de Internet. Los repositorios privados solo son accesibles para usted y las personas con las que comparta el acceso de forma explícita. (Ambas opciones son válidas en este ejercicio).

  4. En Inicializar este repositorio con:, seleccione Agregar un archivo LÉAME.

  5. Seleccione Create repository (Crear repositorio).

    Captura de pantalla en la que se muestran los detalles de la creación de un repositorio.

Ha creado el repositorio y lo ha inicializado con un archivo LÉAME. Es el momento de confirmar una plantilla y un archivo de parámetros de plantilla en el repositorio.

Nota:

Los archivos Léame son un buen lugar para describir el proyecto con más detalle o bien agregar alguna documentación, como la instalación o el uso del proyecto. El contenido del archivo Léame aparece automáticamente en la página principal del repositorio.

Confirmación de un archivo de plantilla de Resource Manager en el repositorio

  1. En GitHub, vaya a la página principal del repositorio.

  2. Encima de la lista de archivos, en la lista desplegable Add file (Agregar archivo), seleccione Create new file (Crear archivo).

    Captura de pantalla en la que se muestran las selecciones para agregar una plantilla al repositorio.

  3. En el campo Nombre de archivo, escriba el nombre y la extensión de la plantilla. En nuestro ejercicio, use el nombre azuredeploy.json. Copie y pegue la plantilla siguiente en el archivo nuevo de GitHub.

    {
        "$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"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  4. Agregue una descripción en la sección Commit new file (Confirmar nuevo archivo) y seleccione Commit new file (Confirmar nuevo archivo) para guardarlo en el repositorio.

    Captura de pantalla en la que se muestra cómo guardar una plantilla nueva en el repositorio.

Configuración de la autenticación entre Acciones de GitHub y la suscripción de Azure

Para implementar recursos en Azure mediante Acciones de GitHub, debe crear una entidad de servicio de Azure y concederle permisos a fin de crear recursos definidos en las plantillas. Este paso se lleva a cabo en la sección de Azure Cloud Shell de Azure Portal una vez que haya iniciado sesión en su suscripción.

Creación de la entidad de servicio

En el caso de la entidad de seguridad de un flujo de trabajo de Acciones de GitHub para implementar recursos de Azure, necesita el colaborador integrado adecuado.

En el script siguiente de la CLI de Azure se muestra cómo se puede generar una entidad de servicio de Azure con permisos de colaborador en un grupo de recursos de Azure. Este grupo de recursos es donde el flujo de trabajo implementa los recursos definidos en la plantilla de ARM.

projectName="GitHubActionExercise"
location="eastus"
resourceGroupName="${projectName}-rg"
appName="http://${projectName}"

# Create the resource group
az group create --name $resourceGroupName --location $location

# Store the resource group ID in a variable
scope=$(az group list --query "[?contains(name, '$resourceGroupName')].id" -o tsv)

# Create the service principal with contributor rights to the resource group we just created
az ad sp create-for-rbac --name $appName --role Contributor --scopes $scope --sdk-auth

En el portal, cuando haya iniciado sesión en su suscripción, seleccione el icono de Cloud Shell para abrir el shell situado en la parte inferior de la página.

Animación en la que se muestra la apertura de Cloud Shell.

En el shell, use el código anterior para crear la entidad de servicio. Obtiene los siguientes resultados. Copie la parte JSON de los resultados (el contenido del cuadro rojo de la captura de pantalla siguiente), ya que lo necesitará al configurar el secreto en GitHub.

Captura de pantalla en la que se muestran los resultados de la creación de una entidad de servicio en Azure.

Copie la salida JSON y almacénela como un secreto de GitHub en el repositorio de GitHub siguiendo estos pasos en GitHub: Desde el repositorio de GitHub, seleccione la pestaña Configuración. En el menú de la izquierda, seleccione la lista desplegable Secretos y, a continuación, seleccione Codespaces.

Escriba los valores siguientes y, después, seleccione Add secret (Agregar secreto):

  • Nombre: escriba AZURE_CREDENTIALS.
  • Secreto: pegue la salida JSON que se ha copiado anteriormente.

Captura de pantalla en la que se muestra la incorporación de información nueva secreta de entidad de servicio a un secreto de GitHub

Necesita esta información para especificar la autenticación en el flujo de trabajo.

Creación de un flujo de trabajo

El archivo de flujo de trabajo se debe almacenar en la carpeta .github/workflows en la raíz del repositorio. La extensión de archivo de flujo de trabajo puede ser .yml o .yaml.

Se puede crear un archivo de flujo de trabajo y, después, insertarlo o cargarlo en el repositorio. También puede utilizar el procedimiento siguiente para crearlo en la interfaz de GitHub:

  1. En el repositorio de GitHub, seleccione Actions (Acciones) en el menú superior y Set up a workflow yourself (Configurar un flujo de trabajo por su cuenta).

    Captura de pantalla en la que se muestran las selecciones para configurar un flujo de trabajo.

  2. Cambie el nombre del archivo de flujo de trabajo si prefiere un nombre diferente en lugar de main.yml. Por ejemplo, use deployARMTemplate.yml.

  3. Reemplace el contenido del archivo .yml por el código siguiente.

    Nota:

    El Marketplace de GitHub tiene algunas acciones integradas personalizadas que se pueden usar para implementar plantillas de Resource Manager. En este módulo, se usa el proveedor de marketplace llamado Implementación de plantilla de Azure Resource Manager (ARM).

    name: Deploy ARM Template
    
    on:
      push:
        branches:
          - main
    env:
      AZURE_SUBSCRIPTION_ID: << Subscription Id >>   # set this to your Azure Subscription Id
      AZURE_RESOURCE_GROUP: GitHubActionExercise-rg   # set this to your target resource group
    
    jobs:
      deploy-virtual-network-template:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source code
            uses: actions/checkout@main
    
          - name: Login to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Deploy ARM Template
            uses: azure/arm-deploy@v1
            with:
              scope: resourcegroup
              subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }}
              resourceGroupName: ${{ env.AZURE_RESOURCE_GROUP }}
              template: ./azuredeploy.json
    

    El archivo de flujo de trabajo tiene tres secciones.

    • name: Nombre del flujo de trabajo.

    • on: Nombre del evento de GitHub que desencadena el flujo de trabajo. El flujo de trabajo se desencadena cuando hay un evento de inserción en la rama principal y modifica al menos un archivo en la rama maestra.

    • jobs: una ejecución de flujo de trabajo consta de uno o varios trabajos. Solo a un trabajo se le llama deploy-virtual-network-template. Este trabajo consta de tres pasos.

      1. Desproteger el código fuente.
      2. Inicie sesión en Azure.
      3. Implementar la plantilla de Resource Manager.

    Importante

    Compruebe que el nombre del secreto de la expresión creds: ${{ secrets.AZURE_CREDENTIALS }} coincide con el nombre del secreto que se ha guardado en la configuración del repositorio. Compruebe también que el nombre de la plantilla de Resource Manager en el paso de Deploy ARM Templatetemplate: $GITHUB_WORKSPACE/azuredeploy.json coincide con el que se ha guardado anteriormente en el repositorio.

    Nota:

    El nombre del grupo de recursos debe ser GitHubActionExercise-rg si se ha usado el código anterior de la CLI de Azure al configurar las credenciales de implementación. El nombre del grupo de recursos generado es el nombre del proyecto con el sufijo rg anexado.

  4. Seleccione Start commit (Iniciar confirmación). En caso necesario, agregue un comentario y una descripción.

  5. Asegúrese de que está seleccionada la opción Commit directly to the main branch (Confirmar directamente en la rama principal) y luego seleccione Commit new file (Confirmar nuevo archivo) (o Commit changes [Confirmar cambios]).

    Captura de pantalla en la que se muestra la confirmación de un flujo de trabajo en la rama principal.

    Una vez que el archivo de flujo de trabajo se crea y se confirma en la rama principal del repositorio, este se iniciará automáticamente ya que el desencadenador del flujo de trabajo es una confirmación o inserción en la rama principal.

    on:
      push:
        branches:
          - main
    
  6. Vaya al repositorio y compruebe el estado del flujo de trabajo.

    Captura de pantalla en la que se muestra el estado del flujo de trabajo.

Comprobación de la implementación

Cuando se complete el flujo de trabajo, vaya a Azure Portal para comprobar el estado de la implementación.

En el panel de la izquierda, seleccione Grupos de recursos>GitHubActionExercise-rg. En el panel Implementaciones, compruebe que la implementación se ha realizado correctamente.

Captura de pantalla en la que se muestra el estado de la implementación.