Jak přeložit infrastrukturu na šablonu IaC
Služba Připojení or 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 si ukážeme, 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í služby Připojení or IaC.
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í služby Připojení or a uložení konfigurace v App Configuration
- Použití služby Připojení or 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 service Připojení or 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í služby Připojení or a uložení konfigurace v App Configuration | Kontrola živého provozu u cloudových prostředků před povolením živého provozu | - Šablona je jednoduchá a čitelná - Service Připojení or přináší další hodnotu – Služba service Připojení or nezavádějí žádný problém 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í služby Připojení or | Kontrola živého provozu u cloudových prostředků před povolením živého provozu | - Šablona je jednoduchá a čitelná - Service Připojení or 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 služby Připojení or nejsou k dispozici. |
4 | Export a leštění | Použití služby Připojení or a uložení konfigurace v App Configuration | 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 Připojení or přináší další hodnotu – Služba service Připojení or nezavádějí žádný problém 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í služby Připojení or | 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 Připojení or 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 služby Připojení or 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 provést pomocí Připojení služby i pomocí 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 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'
}
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 službou Připojení oru. Obvykle potřebujete vědět o vlastnostech prostředku, abyste vyleštili exportovanou šablonu.
Logika sestavení připojení
Použití služby Připojení or a uložení konfigurace v App Configuration
Použití služby 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 služby Připojení 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
}
}
}
}
Použití služby Připojení or
Vytvoření připojení mezi zdrojovou a cílovou službou pomocí služby Připojení or je upřednostňovaným a doporučeným způsobem, pokud omezení služby Připojení or IaC pro váš scénář nezáleží. Service Připojení or usnadňuje šablonu a také poskytuje další prvky, jako je ověření stavu připojení, které nebudete mít, pokud vytváříte připojení prostřednictvím logiky šablony přímo.
// 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'
}
}
}
U formátů vlastností a hodnot potřebných při vytváření prostředku služby Připojení oru zkontrolujte, jak poskytnout správné parametry. Při vytváření prostředku služby Připojení or na webu Azure Portal můžete také zobrazit náhled a stáhnout šablonu ARM.
Použití logiky šablony
Pro scénáře, ve kterých záleží na omezení služby Připojení or 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 služba Připojení or dělá pro každý typ ověřování, protože logika šablony je ekvivalentní back-endovým operacím služby Připojení or. 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 Připojení služby |
---|---|
Řetězec tajného kódu / Připojení ionu | – 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ě |