Поделиться через


Преобразование инфраструктуры в шаблон IaC

Служба Подключение or помогает пользователям подключать свои вычислительные службы к целевым службам резервного копирования всего за несколько щелчков или команд. При переходе с начальной стадии на рабочую стадию пользователи также должны перейти от использования ручных конфигураций к использованию шаблонов инфраструктуры как кода (IaC) в конвейерах CI/CD. В этом руководстве показано, как перевести подключенные службы Azure в шаблоны IaC.

Необходимые компоненты

  • В этом руководстве предполагается, что вы знаете об ограничениях Подключение service Подключение or IaC.

Обзор решения

Преобразование инфраструктуры в шаблоны IaC обычно включает две основные части: логику подготовки исходных и целевых служб, а также логику для создания подключений. Чтобы реализовать логику для подготовки исходных и целевых служб, существует два варианта:

  • Создание шаблона с нуля
  • Экспорт шаблона из Azure и его польирование

Чтобы реализовать логику для создания подключений, существует три варианта:

  • Использование конфигурации Подключение service Подключение и хранения в Конфигурация приложений
  • Использование Подключение службы в шаблоне
  • Использование логики шаблона для настройки исходных и целевых служб напрямую

Сочетания этих различных вариантов могут создавать различные решения. Из-за ограничений IaC в службе Подключение or рекомендуется реализовать следующие решения в указанном ниже порядке. Чтобы применить эти решения, необходимо понять инструменты IaC и грамматику разработки шаблонов.

Решение Подготовка источника и целевого объекта Подключение к сборке Применимый сценарий Плюсы Минусы
1 Разработка с нуля Использование конфигурации службы Подключение и хранения в Конфигурация приложений Имеет динамическую проверка в облачных ресурсах, прежде чем разрешать динамический трафик — Шаблон прост и доступен для чтения
— служба Подключение or приносит дополнительное значение
— Проблема с IaC не появилась службой Подключение or
— требуется дополнительная зависимость для чтения конфигурации из Конфигурация приложений
— стоимость проверка жизни облачных ресурсов
2 Разработка с нуля Использование Подключение службы Имеет динамическую проверка в облачных ресурсах, прежде чем разрешать динамический трафик — Шаблон прост и доступен для чтения
— служба Подключение or приносит дополнительное значение
— стоимость проверка жизни облачных ресурсов
3 Разработка с нуля Настройка исходных и целевых служб непосредственно в шаблоне Нет проверка активности в облачных ресурсах — Шаблон прост и доступен для чтения — функции Подключение службы недоступны
4 Экспорт и польский Использование конфигурации службы Подключение и хранения в Конфигурация приложений Имеет динамическую проверка в облачных ресурсах, прежде чем разрешать динамический трафик — Ресурсы точно такие же, как и в облаке
— служба Подключение or приносит дополнительное значение
— Проблема с IaC не появилась службой Подключение or
— требуется дополнительная зависимость для чтения конфигурации из Конфигурация приложений
— стоимость проверка жизни облачных ресурсов
— поддерживает только шаблоны ARM
— усилия, необходимые для понимания и полировки шаблона
5 Экспорт и польский Использование Подключение службы Имеет динамическую проверка в облачных ресурсах, прежде чем разрешать динамический трафик — Ресурсы точно такие же, как и в облаке
— служба Подключение or приносит дополнительное значение
— стоимость проверка жизни облачных ресурсов
— поддерживает только шаблоны ARM
— усилия, необходимые для понимания и полировки шаблона
6 Экспорт и польский Настройка исходных и целевых служб непосредственно в шаблоне Нет проверка активности в облачных ресурсах — Ресурсы точно такие же, как в облаке — Поддержка только шаблона ARM
— усилия по пониманию и полю шаблона
— функции Подключение службы недоступны

Создание шаблонов

В следующих разделах показано, как создать веб-приложение и учетную запись хранения и подключить их к идентификатору, назначаемого системой, с помощью Bicep. В нем показано, как это сделать как с помощью службы Подключение or, так и с помощью логики шаблона.

Подготовка исходных и целевых служб

Разработка с нуля

Создание шаблона с нуля является предпочтительным и рекомендуемым способом подготовки исходных и целевых служб, так как легко приступить к работе и сделать шаблон простым и удобочитаемым. Ниже приведен пример использования минимального набора параметров для создания веб-приложения и учетной записи хранения.

// This template creates a webapp and a storage account.
// In order to make it more readable, we use only the mininal set of parameters to create the resources.

param location string = resourceGroup().location
// App Service plan parameters
param planName string = 'plan_${uniqueString(resourceGroup().id)}'
param kind string = 'linux'
param reserved bool = true
param sku string = 'B1'
// Webapp parameters
param webAppName string = 'webapp-${uniqueString(resourceGroup().id)}'
param linuxFxVersion string = 'PYTHON|3.8'
param identityType string = 'SystemAssigned'
param appSettings array = []
// Storage account parameters
param storageAccountName string = 'account${uniqueString(resourceGroup().id)}'


// Create an app service plan 
resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
  name: planName
  location: location
  kind: kind
  sku: {
    name: sku
  }
  properties: {
    reserved: reserved
  }
}


// Create a web app
resource appService 'Microsoft.Web/sites@2022-09-01' = {
  name: webAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    siteConfig: {
      linuxFxVersion: linuxFxVersion
      appSettings: appSettings
    }
  }
  identity: {
    type: identityType
  }
}


// Create a storage account
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Экспорт и польский

Если ресурсы, которые вы подготавливаете, точно совпадают с теми, которые у вас есть в облаке, экспорт шаблона из Azure может быть еще одним вариантом. Это два подхода: ресурсы существуют в Azure, и вы используете шаблоны ARM для IaC. Кнопка Export template обычно находится в нижней части боковой панели портал Azure. Экспортированный шаблон ARM отражает текущее состояние ресурса, включая параметры, настроенные службой Подключение or. Обычно необходимо знать о свойствах ресурсов, чтобы отполировать экспортированный шаблон.

Снимок экрана: портал Azure экспорт шаблона arm веб-приложения.

Логика подключения сборки

Использование Подключение службы и сохранение конфигурации в Конфигурация приложений

Использование Конфигурация приложений для хранения конфигурации естественно поддерживает сценарии IaC. Поэтому мы рекомендуем использовать этот метод для создания шаблона IaC, если это возможно.

Простые инструкции по порталу см. в этом руководстве по Конфигурация приложений. Чтобы добавить эту функцию в файл bicep, добавьте идентификатор Конфигурация приложений в полезные данные службы Подключение or.

resource webApp 'Microsoft.Web/sites@2022-09-01' existing = {
  name: webAppName
}

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' existing = {
  name: storageAccountName
}

resource appConfiguration 'Microsoft.AppConfiguration/configurationStores@2023-03-01' existing = {
  name: appConfigurationName
}

resource serviceConnector 'Microsoft.ServiceLinker/linkers@2022-05-01' = {
  name: connectorName
  scope: webApp
  properties: {
    clientType: 'python'
    targetService: {
      type: 'AzureResource'
      id: storageAccount.id
    }
    authInfo: {
      authType: 'systemAssignedIdentity'
    }
    configurationInfo: {
      configurationStore: {
        appConfigurationId: appConfiguration.id
      }
    }
  }
}

Использование Подключение службы

Создание подключений между исходной и целевой службой с помощью службы Подключение or является предпочтительным и рекомендуемым способом, если ограничение Подключение or IaC службы не имеет значения для вашего сценария. Служба Подключение or упрощает шаблон, а также предоставляет дополнительные элементы, такие как проверка работоспособности подключения, которая не будет иметь, если вы создаете подключения напрямую с помощью логики шаблона.

// The template builds a connection between a webapp and a storage account 
// with a system-assigned identity using Service Connector

param webAppName string = 'webapp-${uniqueString(resourceGroup().id)}'
param storageAccountName string = 'account${uniqueString(resourceGroup().id)}'
param connectorName string = 'connector_${uniqueString(resourceGroup().id)}'

// Get an existing webapp
resource webApp 'Microsoft.Web/sites@2022-09-01' existing = {
  name: webAppName
}

// Get an existig storage
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' existing = {
  name: storageAccountName
}

// Create a Service Connector resource for the webapp 
// to connect to a storage account using system identity
resource serviceConnector 'Microsoft.ServiceLinker/linkers@2022-05-01' = {
  name: connectorName
  scope: webApp
  properties: {
    clientType: 'python'
    targetService: {
      type: 'AzureResource'
      id: storageAccount.id
    }
    authInfo: {
      authType: 'systemAssignedIdentity'
    }
  }
}

Для форматов свойств и значений, необходимых при создании ресурса службы Подключение or, проверка способ предоставления правильных параметров. Вы также можете предварительно просмотреть и скачать шаблон ARM для справки при создании ресурса службы Подключение or в портал Azure.

Снимок экрана: портал Azure экспорт шаблона arm ресурса соединителя службы.

Использование логики шаблона

В сценариях, в которых Подключение ограничения IaC службы, рассмотрите возможность создания подключений напрямую с помощью логики шаблона. В следующем шаблоне показано, как подключить учетную запись хранения к веб-приложению с помощью удостоверения, назначаемого системой.

// The template builds a connection between a webapp and a storage account 
// with a system-assigned identity without using Service Connector

param webAppName string = 'webapp-${uniqueString(resourceGroup().id)}'
param storageAccountName string = 'account${uniqueString(resourceGroup().id)}'
param storageBlobDataContributorRole string  = 'ba92f5b4-2d11-453d-a403-e96b0029c9fe'

// Get an existing webapp
resource webApp 'Microsoft.Web/sites@2022-09-01' existing = {
  name: webAppName
}

// Get an existing storage account
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' existing = {
  name: storageAccountName
}

// Operation: Enable system-assigned identity on the source service
// No action needed as this is enabled when creating the webapp

// Operation: Configure the target service's endpoint on the source service's app settings
resource appSettings 'Microsoft.Web/sites/config@2022-09-01' = {
  name: 'appsettings'
  parent: webApp
  properties: {
    AZURE_STORAGEBLOB_RESOURCEENDPOINT: storageAccount.properties.primaryEndpoints.blob
  }
}

// Operation: Configure firewall on the target service to allow the source service's outbound IPs
// No action needed as storage account allows all IPs by default

// Operation: Create role assignment for the source service's identity on the target service
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: storageAccount
  name: guid(resourceGroup().id, storageBlobDataContributorRole)
  properties: {
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', storageBlobDataContributorRole)
    principalId: webApp.identity.principalId
  }
}

При создании подключений с помощью логики шаблона важно понимать, что выполняет служба Подключение or для каждого типа проверки подлинности, так как логика шаблона эквивалентна операциям серверной части службы Подключение or. В следующей таблице показаны сведения об операции, которые необходимо преобразовать в логику шаблона для каждого типа проверки подлинности.

Тип проверки подлинности Операции Подключение службы
Строка секрета / Подключение ion — настройка строка подключения целевой службы в параметрах приложения исходной службы
— настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы
Управляемое удостоверение, назначаемое системой — настройка конечной точки целевой службы в параметрах приложения исходной службы
— настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы
— включение назначаемого системой удостоверения в исходной службе
— создание назначения ролей для удостоверения исходной службы в целевой службе
Управляемое удостоверение, назначаемое пользователем — настройка конечной точки целевой службы в параметрах приложения исходной службы
— настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы
— привязка назначенного пользователем удостоверения к исходной службе
— создание назначения ролей для назначаемого пользователем удостоверения в целевой службе
Субъект-служба — настройка конечной точки целевой службы в параметрах приложения исходной службы
— настройка идентификатора приложения субъекта-службы и секрета в параметрах приложения исходной службы
— настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы
— создание назначения ролей для субъекта-службы в целевой службе