Avvio rapido: creare una Frontdoor con Bicep

Questa guida introduttiva illustra come usare Bicep per creare un Azure Front Door con un'app Web come origine.

Nota

Per i carichi di lavoro Web, è consigliabile usare Protezione DDoS di Azure e un web application firewall per proteggersi dagli attacchi DDoS emergenti. Un'altra opzione consiste nell'usare Frontdoor di Azure insieme a un web application firewall. Frontdoor di Azure offre protezione a livello di piattaforma dagli attacchi DDoS a livello di rete. Per altre informazioni, vedere Baseline di sicurezza per i servizi di Azure.

Bicep è un linguaggio specifico di dominio (DSL) che usa la sintassi dichiarativa per distribuire le risorse di Azure. Offre una sintassi concisa, una sicurezza dei tipi affidabile e supporto per il riutilizzo del codice. Bicep offre la migliore esperienza di creazione per le soluzioni di infrastruttura come codice in Azure.

Prerequisiti

  • Una sottoscrizione di Azure attiva. Crea un account gratuito se non ne hai uno.
  • Indirizzo IP o FQDN di un sito Web o di un'applicazione Web.

Esaminare il file Bicep

Il file Bicep usato in questa guida introduttiva è disponibile nei Modelli di avvio rapido di Azure.

In questa guida introduttiva si creerà un profilo di Azure Front Door, un servizio app di Azure e si configurerà il servizio app per verificare che il traffico provenga dall'origine di Azure Front Door.

@description('The location into which regionally scoped resources should be deployed. Note that Front Door is a global resource.')
param location string = resourceGroup().location

@description('The name of the App Service application to create. This must be globally unique.')
param appName string = 'myapp-${uniqueString(resourceGroup().id)}'

@description('The name of the SKU to use when creating the App Service plan.')
param appServicePlanSkuName string = 'S1'

@description('The number of worker instances of your App Service plan that should be provisioned.')
param appServicePlanCapacity int = 1

@description('The name of the Front Door endpoint to create. This must be globally unique.')
param frontDoorEndpointName string = 'afd-${uniqueString(resourceGroup().id)}'

@description('The name of the SKU to use when creating the Front Door profile.')
@allowed([
  'Standard_AzureFrontDoor'
  'Premium_AzureFrontDoor'
])
param frontDoorSkuName string = 'Standard_AzureFrontDoor'

var appServicePlanName = 'AppServicePlan'

var frontDoorProfileName = 'MyFrontDoor'
var frontDoorOriginGroupName = 'MyOriginGroup'
var frontDoorOriginName = 'MyAppServiceOrigin'
var frontDoorRouteName = 'MyRoute'

resource frontDoorProfile 'Microsoft.Cdn/profiles@2021-06-01' = {
  name: frontDoorProfileName
  location: 'global'
  sku: {
    name: frontDoorSkuName
  }
}

resource appServicePlan 'Microsoft.Web/serverFarms@2020-06-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
    capacity: appServicePlanCapacity
  }
  kind: 'app'
}

resource app 'Microsoft.Web/sites@2020-06-01' = {
  name: appName
  location: location
  kind: 'app'
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
    siteConfig: {
      detailedErrorLoggingEnabled: true
      httpLoggingEnabled: true
      requestTracingEnabled: true
      ftpsState: 'Disabled'
      minTlsVersion: '1.2'
      ipSecurityRestrictions: [
        {
          tag: 'ServiceTag'
          ipAddress: 'AzureFrontDoor.Backend'
          action: 'Allow'
          priority: 100
          headers: {
            'x-azure-fdid': [
              frontDoorProfile.properties.frontDoorId
            ]
          }
          name: 'Allow traffic from Front Door'
        }
      ]
    }
  }
}

resource frontDoorEndpoint 'Microsoft.Cdn/profiles/afdEndpoints@2021-06-01' = {
  name: frontDoorEndpointName
  parent: frontDoorProfile
  location: 'global'
  properties: {
    enabledState: 'Enabled'
  }
}

resource frontDoorOriginGroup 'Microsoft.Cdn/profiles/originGroups@2021-06-01' = {
  name: frontDoorOriginGroupName
  parent: frontDoorProfile
  properties: {
    loadBalancingSettings: {
      sampleSize: 4
      successfulSamplesRequired: 3
    }
    healthProbeSettings: {
      probePath: '/'
      probeRequestType: 'HEAD'
      probeProtocol: 'Http'
      probeIntervalInSeconds: 100
    }
  }
}

resource frontDoorOrigin 'Microsoft.Cdn/profiles/originGroups/origins@2021-06-01' = {
  name: frontDoorOriginName
  parent: frontDoorOriginGroup
  properties: {
    hostName: app.properties.defaultHostName
    httpPort: 80
    httpsPort: 443
    originHostHeader: app.properties.defaultHostName
    priority: 1
    weight: 1000
  }
}

resource frontDoorRoute 'Microsoft.Cdn/profiles/afdEndpoints/routes@2021-06-01' = {
  name: frontDoorRouteName
  parent: frontDoorEndpoint
  dependsOn: [
    frontDoorOrigin // This explicit dependency is required to ensure that the origin group is not empty when the route is created.
  ]
  properties: {
    originGroup: {
      id: frontDoorOriginGroup.id
    }
    supportedProtocols: [
      'Http'
      'Https'
    ]
    patternsToMatch: [
      '/*'
    ]
    forwardingProtocol: 'HttpsOnly'
    linkToDefaultDomain: 'Enabled'
    httpsRedirect: 'Enabled'
  }
}

output appServiceHostName string = app.properties.defaultHostName
output frontDoorEndpointHostName string = frontDoorEndpoint.properties.hostName

Il file Bicep definisce più risorse di Azure:

Distribuire il file Bicep

  1. Salvare il file Bicep come main.bicep nel computer locale.

  2. Distribuisci il file Bicep usando l'interfaccia della riga di comando di Azure o Azure PowerShell.

    az group create --name exampleRG --location eastus
    az deployment group create --resource-group exampleRG --template-file main.bicep
    

    Al termine della distribuzione, verrà visualizzato un output simile al seguente:

    Screenshot dell'output di distribuzione di Frontdoor con Bicep e PowerShell.

Convalidare la distribuzione

Usare l'interfaccia della riga di comando di Azure o Azure PowerShell per elencare le risorse distribuite nel gruppo di risorse.

az resource list --resource-group exampleRG

È anche possibile convalidare la distribuzione usando il portale di Azure.

  1. Accedere al portale di Azure.

  2. Selezionare Gruppi di risorse nel riquadro sinistro.

  3. Selezionare il gruppo di risorse creato nella sezione precedente.

  4. Selezionare il Frontdoor creato. Verrà visualizzato il nome host dell'endpoint. Copiare il nome host e incollarlo nella barra degli indirizzi di un browser. Premere INVIO e le richieste verranno indirizzate all'app Web.

    Screenshot del messaggio: l'app Web è in esecuzione e in attesa del contenuto.

Pulire le risorse

Quando non è più necessario, usare il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell per eliminare il servizio Frontdoor e il gruppo di risorse. Frontdoor e tutte le risorse correlate vengono rimosse.

az group delete --name exampleRG

Passaggi successivi

In questo avvio rapido sono stati creati questi componenti:

  • Porta d'ingresso
  • Piano di servizio app
  • App Web

Per informazioni su come aggiungere un dominio personalizzato a Front Door, proseguire con le esercitazioni su Front Door.