Creare l'infrastruttura come codice

Completato

L'interfaccia della riga di comando per sviluppatori di Azure (azd) può effettuare il provisioning delle risorse in Azure usando i file di infrastruttura come codice (IaC) scritti in Bicep o Terraform. L'infrastruttura come codice consente di definire le risorse e le configurazioni dell'infrastruttura nei file di definizione dichiarativa che generano in modo affidabile gli stessi ambienti ogni volta che vengono distribuiti. azd esegue questi file per creare le risorse di Azure necessarie per ospitare l'app. Per altre informazioni sull'infrastruttura come codice, vedere la documentazione Che cos'è l'infrastruttura come codice?.

In questa unità si aggiungerà il codice Bicep al modello per effettuare il provisioning delle risorse necessarie per l'app. La conoscenza precedente di Bicep non è necessaria per completare questo modulo. Tuttavia, se si prevede di lavorare con modelli azd in modo esteso, è consigliabile acquisire familiarità con almeno le nozioni di base di Bicep o Terraform. Altre informazioni su Bicep sono disponibili nel percorso di training Concetti fondamentali di Bicep.

I file Bicep o Terraform per il modello si trovano nella cartella infra. Il modello di avvio Bicep selezionato ha generato tre file come punto di partenza:

  • main.bicep - Funge da punto di ingresso principale per l'esecuzione di Bicep e viene usato per definire le risorse di cui verrà effettuato il provisioning in Azure. Il file main.bicep può anche fare riferimento ad altri moduli Bicep (file) che consentono di estrarre definizioni di risorse in file più granulari e riutilizzabili.
  • abbreviations.json - Un file JSON che fornisce molte abbreviazioni di denominazione utili. Questo file viene caricato nel file main.bicep durante l'esecuzione e fornisce un set di prefissi di denominazione logici coerenti per diverse risorse di Azure.
  • main.parameters.json - Un file JSON che definisce i valori predefiniti per parametri di modello importanti, ad esempio il percorso di Azure predefinito o il nome dell'ambiente.

È possibile definire ed effettuare il provisioning delle risorse di Azure necessarie per l'app aggiornando il file main.bicep e creando altri file Bicep. Main.bicep in genere orchestra l'esecuzione di altri moduli Bicep passando parametri tra di essi. Per questo esempio si creerà un modulo Bicep aggiuntivo per definire il servizio app di Azure che ospiterà l'applicazione.

  1. All'interno della cartella infra del modello creare un nuovo file denominato app.bicep.

  2. Aprire il file app.bicep e incollarvi il codice seguente: I commenti di codice descrivono lo scopo di ogni sezione del codice.

    // Define parameters that can be passed into the module
    // Parameters allow a module to be reusable
    @description('The location of where to deploy resources')
    param location string
    
    @description('The name of the App Service Plan')
    param appServicePlanName string
    
    @description('The name of the App Service')
    param appServiceName string
    
    // Define the App Service Plan to manage compute resources
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      properties: {
        reserved: true
      }
      sku: {
        name: 'F1'
      }
      kind: 'linux'
    }
    
    // Define the App Service to host the application
    resource appService 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          linuxFxVersion: 'DOTNETCORE|6.0'
        }
      }
        // Tag used to reference the service in the Azure.yaml file
        tags: { 'azd-service-name': 'web' }
    }
    

    Il frammento di codice esegue le attività seguenti:

    • Definisce un set di parametri che possono essere passati al modulo per renderlo riutilizzabile e configurabile. È possibile scegliere di parametrizzare più valori nelle definizioni delle risorse per rendere il modulo più flessibile.
    • Definisce un piano di servizio app per gestire le risorse di calcolo per le istanze del servizio app.
    • Definisce il servizio app per ospitare l'applicazione distribuita.

    Nota

    Un tag azd-service-name è incluso nella definizione Bicep del servizio app che verrà usata in un secondo momento dal file Azure.yaml di configurazione per associare la cartella del codice sorgente dell'app al servizio app.

  3. Il nuovo modulo Bicep creerà un servizio app per il modello, ma è comunque necessario aggiornare main.bicep per usarlo. Individuare la cartella infra all'interno dell'editor e aprire il file main.bicep.

    Il file main.bicep generato dal modello di avvio include configurazioni utili per la configurazione. Ad esempio, il file definisce parametri essenziali, ad esempio environmentName e location. Per impostazione predefinita, questi parametri verranno popolati da main.parameters.json se sono inclusi in tale file, ma è anche possibile eseguirne l'override. Il codice di avvio carica anche nel file abbreviations.json in modo che sia disponibile per l'uso, crea alcuni tag e token utili per la denominazione dei servizi e include commenti utili con suggerimenti per iniziare.

  4. Nella parte inferiore del file main.bicep individuare il commento simile al seguente:

    // Add resources to be provisioned below.
    // A full example that leverages azd bicep modules can be seen in the todo-python-mongo template:
    // https://github.com/Azure-Samples/todo-python-mongo/tree/main/infra
    

    Questo commento segnaposto evidenzia dove includere eventuali risorse aggiuntive di cui si vuole effettuare il provisioning. Si vuole includere il modulo Bicep creato per il servizio app, quindi incollare il frammento di codice seguente direttamente dopo il commento:

    module web 'app.bicep' = {
      name: '${deployment().name}-app'
      scope: rg
      params: {
        location: location
        appServiceName: '${abbrs.webSitesAppService}${resourceToken}'
        appServicePlanName: '${abbrs.webServerFarms}${resourceToken}'
      }
    }
    

    Il frammento di codice esegue le attività seguenti:

    • Definisce un modulo Bicep che punta al file creato nel passaggio precedente.
    • Assegna un nome al set di distribuzione di Azure e lo definisce come ambito al gruppo di risorse creato in main.bicep.
    • Passa i parametri nel modulo usando i valori abbreviations.json per facilitare la denominazione.

I file di infrastruttura per il codice sorgente dell'app fanno ora parte del modello. Nell'unità successiva verranno aggiunte configurazioni che descrivono la relazione tra questi componenti per il azd processo di distribuzione.