Vytváření připojení pomocí nástrojů IaC
Service Connector pomáhá uživatelům připojit své výpočetní služby k cílení na backingové služby během několika kliknutí nebo příkazů. Při přechodu ze začátku do produkční fáze musí uživatelé také provést přechod z používání ručních konfigurací na používání šablon infrastruktury jako kódu (IaC) ve svých kanálech CI/CD.
V této příručce se dozvíte, jak přeložit připojené služby Azure na šablony IaC.
Požadavky
- Tato příručka předpokládá, že znáte omezení IaC konektoru služeb.
Přehled řešení
Převod infrastruktury na šablony IaC obvykle zahrnuje dvě hlavní části: logiku zřizování zdrojových a cílových služeb a logiku pro sestavování připojení. Pro implementaci logiky pro zřízení zdrojových a cílových služeb existují dvě možnosti:
- Vytvoření šablony od začátku
- Export šablony z Azure a jeho vyladění
K implementaci logiky pro sestavení připojení existují tři možnosti:
- Použití konektoru služby a uložení konfigurace v App Configuration
- Použití konektoru služby v šabloně
- Použití logiky šablony ke konfiguraci zdrojových a cílových služeb přímo
Kombinace těchto různých možností mohou produkovat různá řešení. Vzhledem k omezením IaC v konektoru Service Connector doporučujeme implementovat následující řešení v uvedeném pořadí. Pokud chcete tato řešení použít, musíte porozumět nástrojům IaC a gramatikě vytváření šablon.
Řešení | Zřízení zdroje a cíle | Připojení k sestavení | Použitelný scénář | Výhody | Nevýhody |
---|---|---|---|---|---|
0 | Vytváření od začátku | Použití konektoru service connectoru a uložení konfigurace v konfiguraci aplikace | Kontrola živého provozu u cloudových prostředků před povolením živého provozu | - Šablona je jednoduchá a čitelná – Service Connector přináší další hodnotu. – Konektor service connector nezavdá žádný problém s IaC |
– Potřebujete další závislost ke čtení konfigurace z app Configuration. – Náklady na kontrolu živého cloudu prostředků |
2 | Vytváření od začátku | Použití konektoru Service Connector | Kontrola živého provozu u cloudových prostředků před povolením živého provozu | - Šablona je jednoduchá a čitelná – Service Connector přináší další hodnotu. |
– Náklady na kontrolu živého cloudu prostředků |
3 | Vytváření od začátku | Konfigurace zdrojových a cílových služeb přímo v šabloně | Žádná kontrola aktivity u cloudových prostředků | - Šablona je jednoduchá a čitelná | – Funkce konektoru service connectoru nejsou k dispozici. |
4 | Export a leštění | Použití konektoru service connectoru a uložení konfigurace v konfiguraci aplikace | Kontrola živého provozu u cloudových prostředků před povolením živého provozu | – Prostředky jsou úplně stejné jako v cloudu. – Service Connector přináší další hodnotu. – Konektor service connector nezavdá žádný problém s IaC |
– Potřebujete další závislost ke čtení konfigurace z app Configuration. – Náklady na kontrolu živého cloudu prostředků – Podporuje pouze šablony ARM. - Úsilí potřebné k pochopení a leštění šablony |
5 | Export a leštění | Použití konektoru Service Connector | Kontrola živého provozu u cloudových prostředků před povolením živého provozu | – Prostředky jsou úplně stejné jako v cloudu. – Service Connector přináší další hodnotu. |
– Náklady na kontrolu živého cloudu prostředků – Podporuje pouze šablony ARM. - Úsilí potřebné k pochopení a leštění šablony |
6 | Export a leštění | Konfigurace zdrojových a cílových služeb přímo v šabloně | Žádná kontrola aktivity u cloudových prostředků | – Prostředky jsou úplně stejné jako v cloudu. | – Podpora pouze šablony ARM - Úsilí o pochopení a leštění šablony – Funkce konektoru service connectoru nejsou k dispozici. |
Vytváření šablon
Následující části ukazují, jak vytvořit webovou aplikaci a účet úložiště a jak je propojit s identitou přiřazenou systémem pomocí Bicep. Ukazuje, jak to udělat pomocí konektoru Service Connector a logiky šablony.
Zřízení zdrojových a cílových služeb
Vytváření od začátku
Vytváření šablony od začátku je upřednostňovaným a doporučeným způsobem zřízení zdrojových a cílových služeb, protože je snadné začít a vytvořit šablonu jednoduchou a čitelnou. Následuje příklad použití minimální sady parametrů k vytvoření webové aplikace a účtu úložiště.
// 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'
}
Export a leštění
Pokud jsou prostředky, které zřizujete, úplně stejné jako prostředky, které máte v cloudu, může být export šablony z Azure další možností. Dvěma místy tohoto přístupu jsou: prostředky existují v Azure a pro IaC používáte šablony ARM. Tlačítko Export template
je obvykle v dolní části bočního panelu na webu Azure Portal. Exportovaná šablona ARM odráží aktuální stavy prostředku, včetně nastavení nakonfigurovaných konektorem služby. Obvykle potřebujete vědět o vlastnostech prostředku, abyste vyleštili exportovanou šablonu.
Logika sestavení připojení
Použití konektoru služby a uložení konfigurace v App Configuration
Použití app Configuration k ukládání konfigurace přirozeně podporuje scénáře IaC. Proto doporučujeme tuto metodu použít k sestavení šablony IaC, pokud je to možné.
Jednoduché pokyny k portálu najdete v tomto kurzu konfigurace aplikace. Pokud chcete tuto funkci přidat do souboru bicep, přidejte ID konfigurace aplikace do datové části konektoru služby.
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
}
}
}
}
Použití konektoru služby
Vytvoření připojení mezi zdrojovou a cílovou službou pomocí konektoru Service Connector je upřednostňovaným a doporučeným přístupem za předpokladu, že omezení konektoru služby IaC nemá negativní vliv na váš scénář. Service Connector zjednodušuje šablonu a poskytuje další funkce, jako je ověření stavu připojení, které nejsou při vytváření připojení dostupné přímo prostřednictvím logiky šablony.
// 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'
}
}
}
U formátů vlastností a hodnot potřebných při vytváření prostředku konektoru služby zkontrolujte , jak zadat správné parametry. Při vytváření prostředku konektoru služby na webu Azure Portal můžete také zobrazit náhled a stáhnout šablonu ARM.
Použití logiky šablony
V situacích, kdy záleží na omezení konektoru služby IaC, zvažte přímé vytváření připojení pomocí logiky šablony. Následující šablona ukazuje, jak připojit účet úložiště k webové aplikaci pomocí identity přiřazené systémem.
// 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
}
}
Při vytváření připojení pomocí logiky šablony je důležité pochopit, co konektor služby dělá pro každý typ ověřování, protože logika šablony je ekvivalentní back-endovým operacím konektoru služby. V následující tabulce jsou uvedeny podrobnosti o operaci, které je potřeba přeložit na logiku šablony pro každý typ ověřování.
Typ ověřování | Operace konektoru služby |
---|---|
Tajný klíč / připojovací řetězec | – Konfigurace připojovací řetězec cílové služby v nastavení aplikace zdrojové služby – Nakonfigurujte bránu firewall v cílové službě tak, aby umožňovala odchozí IP adresy zdrojové služby. |
Spravovaná identita přiřazená systémem | – Konfigurace koncového bodu cílové služby v nastavení aplikace zdrojové služby – Nakonfigurujte bránu firewall v cílové službě tak, aby umožňovala odchozí IP adresy zdrojové služby. – Povolení identity přiřazené systémem ve zdrojové službě – Vytvoření přiřazení role pro identitu zdrojové služby v cílové službě |
Spravovaná identita přiřazená uživatelem | – Konfigurace koncového bodu cílové služby v nastavení aplikace zdrojové služby – Nakonfigurujte bránu firewall v cílové službě tak, aby umožňovala odchozí IP adresy zdrojové služby. – Vytvoření vazby identity přiřazené uživatelem ke zdrojové službě – Vytvoření přiřazení role pro identitu přiřazenou uživatelem v cílové službě |
Instanční objekt | – Konfigurace koncového bodu cílové služby v nastavení aplikace zdrojové služby – Konfigurace appId a tajného klíče instančního objektu v nastavení aplikace zdrojové služby – Nakonfigurujte bránu firewall v cílové službě tak, aby umožňovala odchozí IP adresy zdrojové služby. – Vytvoření přiřazení role pro instanční objekt v cílové službě |