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.
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.
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 |
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla