Создание подключений с помощью средств IaC
Соединитель служб помогает пользователям подключать свои вычислительные службы к целевым службам резервного копирования в нескольких щелчках или командах. При переходе с начальной стадии на рабочую стадию пользователи также должны перейти от использования ручных конфигураций к использованию шаблонов инфраструктуры как кода (IaC) в конвейерах CI/CD.
В этом руководстве вы узнаете, как перевести подключенные службы Azure в шаблоны IaC.
Необходимые компоненты
- В этом руководстве предполагается, что вы знаете об ограничениях IaC соединителя службы.
Обзор решения
Преобразование инфраструктуры в шаблоны IaC обычно включает две основные части: логику подготовки исходных и целевых служб, а также логику для создания подключений. Чтобы реализовать логику для подготовки исходных и целевых служб, существует два варианта:
- Создание шаблона с нуля
- Экспорт шаблона из Azure и его польирование
Чтобы реализовать логику для создания подключений, существует три варианта:
- Использование соединителя службы и сохранение конфигурации в Конфигурация приложений
- Использование соединителя службы в шаблоне
- Использование логики шаблона для настройки исходных и целевых служб напрямую
Сочетания этих различных вариантов могут создавать различные решения. Из-за ограничений IaC в Соединителе служб рекомендуется реализовать следующие решения в указанном ниже порядке. Чтобы применить эти решения, необходимо понять инструменты IaC и грамматику разработки шаблонов.
Решение | Подготовка источника и целевого объекта | Подключение к сборке | Применимый сценарий | Плюсы | Минусы |
---|---|---|---|---|---|
1 | Разработка с нуля | Использование соединителя службы и сохранение конфигурации в Конфигурация приложений | Проверка активности облачных ресурсов перед разрешением динамического трафика | — Шаблон прост и доступен для чтения — Соединитель службы приносит дополнительное значение — Проблема IaC не появилась в соединителе службы |
— требуется дополнительная зависимость для чтения конфигурации из Конфигурация приложений — стоимость проверки активности облачных ресурсов |
2 | Разработка с нуля | Использование соединителя службы | Проверка активности облачных ресурсов перед разрешением динамического трафика | — Шаблон прост и доступен для чтения — Соединитель службы приносит дополнительное значение |
— стоимость проверки активности облачных ресурсов |
3 | Разработка с нуля | Настройка исходных и целевых служб непосредственно в шаблоне | Нет проверки активности в облачных ресурсах | — Шаблон прост и доступен для чтения | — Функции соединителя служб недоступны |
4 | Экспорт и польский | Использование соединителя службы и сохранение конфигурации в Конфигурация приложений | Проверка активности облачных ресурсов перед разрешением динамического трафика | — Ресурсы точно такие же, как и в облаке — Соединитель службы приносит дополнительное значение — Проблема IaC не появилась в соединителе службы |
— требуется дополнительная зависимость для чтения конфигурации из Конфигурация приложений — стоимость проверки активности облачных ресурсов — поддерживает только шаблоны ARM — усилия, необходимые для понимания и полировки шаблона |
5 | Экспорт и польский | Использование соединителя службы | Проверка активности облачных ресурсов перед разрешением динамического трафика | — Ресурсы точно такие же, как и в облаке — Соединитель службы приносит дополнительное значение |
— стоимость проверки активности облачных ресурсов — поддерживает только шаблоны ARM — усилия, необходимые для понимания и полировки шаблона |
6 | Экспорт и польский | Настройка исходных и целевых служб непосредственно в шаблоне | Нет проверки активности в облачных ресурсах | — Ресурсы точно такие же, как в облаке | — Поддержка только шаблона ARM — усилия по пониманию и полю шаблона — Функции соединителя служб недоступны |
Создание шаблонов
В следующих разделах показано, как создать веб-приложение и учетную запись хранения и подключить их к идентификатору, назначаемого системой, с помощью Bicep. В нем показано, как это сделать как с помощью соединителя службы, так и с помощью логики шаблона.
Подготовка исходных и целевых служб
Разработка с нуля
Создание шаблона с нуля является предпочтительным и рекомендуемым способом подготовки исходных и целевых служб, так как легко приступить к работе и сделать шаблон простым и удобочитаемым. Ниже приведен пример использования минимального набора параметров для создания веб-приложения и учетной записи хранения.
// This template creates a webapp and a storage account.
// In order to make it more readable, we use only the minimal 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 отражает текущее состояние ресурса, включая параметры, настроенные соединителем службы. Обычно необходимо знать о свойствах ресурсов, чтобы отполировать экспортированный шаблон.
Логика подключения сборки
Использование соединителя службы и сохранение конфигурации в Конфигурация приложений
Использование Конфигурация приложений для хранения конфигурации естественно поддерживает сценарии IaC. Поэтому мы рекомендуем использовать этот метод для создания шаблона IaC, если это возможно.
Простые инструкции по порталу см. в этом руководстве по Конфигурация приложений. Чтобы добавить эту функцию в файл bicep, добавьте идентификатор Конфигурация приложений в полезные данные соединителя службы.
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
}
}
}
}
Использование соединителя службы
Создание подключений между исходной и целевой службой с помощью соединителя службы является предпочтительным и рекомендуемым подходом, если ограничение IaC service Connector не негативно влияет на ваш сценарий. Соединитель служб упрощает шаблон и предоставляет дополнительные функции, такие как проверка работоспособности подключения, которые недоступны при создании подключений непосредственно с помощью логики шаблона.
// 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 existing 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'
}
}
}
Для форматов свойств и значений, необходимых при создании ресурса соединителя служб, проверьте , как предоставить правильные параметры. Вы также можете предварительно просмотреть и скачать шаблон ARM для справки при создании ресурса соединителя службы в портал Azure.
Использование логики шаблона
В сценариях, в которых важно ограничение Соединителя служб 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
}
}
При создании подключений с помощью логики шаблона напрямую важно понимать, что делает соединитель служб для каждого типа проверки подлинности, так как логика шаблона эквивалентна операциям серверной части соединителя службы. В следующей таблице показаны сведения об операции, которые необходимо преобразовать в логику шаблона для каждого типа проверки подлинности.
Тип проверки подлинности | Операции соединителя служб |
---|---|
Строка секрета или подключения | — настройка строка подключения целевой службы в параметрах приложения исходной службы — настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы |
Управляемое удостоверение, назначаемое системой | — настройка конечной точки целевой службы в параметрах приложения исходной службы — настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы — включение назначаемого системой удостоверения в исходной службе — создание назначения ролей для удостоверения исходной службы в целевой службе |
Управляемое удостоверение, назначаемое пользователем | — настройка конечной точки целевой службы в параметрах приложения исходной службы — настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы — привязка назначенного пользователем удостоверения к исходной службе — создание назначения ролей для назначаемого пользователем удостоверения в целевой службе |
Субъект-служба | — настройка конечной точки целевой службы в параметрах приложения исходной службы — настройка идентификатора приложения субъекта-службы и секрета в параметрах приложения исходной службы — настройте брандмауэр в целевой службе, чтобы разрешить исходящие IP-адреса исходной службы — создание назначения ролей для субъекта-службы в целевой службе |