Esercizio - Distribuire modelli di Azure Resource Manager come parte delle attività CI/CD con GitHub Actions
In questa unità si distribuirà un modello di Azure Resource Manager (ARM) da un flusso di lavoro di GitHub Actions.
Importante
Questo esercizio viene eseguito esternamente all'ambiente Microsoft Learn. Per questo esercizio è necessario avere una sottoscrizione di Azure e possono venire addebitati costi. Il motivo è che sarà necessario creare un'entità servizio, che non è supportata nella sottoscrizione dell'ambiente sandbox. Se non hai ancora una sottoscrizione di Azure, crea un account gratuito prima di iniziare.
Creare l'account e il repository GitHub
Prima di tutto, se non si ha un account GitHub, crearne uno subito nella pagina di creazione dell'account GitHub. L'account è gratuito.
Dopo aver creato l'account, accedere e creare un nuovo repository che potrà contenere i modelli come parte dell'approccio di infrastruttura come codice (IaC). Per creare il repository (comunemente noto nel settore come repo), completare questi passaggi:
Nell'angolo in alto a destra di una pagina nel sito GitHub usare il menu a discesa + e scegliere New repository (Nuovo repository). In alternativa, selezionare il pulsante Create repository (Crea repository), se visualizzato.
Digitare un nome breve e facile da ricordare per il repository. Ad esempio, usare Deploy-ARM-Template. È possibile aggiungere una descrizione del repository. Ad esempio, usare Distribuzione del primo modello di Azure Resource Manager con GitHub Actions.
Scegliere un'impostazione relativa alla visibilità del repository. I repository pubblici sono accessibili a tutti in Internet. I repository privati sono accessibili solo all'utente che li crea e a quelli con cui viene condiviso l'accesso in modo esplicito. Per questo esercizio vanno bene entrambe le opzioni.
In Inizializzare questo repository con:, selezionare Aggiungi un file README.
Selezionare Create repository.
Il repository è stato creato e quindi inizializzato con un file README. È quindi necessario eseguire il commit di un modello e di un file di parametri del modello nel repository.
Nota
I file README sono ideali per descrivere il progetto in modo più dettagliato o per aggiungere documentazione, ad esempio le istruzioni per l'installazione o l'uso del progetto. Il contenuto del file README viene visualizzato automaticamente nella pagina iniziale del repository.
Eseguire il commit di un file modello di Azure Resource Manager nel repository
In GitHub passare alla pagina principale del repository.
Sopra l'elenco di file selezionare Create new file (Crea nuovo file) nell'elenco a discesa Add file (Aggiungi file).
Nel campo relativo al nome del file digitare il nome e l'estensione per il modello. In questo esercizio usare il nome azuredeploy.json. Copiare e incollare il modello seguente nel file 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" } } ] } } ] }
Aggiungere una descrizione nella sezione Commit new file (Esegui il commit del nuovo file) e selezionare Commit new file (Esegui il commit del nuovo file) per salvare il file nel repository.
Configurare l'autenticazione tra GitHub Actions e la sottoscrizione di Azure
Per distribuire qualsiasi risorsa in Azure usando GitHub Actions, è necessario creare un'entità servizio di Azure e concedere le autorizzazioni per creare le risorse definite nei modelli. Questo passaggio verrà eseguito nella sezione Azure Cloud Shell del portale di Azure dopo aver effettuato l'accesso alla sottoscrizione.
Creare l'entità servizio
Per l'entità servizio di un flusso di lavoro di GitHub Actions per la distribuzione di risorse di Azure, sono necessari i diritti di collaboratore predefiniti corretti.
Lo script dell'interfaccia della riga di comando di Azure seguente mostra come generare un'entità servizio di Azure con autorizzazioni di collaboratore in un gruppo di risorse di Azure. Questo è il gruppo di risorse in cui il flusso di lavoro distribuirà le risorse definite nel modello 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
Nel portale, dopo avere effettuato l'accesso alla sottoscrizione, selezionare l'icona Cloud Shell per aprire la shell nella parte inferiore della pagina.
Nella shell usare il codice precedente per creare l'entità servizio. Si otterranno i risultati seguenti. Copiare la parte JSON dei risultati (il contenuto nella casella rossa nello screenshot seguente), perché sarà necessaria per la configurazione del segreto in GitHub.
Copiare l'output JSON e archiviarlo come segreto GitHub all'interno del repository GitHub seguendo questa procedura in GitHub: Nel repository GitHub selezionare la scheda Impostazioni. Nel menu a sinistra selezionare l'elenco a discesa Segreti, quindi selezionare Codespaces.
Immettere i valori seguenti e quindi selezionare Add secret (Aggiungi secreto):
- Nome: immettere AZURE_CREDENTIALS.
- Segreto: incollare l'output JSON copiato prima.
Queste informazioni sono necessarie per specificare l'autenticazione nel flusso di lavoro.
Creazione di un flusso di lavoro
Il file del flusso di lavoro deve essere archiviato nella cartella .github/workflows alla radice del repository. Il file del flusso di lavoro può avere estensione .yml o .yaml.
È possibile creare un file del flusso di lavoro e quindi eseguire il push/caricamento del file nel repository. In alternativa, è possibile usare la procedura seguente per crearlo nell'interfaccia di GitHub:
Dal repository GitHub scegliere Actions (Azioni) dal menu in alto e selezionare Set up a workflow yourself (Configura un flusso di lavoro manualmente).
Rinominare il file del flusso di lavoro se si preferisce un nome diverso da main.yml. Ad esempio, usare deployARMTemplate.yml.
Sostituire il contenuto del file YML con il codice seguente.
Nota
In GitHub Marketplace sono incluse alcune azioni personalizzate che è possibile usare per distribuire modelli di Azure Resource Manager. Questo modulo usa il provider del marketplace chiamato Deploy Azure Resource Manager (ARM) Template.
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
Il file del flusso di lavoro include tre sezioni.
name
: Il nome del flusso di lavoro.on
: Il nome dell'evento GitHub che attiva il flusso di lavoro. Il flusso di lavoro viene attivato quando si verifica un evento push nel ramo principale che modifica almeno un file nel ramo principale.jobs
: l'esecuzione di un flusso di lavoro è costituita da uno o più processi. Solo un processo è denominatodeploy-virtual-network-template
. Questo processo prevede tre passaggi.- Estrarre il codice sorgente.
- Accedere ad Azure.
- Distribuire il modello di Azure Resource Manager.
Importante
Verificare che il nome del segreto nell'espressione
creds: ${{ secrets.AZURE_CREDENTIALS }}
corrisponda al nome del segreto salvato nelle impostazioni del repository. Verificare anche che il nome del modello di Azure Resource Manager nel passaggioDeploy ARM Template
template: $GITHUB_WORKSPACE/azuredeploy.json
corrisponda a quello salvato prima nel repository.Nota
Il nome del gruppo di risorse sarà
GitHubActionExercise-rg
se è stato usato il codice dell'interfaccia della riga di comando di Azure precedente durante la configurazione delle credenziali di distribuzione. Il nome del gruppo di risorse generato è il nome del progetto, cui viene aggiuntorg
.Selezionare Start commit (Avvia commit). Aggiungere un commento e una descrizione, se necessario.
Verificare che sia selezionata l'opzione Commit directly to the master branch (Esegui il commit direttamente nel ramo principale) e quindi selezionare Commit new file (Esegui il commit del nuovo file) o Commit changes (Esegui il commit delle modifiche).
Dopo aver creato il file del flusso di lavoro e averne eseguito il commit nel ramo principale del repository, il flusso di lavoro viene avviato automaticamente perché il trigger nel flusso di lavoro è un commit/push nel ramo principale.
on: push: branches: - main
Passare al repository e controllare lo stato del flusso di lavoro.
Controllare la distribuzione
Quando il flusso di lavoro viene completato, passare al portale di Azure per controllare lo stato di distribuzione.
Nel riquadro a sinistra selezionare Gruppi di risorse>GitHubActionExercise-rg. Nel riquadro Distribuzioni verificare che la distribuzione sia riuscita.