Краткое руководство: Создание Front Door с помощью Bicep

В этом кратком руководстве описано, как использовать Bicep для создания Azure Front Door с веб-приложением в качестве источника.

Примечание.

Для веб-рабочих нагрузок настоятельно рекомендуется использовать Защиту от атак DDoS Azure и брандмауэр веб-приложения для защиты от новых атак DDoS. Другой вариант — использовать Azure Front Door вместе с брандмауэром веб-приложения. Azure Front Door обеспечивает защиту на уровне платформы от атак DDoS на уровне сети. Дополнительные сведения см. в разделе "Базовые показатели безопасности для служб Azure".

Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он обеспечивает краткий синтаксис, надежную безопасность типов и поддержку повторного использования кода. Bicep предлагает лучшие возможности для разработки решений Azure типа "инфраструктура как код".

Требования

  • Активная подписка Azure. Создайте бесплатную учетную запись, если у вас ее нет.
  • IP-адрес или полное доменное имя веб-сайта или веб-приложения.

Проверка BICEP-файла

Файл Bicep, используемый в этом кратком руководстве, доступен из шаблонов быстрого запуска Azure.

В этом кратком руководстве вы создадите профиль Azure Front Door, службу приложение Azure и настройте службу приложений для проверки того, что трафик поступает через источник 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

В файле Bicep определяется множество ресурсов Azure:

  • Microsoft.Cdn/profiles — профили Azure Front Door Standard/Premium
  • Microsoft.Web/serverfarms — план службы приложений для размещения веб-приложений
  • Microsoft.Web/sites — обслуживание запросов к исходному серверу веб-приложения для Front Door

Разверните файл Bicep

  1. Сохраните файл Bicep в качестве main.bicep на локальном компьютере.

  2. Разверните файл Bicep с помощью Azure CLI или Azure PowerShell.

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

    После завершения развертывания вы увидите выходные данные, аналогичные следующим:

    Снимок экрана выходных данных развертывания Front Door Bicep PowerShell.

Проверка развертывания

Используйте Azure CLI или Azure PowerShell для перечисления ресурсов, развернутых в группе ресурсов.

az resource list --resource-group exampleRG

Вы также можете проверить развертывание с помощью портал Azure.

  1. Войдите на портал Azure.

  2. В области слева выберите Группы ресурсов.

  3. Выберите группу ресурсов, созданную в предыдущем разделе.

  4. Выберите созданную вами Front Door. Вы увидите имя узла конечной точки. Скопируйте имя узла и вставьте его в адресную строку браузера. Нажмите клавишу ВВОД, и ваши запросы будут перенаправлены в веб-приложение.

    Снимок экрана с сообщением

Очистка ресурсов

Чтобы удалить сервис Front Door и группу ресурсов, когда они больше не нужны, используйте портал Azure, Azure CLI или Azure PowerShell. Front Door и все связанные ресурсы удаляются.

az group delete --name exampleRG

Следующие шаги

В этом кратком руководстве вы узнали, как создать:

  • Входная дверь
  • План службы приложений
  • Веб-приложение

Чтобы узнать, как добавить пользовательский домен в Front Door, перейдите к учебникам Front Door.