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.

Snímek obrazovky webu Azure Portal s exportem šablony arm webové aplikace

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.

Snímek obrazovky webu Azure Portal s exportem šablony arm prostředku konektoru služby

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ě