Dela via


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

Ö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.

Skärmbild av Azure Portal som exporterar ARM-mallen för en webbapp.

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.

Skärmbild av Azure Portal som exporterar ARM-mallen för en tjänstanslutningsresurs.

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