Sdílet prostřednictvím


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.

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

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.

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

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ě