Exercício – Implementar os seus modelos do Resource Manager como parte dos seus esforços de CI/CD com o GitHub Actions

Concluído

Aqui você implanta um modelo do Azure Resource Manager (ARM) a partir de um fluxo de trabalho de Ações do GitHub.

Importante

Irá realizar este exercício fora do ambiente do Microsoft Learn. Este exercício requer que tenha a sua própria subscrição do Azure e poderá incorrer em custos. Isto é necessário, uma vez que irá precisar de criar um principal de serviço que não é suportado na subscrição do sandbox. Se ainda não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Criar a sua conta e repositório do GitHub

Primeiro, se você não tiver uma conta do GitHub, crie uma agora na página de criação de conta do GitHub. (É gratuito).

Captura de ecrã que mostra a página de criação da conta do GitHub.

Depois de ter uma conta, entre e crie um novo repositório onde você pode manter seus modelos como parte do modelo de infraestrutura como código (IaC). Para criar o repositório (comumente conhecido como um repositório no setor), siga estas etapas:

  1. No canto superior direito de qualquer página no site do GitHub, utilize o menu pendente + e selecione New repository (Novo repositório). Em alternativa, selecione o botão verde Create repository (Criar repositório), se estiver disponível.

    Captura de ecrã que mostra seleções para criar um repositório do GitHub.

  2. Introduza um nome breve e fácil de memorizar para o seu repositório. Por exemplo, utilize Deploy-ARM-Template. Opcionalmente, adicione uma descrição ao seu repositório. Por exemplo, utilize Deploying my first ARM template with GitHub Actions (Implementar o meu primeiro modelo do Resource Manager com o GitHub Actions).

  3. Selecione uma definição de visibilidade do repositório. Os repositórios públicos são acessíveis por todas as pessoas na Internet. Os repositórios são acessíveis apenas para si e para as pessoas com quem partilha explicitamente o acesso. (Qualquer um deles funciona com este exercício.)

  4. Em Inicializar este repositório com:, selecione Adicionar um arquivo LEIA-ME.

  5. Selecione Create repository (Criar repositório).

    Captura de ecrã que mostra os detalhes da criação de um repositório novo.

Você criou seu repositório e o inicializou com um arquivo LEIA-ME. Está na altura de consolidar um modelo e um ficheiro de parâmetros do modelo no repositório.

Nota

Os ficheiros Leia-me são um ótimo local para descrever o seu projeto mais pormenorizadamente ou adicionar alguma documentação, como a forma de instalar ou utilizar o seu projeto. Os conteúdos do seu ficheiro Leia-me são apresentados automaticamente na página inicial do seu repositório.

Consolidar um ficheiro do modelo do Resource Manager no repositório

  1. No GitHub, aceda à página principal do repositório.

  2. Acima da lista de ficheiros, na lista de menu pendente Add file (Adicionar ficheiro), selecione Create new file (Criar novo ficheiro).

    Captura de ecrã que mostra seleções para adicionar um modelo ao repositório.

  3. No campo Nome de ficheiro, introduza o nome e a extensão do modelo. No nosso exercício, utilize o nome azuredeploy.json. Copie e cole o modelo a seguir em seu novo arquivo 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. Adicione uma descrição na secção Commit new file (Consolidar novo ficheiro)e selecione Commit new file (Consolidar novo ficheiro) para o guardar no seu repositório.

    Captura de ecrã que mostra um modelo novo a ser guardado no repositório.

Configurar a autenticação entre o GitHub Actions e a sua subscrição do Azure

Para implementar os recursos no Azure através do GitHub Actions, tem de criar um principal do serviço do Azure e dar-lhe permissões para criar recursos definidos nos seus modelos. Você executa essa etapa na seção Azure Cloud Shell do portal do Azure depois de entrar na sua assinatura.

Criar o principal de serviço

Para que o principal de um fluxo de trabalho do GitHub Actions implemente recursos do Azure, este precisa do contribuidor incorporado adequado.

O seguinte script da CLI do Azure mostra como pode gerar um principal de serviço do Azure com permissões de contribuidor num grupo de recursos do Azure. Este grupo de recursos é onde o fluxo de trabalho implanta os recursos definidos em seu modelo 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

No portal, enquanto tiver sessão iniciada na sua subscrição, selecione o ícone Cloud Shell para abrir o shell na parte inferior da página.

Animação em que se pode ver o Cloud Shell a ser aberto.

No shell, utilize o código acima para criar o principal de serviço. Você obtém os seguintes resultados. Copie a parte JSON dos resultados (o conteúdo na caixa vermelha na captura de tela a seguir) porque você precisa dele ao configurar o segredo no GitHub.

Captura de ecrã que mostra resultados relativos à criação do principal de serviço no Azure.

Copie a saída JSON e armazene-a como um segredo do GitHub no repositório do GitHub executando as seguintes etapas no GitHub: No repositório do GitHub, selecione a guia Configurações . No menu à esquerda, selecione a lista suspensa Segredos e, em seguida, selecione Codespaces.

Introduza os seguintes valores e, em seguida, selecione Add secret (Adicionar segredo):

  • Nome: Digite AZURE_CREDENTIALS.
  • Segredo: Cole a saída JSON copiada anteriormente.

Captura de tela que mostra a adição de novas informações secretas da entidade de serviço a um segredo do GitHub.

Você precisa dessas informações para especificar a autenticação no fluxo de trabalho.

Criar um fluxo de trabalho

O ficheiro de fluxo de trabalho tem de ser armazenado na pasta .github/workflows na raiz do seu repositório. A extensão de ficheiro o fluxo de trabalho pode ser .yml ou.yaml.

Pode criar um ficheiro de fluxo de trabalho e, em seguida, emitir/carregar o ficheiro para o repositório. Em alternativa, pode utilizar o seguinte procedimento para o criar na interface do GitHub:

  1. No seu repositório do GitHub, selecione Actions (Ações) no menu superior e selecione set up a workflow yourself (configurar um fluxo de trabalho manualmente).

    Captura de ecrã que mostra seleções para configurar um fluxo de trabalho.

  2. Mude o nome do ficheiro do fluxo de trabalho se preferir um nome diferente de main.yml. Por exemplo, utilize deployARMTemplate.yml.

  3. Substitua os conteúdos do ficheiro .yml pelo seguinte conteúdo.

    Nota

    O GitHub Marketplace tem algumas ações personalizadas internas das quais pode utilizar para implementar modelos do Resource Manager. Este módulo usa o provedor de marketplace chamado Implantar Modelo do 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
    

    O arquivo de fluxo de trabalho tem três seções.

    • name: O nome do fluxo de trabalho.

    • on: O nome do evento GitHub que aciona o fluxo de trabalho. O fluxo de trabalho é acionado quando um evento push está na ramificação principal e modifica pelo menos um arquivo na ramificação principal.

    • jobs: Uma execução de fluxo de trabalho consiste em um ou mais trabalhos. Há apenas um trabalho denominado deploy-virtual-network-template. Este trabalho tem três etapas.

      1. Verifique o código fonte.
      2. Inicie sessão no Azure.
      3. Implemente o modelo do Resource Manager.

    Importante

    Confirme que o nome secreto na expressão creds: ${{ secrets.AZURE_CREDENTIALS }} corresponde ao nome do segredo que guardou nas definições do seu repositório. Além disso, confirme que o nome do modelo do Resource Manager no passo Deploy ARM Templatetemplate: $GITHUB_WORKSPACE/azuredeploy.json corresponde ao que guardou no repositório anteriormente.

    Nota

    O nome do grupo de recursos deverá ser GitHubActionExercise-rg, se utilizou o código da CLI do Azure anterior quando configurou as credenciais da implementação. O nome do grupo de recursos gerado é o nome do projeto em que rg foi acrescentado.

  4. Selecione Start commit (Iniciar consolidação). Se for necessário, adicione um comentário e uma descrição

  5. Verifique se a opção Confirmar diretamente na ramificação principal está selecionada e, em seguida, selecione Confirmar novo arquivo (ou Confirmar alterações).

    Captura de tela que mostra a confirmação de um fluxo de trabalho na ramificação principal.

    Depois que o arquivo de fluxo de trabalho for criado e confirmado na ramificação principal do repositório, o fluxo de trabalho será iniciado automaticamente porque o gatilho em seu fluxo de trabalho é uma confirmação/envio para a ramificação principal.

    on:
      push:
        branches:
          - main
    
  6. Aceda ao seu repositório e confirme o estado do fluxo de trabalho.

    Captura de ecrã a mostrar o estado do fluxo de trabalho.

Verificar a implementação

Quando o fluxo de trabalho estiver concluído, aceda ao portal do Azure para verificar o estado das implementações.

No painel esquerdo, selecione Grupos de recursos>GitHubActionExercise-rg. No painel Deployments (Implementações), confirme se a sua implementação foi bem-sucedida.

Captura de ecrã a mostrar o estado da implementação.