Så här skapar du anslutningar med IaC-verktyg
Service Connector hjälper användarna att ansluta sina beräkningstjänster till stödtjänster med bara några få klick eller kommandon. När du flyttar från en kom igång till en produktionsfas måste användarna också göra övergången från att använda manuella konfigurationer till att använda IaC-mallar (Infrastruktur som kod) i sina CI/CD-pipelines.
I den här guiden får du lära dig hur du översätter dina anslutna Azure-tjänster till IaC-mallar.
Förutsättningar
- Den här guiden förutsätter att du är medveten om IaC-begränsningarna för Service Connector.
Översikt över lösningen
Översättningen av infrastrukturen till IaC-mallar omfattar vanligtvis två viktiga delar: logiken för att etablera käll- och måltjänster och logiken för att skapa anslutningar. Det finns två alternativ för att implementera logiken för att etablera käll- och måltjänster:
- Redigera mallen från grunden
- Exportera mallen från Azure och polera den
Det finns tre alternativ för att implementera logiken för att skapa anslutningar:
- Använda serviceanslutningsappen och lagringskonfigurationen i App Configuration
- Använda Service Connector i mallen
- Använda malllogik för att konfigurera käll- och måltjänster direkt
Kombinationer av dessa olika alternativ kan skapa olika lösningar. På grund av IaC-begränsningar i Service Connector rekommenderar vi att du implementerar följande lösningar i den ordning som visas nedan. Om du vill tillämpa dessa lösningar måste du förstå IaC-verktygen och mallredigerings grammatiken.
Lösning | Etablera källa och mål | Skapa anslutning | Tillämpligt scenario | Fördelar | Nackdelar |
---|---|---|---|---|---|
1 | Redigering från grunden | Använda serviceanslutningsappen och lagringskonfigurationen i App Configuration | Har liveness-kontroll på molnresurserna innan livetrafik tillåts | – Mallen är enkel och läsbar – Service Connector ger ytterligare värde – Inga IaC-problem introduceras av Service Connector |
– Behöver extra beroende för att läsa konfigurationen från App Configuration – Kostnad för att kontrollera molnresursernas liveness |
2 | Redigering från grunden | Använda tjänstanslutning | Har liveness-kontroll på molnresurserna innan livetrafik tillåts | – Mallen är enkel och läsbar – Service Connector ger ytterligare värde |
– Kostnad för att kontrollera molnresursernas liveness |
3 | Redigering från grunden | Konfigurera käll- och måltjänster direkt i mallen | Ingen liveness-kontroll av molnresurserna | – Mallen är enkel och läsbar | – Funktionerna i Service Connector är inte tillgängliga |
4 | Exportera och polera | Använda serviceanslutningsappen och lagringskonfigurationen i App Configuration | Har liveness-kontroll på molnresurserna innan livetrafik tillåts | – Resurser är exakt samma som i molnet – Service Connector ger ytterligare värde – Inga IaC-problem introduceras av Service Connector |
– Behöver extra beroende för att läsa konfigurationen från App Configuration – Kostnad för att kontrollera molnresursernas liveness – Stöder endast ARM-mallar - Arbete som krävs för att förstå och polera mallen |
5 | Exportera och polera | Använda tjänstanslutning | Har liveness-kontroll på molnresurserna innan livetrafik tillåts | – Resurser är exakt samma som i molnet – Service Connector ger ytterligare värde |
– Kostnad för att kontrollera molnresursernas liveness – Stöder endast ARM-mallar - Arbete som krävs för att förstå och polera mallen |
6 | Exportera och polera | Konfigurera käll- och måltjänster direkt i mallen | Ingen liveness-kontroll av molnresurserna | – Resurserna är exakt samma som i molnet | – Endast stöd för ARM-mall - Ansträngningar för att förstå och polera mallen – Funktionerna i Service Connector är inte tillgängliga |
Skapa mallar
Följande avsnitt visar hur du skapar en webbapp och ett lagringskonto och ansluter dem med en systemtilldelad identitet med Bicep. Den visar hur du gör detta både med hjälp av Service Connector och med hjälp av malllogik.
Etablera käll- och måltjänster
Redigering från grunden
Att skapa mallen från grunden är det bästa och rekommenderade sättet att etablera käll- och måltjänster, eftersom det är enkelt att komma igång och göra mallen enkel och läsbar. Följande är ett exempel som använder en minimal uppsättning parametrar för att skapa en webbapp och ett lagringskonto.
// 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'
}
Exportera och polera
Om de resurser du etablerar är exakt samma som de som du har i molnet kan det vara ett annat alternativ att exportera mallen från Azure. De två lokalerna i den här metoden är: resurserna finns i Azure och du använder ARM-mallar för din IaC. Knappen Export template
är vanligtvis längst ned i sidofältet på Azure Portal. Den exporterade ARM-mallen återspeglar resursens aktuella tillstånd, inklusive de inställningar som konfigurerats av Service Connector. Du behöver vanligtvis känna till resursegenskaperna för att polera den exporterade mallen.
Skapa anslutningslogik
Använda Service Connector och lagra konfiguration i App Configuration
Användning av App Configuration för att lagra konfiguration stöder naturligtvis IaC-scenarier. Vi rekommenderar därför att du använder den här metoden för att skapa din IaC-mall om möjligt.
Enkla portalinstruktioner finns i den här självstudien om appkonfiguration. Om du vill lägga till den här funktionen i en bicep-fil lägger du till appkonfigurations-ID:t i nyttolasten för Service Connector.
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
}
}
}
}
Använda Service Connector
Att skapa anslutningar mellan käll- och måltjänsten med hjälp av Service Connector är den rekommenderade metoden, förutsatt att IaC-begränsningen för Service Connector inte påverkar scenariot negativt. Service Connector förenklar mallen och tillhandahåller ytterligare funktioner, till exempel en validering av anslutningshälsa, som inte är tillgängliga när du skapar anslutningar direkt via malllogik.
// 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'
}
}
}
För de format för egenskaper och värden som behövs när du skapar en Service Connector-resurs kontrollerar du hur du anger rätt parametrar. Du kan också förhandsgranska och ladda ned en ARM-mall som referens när du skapar en Service Connector-resurs i Azure Portal.
Använda malllogik
För scenarier där IaC-begränsningen för Service Connector är viktig kan du överväga att skapa anslutningar direkt med hjälp av malllogik. Följande mall är ett exempel som visar hur du ansluter ett lagringskonto till en webbapp med hjälp av en systemtilldelad identitet.
// 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
}
}
När du skapar anslutningar direkt med hjälp av malllogik är det viktigt att förstå vad Service Connector gör för varje typ av autentiseringstyp, eftersom malllogik motsvarar serverdelsåtgärderna för Service Connector. I följande tabell visas den åtgärdsinformation som du behöver översätta till malllogik för varje typ av autentiseringstyp.
Autentiseringstyp | Åtgärder för Service Connector |
---|---|
Hemlighet/anslutningssträng | – Konfigurera måltjänstens anslutningssträng i källtjänstens appinställningar – Konfigurera brandväggen på måltjänsten så att källtjänstens utgående IP-adresser tillåts |
Systemtilldelad hanterad identitet | – Konfigurera måltjänstens slutpunkt i källtjänstens appinställningar – Konfigurera brandväggen på måltjänsten så att källtjänstens utgående IP-adresser tillåts – Aktivera systemtilldelad identitet i källtjänsten – Skapa rolltilldelning för källtjänstens identitet på måltjänsten |
Användartilldelad hanterad identitet | – Konfigurera måltjänstens slutpunkt i källtjänstens appinställningar – Konfigurera brandväggen på måltjänsten så att källtjänstens utgående IP-adresser tillåts – Binda användartilldelad identitet till källtjänsten – Skapa rolltilldelning för den användartilldelade identiteten på måltjänsten |
Tjänstens huvudnamn | – Konfigurera måltjänstens slutpunkt i källtjänstens appinställningar – Konfigurera tjänstens huvudnamns appId och hemlighet i källtjänstens appinställningar – Konfigurera brandväggen på måltjänsten så att källtjänstens utgående IP-adresser tillåts – Skapa rolltilldelning för tjänstens huvudnamn på måltjänsten |