Udostępnij za pośrednictwem


Jak przetłumaczyć infrastrukturę na szablon IaC

Usługa Połączenie or ułatwia użytkownikom łączenie usług obliczeniowych z docelowymi usługami zapasowymi za pomocą kilku kliknięć lub poleceń. Podczas przechodzenia z etapu rozpoczęcia pracy do etapu produkcyjnego użytkownicy muszą również przejść z używania konfiguracji ręcznych do używania szablonów infrastruktury jako kodu (IaC) w potokach ciągłej integracji/ciągłego wdrażania. W tym przewodniku pokazano, jak przetłumaczyć połączone usługi platformy Azure na szablony IaC.

Wymagania wstępne

  • W tym przewodniku założono, że masz świadomość ograniczeń IaC usługi Połączenie or.

Omówienie rozwiązania

Tłumaczenie infrastruktury na szablony IaC zwykle obejmuje dwie główne części: logikę aprowizacji usług źródłowych i docelowych oraz logikę do tworzenia połączeń. Aby zaimplementować logikę aprowizacji usług źródłowych i docelowych, dostępne są dwie opcje:

  • Tworzenie szablonu od podstaw
  • Eksportowanie szablonu z platformy Azure i polerowanie go

Aby zaimplementować logikę do tworzenia połączeń, dostępne są trzy opcje:

  • Korzystanie z usługi Połączenie or i przechowywanie konfiguracji w usłudze App Configuration
  • Używanie Połączenie usługi w szablonie
  • Używanie logiki szablonu do bezpośredniego konfigurowania usług źródłowych i docelowych

Kombinacje tych różnych opcji mogą tworzyć różne rozwiązania. Ze względu na ograniczenia IaC w usłudze Połączenie or zalecamy zaimplementowanie następujących rozwiązań w podanej poniżej kolejności. Aby zastosować te rozwiązania, musisz zrozumieć narzędzia IaC i gramatykę tworzenia szablonów.

Rozwiązanie Aprowizuj źródło i element docelowy Połączenie kompilacji Odpowiedni scenariusz Plusy Minusy
1 Tworzenie od podstaw Korzystanie z usługi Połączenie or i przechowywanie konfiguracji w usłudze App Configuration Ma kontrolę aktualności zasobów w chmurze przed zezwoleniem na ruch na żywo — Szablon jest prosty i czytelny
— Usługa Połączenie or przynosi dodatkową wartość
— Problem Z IaC nie jest wprowadzany przez usługę Połączenie or
— Potrzebna jest dodatkowa zależność do odczytu konfiguracji z usługi App Configuration
— Koszt sprawdzania aktualności zasobów w chmurze
2 Tworzenie od podstaw Korzystanie z usługi Połączenie or Ma kontrolę aktualności zasobów w chmurze przed zezwoleniem na ruch na żywo — Szablon jest prosty i czytelny
— Usługa Połączenie or przynosi dodatkową wartość
— Koszt sprawdzania aktualności zasobów w chmurze
3 Tworzenie od podstaw Konfigurowanie usług źródłowych i docelowych bezpośrednio w szablonie Brak sprawdzania aktualności zasobów w chmurze — Szablon jest prosty i czytelny — Funkcje usługi Połączenie or nie są dostępne
100 Eksport i polski Korzystanie z usługi Połączenie or i przechowywanie konfiguracji w usłudze App Configuration Ma kontrolę aktualności zasobów w chmurze przed zezwoleniem na ruch na żywo — Zasoby są dokładnie takie same jak w chmurze
— Usługa Połączenie or przynosi dodatkową wartość
— Problem Z IaC nie jest wprowadzany przez usługę Połączenie or
— Potrzebna jest dodatkowa zależność do odczytu konfiguracji z usługi App Configuration
— Koszt sprawdzania aktualności zasobów w chmurze
— Obsługuje tylko szablony usługi ARM
- Wysiłki wymagane do zrozumienia i dopracowania szablonu
5 Eksport i polski Korzystanie z usługi Połączenie or Ma kontrolę aktualności zasobów w chmurze przed zezwoleniem na ruch na żywo — Zasoby są dokładnie takie same jak w chmurze
— Usługa Połączenie or przynosi dodatkową wartość
— Koszt sprawdzania aktualności zasobów w chmurze
— Obsługuje tylko szablony usługi ARM
- Wysiłki wymagane do zrozumienia i dopracowania szablonu
6 Eksport i polski Konfigurowanie usług źródłowych i docelowych bezpośrednio w szablonie Brak sprawdzania aktualności zasobów w chmurze — Zasoby są dokładnie takie same jak w chmurze — Obsługa tylko szablonu usługi ARM
- Wysiłki mające na celu zrozumienie i dopracowanie szablonu
— Funkcje usługi Połączenie or nie są dostępne

Tworzenie szablonów

W poniższych sekcjach pokazano, jak utworzyć aplikację internetową i konto magazynu oraz połączyć je z tożsamością przypisaną przez system przy użyciu aplikacji Bicep. Pokazuje on, jak to zrobić zarówno przy użyciu Połączenie usługi, jak i logiki szablonu.

Aprowizuj usługi źródłowe i docelowe

Tworzenie od podstaw

Tworzenie szablonu od podstaw jest preferowanym i zalecanym sposobem aprowizacji usług źródłowych i docelowych, ponieważ łatwo rozpocząć pracę i sprawia, że szablon jest prosty i czytelny. Poniżej przedstawiono przykład użycia minimalnego zestawu parametrów w celu utworzenia aplikacji internetowej i konta magazynu.

// 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'
}

Eksport i polski

Jeśli aprowizowane zasoby są dokładnie takie same jak te, które znajdują się w chmurze, eksportowanie szablonu z platformy Azure może być inną opcją. Te dwie lokalne metody to: zasoby istnieją na platformie Azure i używasz szablonów usługi ARM dla infrastruktury IaC. Przycisk Export template znajduje się zwykle u dołu paska bocznego w witrynie Azure Portal. Wyeksportowany szablon usługi ARM odzwierciedla bieżące stany zasobu, w tym ustawienia skonfigurowane przez usługę Połączenie or. Zazwyczaj musisz wiedzieć o właściwościach zasobu, aby przeolerować wyeksportowany szablon.

Zrzut ekranu witryny Azure Portal przedstawiający eksportowanie szablonu arm aplikacji internetowej.

Tworzenie logiki połączenia

Używanie Połączenie usługi i przechowywanie konfiguracji w usłudze App Configuration

Używanie usługi App Configuration do przechowywania konfiguracji w naturalny sposób obsługuje scenariusze IaC. Dlatego zalecamy użycie tej metody do skompilowania szablonu IaC, jeśli jest to możliwe.

Aby uzyskać proste instrukcje dotyczące portalu, zapoznaj się z tym samouczkiem dotyczącym usługi App Configuration. Aby dodać tę funkcję do pliku bicep, dodaj identyfikator konfiguracji aplikacji w ładunku service Połączenie 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
      }
    }
  }
}

Korzystanie z usługi Połączenie or

Tworzenie połączeń między usługą źródłową i docelową przy użyciu usługi Service Połączenie or jest preferowanym i zalecanym sposobem, jeśli ograniczenie usługi Połączenie or IaC nie ma znaczenia w danym scenariuszu. Usługa Połączenie or upraszcza szablon, a także udostępnia dodatkowe elementy, takie jak weryfikacja kondycji połączenia, które nie będą dostępne w przypadku bezpośredniego tworzenia połączeń za pośrednictwem logiki szablonu.

// 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'
    }
  }
}

Aby zapoznać się z formatami właściwości i wartości potrzebnych podczas tworzenia zasobu usługi Połączenie or, sprawdź, jak podać poprawne parametry. Podczas tworzenia zasobu usługi Połączenie or w witrynie Azure Portal można również wyświetlić podgląd i pobrać szablon usługi ARM.

Zrzut ekranu witryny Azure Portal przedstawiający eksportowanie szablonu arm zasobu łącznika usługi.

Korzystanie z logiki szablonu

W scenariuszach, w których ma znaczenie ograniczenie IaC usługi Połączenie or, rozważ bezpośrednie tworzenie połączeń przy użyciu logiki szablonu. Poniższy szablon przedstawia przykład łączenia konta magazynu z aplikacją internetową przy użyciu tożsamości przypisanej przez system.

// 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
  }
}

Podczas bezpośredniego tworzenia połączeń przy użyciu logiki szablonu należy zrozumieć, co usługa Połączenie or wykonuje dla każdego typu uwierzytelniania, ponieważ logika szablonu jest równoważna operacjom zaplecza usługi Połączenie or. W poniższej tabeli przedstawiono szczegóły operacji, które należy przetłumaczyć na logikę szablonu dla każdego typu uwierzytelniania.

Typ uwierzytelniania Operacje usługi Połączenie or
Ciąg wpisu tajnego/Połączenie ion — Konfigurowanie parametry połączenia usługi docelowej w ustawieniach aplikacji usługi źródłowej
— Konfigurowanie zapory w usłudze docelowej w celu zezwolenia na wychodzące adresy IP usługi źródłowej
Tożsamość zarządzana przypisana przez system — Konfigurowanie punktu końcowego usługi docelowej w ustawieniach aplikacji usługi źródłowej
— Konfigurowanie zapory w usłudze docelowej w celu zezwolenia na wychodzące adresy IP usługi źródłowej
— Włączanie tożsamości przypisanej przez system w usłudze źródłowej
— Tworzenie przypisania roli dla tożsamości usługi źródłowej w usłudze docelowej
Tożsamość zarządzana przypisana przez użytkownika — Konfigurowanie punktu końcowego usługi docelowej w ustawieniach aplikacji usługi źródłowej
— Konfigurowanie zapory w usłudze docelowej w celu zezwolenia na wychodzące adresy IP usługi źródłowej
— Wiązanie tożsamości przypisanej przez użytkownika z usługą źródłową
— Tworzenie przypisania roli dla tożsamości przypisanej przez użytkownika w usłudze docelowej
Jednostka usługi — Konfigurowanie punktu końcowego usługi docelowej w ustawieniach aplikacji usługi źródłowej
— Konfigurowanie identyfikatora appId i wpisu tajnego jednostki usługi źródłowej w ustawieniach aplikacji usługi źródłowej
— Konfigurowanie zapory w usłudze docelowej w celu zezwolenia na wychodzące adresy IP usługi źródłowej
— Tworzenie przypisania roli dla jednostki usługi w usłudze docelowej