Delen via


Verbindingen maken met IaC-hulpprogramma's

Met serviceconnector kunnen gebruikers hun rekenservices verbinden met het doel van back-upservices in slechts een paar klikken of opdrachten. Wanneer gebruikers overstappen van een aan de slag naar een productiefase, moeten gebruikers ook overstappen van handmatige configuraties naar het gebruik van IaC-sjablonen (Infrastructure as Code) in hun CI/CD-pijplijnen.

In deze handleiding leert u hoe u uw verbonden Azure-services kunt vertalen naar IaC-sjablonen.

Vereisten

  • In deze handleiding wordt ervan uitgegaan dat u zich bewust bent van de beperkingen van de Service Connector IaC.

Overzicht van de oplossing

Het vertalen van de infrastructuur naar IaC-sjablonen omvat meestal twee belangrijke onderdelen: de logica voor het inrichten van bron- en doelservices en de logica voor het bouwen van verbindingen. Er zijn twee opties om de logica voor het inrichten van bron- en doelservices te implementeren:

  • De sjabloon helemaal zelf ontwerpen
  • De sjabloon exporteren vanuit Azure en deze opspoetsen

Er zijn drie opties om de logica voor het bouwen van verbindingen te implementeren:

  • Serviceconnector gebruiken en configuratie opslaan in App Configuration
  • Serviceconnector gebruiken in de sjabloon
  • Sjabloonlogica gebruiken om bron- en doelservices rechtstreeks te configureren

Combinaties van deze verschillende opties kunnen verschillende oplossingen produceren. Vanwege IaC-beperkingen in Service Connector raden we u aan de volgende oplossingen te implementeren in de onderstaande volgorde. Als u deze oplossingen wilt toepassen, moet u de IaC-hulpprogramma's en de grammatica van de sjablooncreatie begrijpen.

Oplossing Bron en doel inrichten Verbinding maken Toepasselijk scenario Voordelen Nadelen
1 Helemaal zelf ontwerpen Serviceconnector gebruiken en configuratie opslaan in App Configuration Heeft livecontrole op de cloudresources voordat live verkeer wordt toegestaan - Sjabloon is eenvoudig en leesbaar
- ServiceConnector biedt extra waarde
- Er wordt geen IaC-probleem geïntroduceerd door serviceconnector
- Extra afhankelijkheid nodig om de configuratie van App Configuration te lezen
- Kosten voor het controleren van de liveness van cloudresources
2 Helemaal zelf ontwerpen Serviceconnector gebruiken Heeft livecontrole op de cloudresources voordat live verkeer wordt toegestaan - Sjabloon is eenvoudig en leesbaar
- ServiceConnector biedt extra waarde
- Kosten voor het controleren van de liveness van cloudresources
3 Helemaal zelf ontwerpen Bron- en doelservices rechtstreeks in sjabloon configureren Geen livenesscontrole op de cloudresources - Sjabloon is eenvoudig en leesbaar - Serviceconnectorfuncties zijn niet beschikbaar
4 Exporteren en polijsten Serviceconnector gebruiken en configuratie opslaan in App Configuration Heeft livecontrole op de cloudresources voordat live verkeer wordt toegestaan - Resources zijn precies hetzelfde als in de cloud
- ServiceConnector biedt extra waarde
- Er wordt geen IaC-probleem geïntroduceerd door serviceconnector
- Extra afhankelijkheid nodig om de configuratie van App Configuration te lezen
- Kosten voor het controleren van de liveness van cloudresources
- Ondersteunt alleen ARM-sjablonen
- Inspanningen die nodig zijn om de sjabloon te begrijpen en te verbeteren
5 Exporteren en polijsten Serviceconnector gebruiken Heeft livecontrole op de cloudresources voordat live verkeer wordt toegestaan - Resources zijn precies hetzelfde als in de cloud
- ServiceConnector biedt extra waarde
- Kosten voor het controleren van de liveness van cloudresources
- Ondersteunt alleen ARM-sjablonen
- Inspanningen die nodig zijn om de sjabloon te begrijpen en te verbeteren
6 Exporteren en polijsten Bron- en doelservices rechtstreeks in sjabloon configureren Geen livenesscontrole op de cloudresources - Resources zijn precies hetzelfde als in de cloud - Alleen ARM-sjabloon ondersteunen
- Inspanningen om de sjabloon te begrijpen en te verbeteren
- Serviceconnectorfuncties zijn niet beschikbaar

Sjablonen maken

In de volgende secties ziet u hoe u een web-app en een opslagaccount maakt en deze verbindt met een door het systeem toegewezen identiteit met bicep. U ziet hoe u dit doet met serviceconnector en met behulp van sjabloonlogica.

Bron- en doelservices inrichten

Helemaal zelf ontwerpen

Het ontwerpen van de sjabloon is de aanbevolen en aanbevolen manier om bron- en doelservices in te richten, omdat het eenvoudig is om aan de slag te gaan en de sjabloon eenvoudig en leesbaar maakt. Hieronder volgt een voorbeeld, waarbij u een minimale set parameters gebruikt om een web-app en een opslagaccount te maken.

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

Exporteren en polijsten

Als de resources die u inricht precies hetzelfde zijn als de resources die u in de cloud hebt, is het exporteren van de sjabloon vanuit Azure mogelijk een andere optie. De twee premises van deze benadering zijn: de resources bestaan in Azure en u gebruikt ARM-sjablonen voor uw IaC. De Export template knop bevindt zich meestal onderaan de zijbalk in Azure Portal. De geëxporteerde ARM-sjabloon weerspiegelt de huidige statussen van de resource, inclusief de instellingen die zijn geconfigureerd door serviceconnector. Meestal moet u weten wat de resource-eigenschappen zijn om de geëxporteerde sjabloon te polijsten.

Schermopname van Azure Portal, het exporteren van een ARM-sjabloon van een web-app.

Verbindingslogica bouwen

Serviceconnector gebruiken en configuratie opslaan in App Configuration

Het gebruik van App Configuration om configuratie op te slaan ondersteunt natuurlijk IaC-scenario's. We raden u daarom aan deze methode te gebruiken om zo mogelijk uw IaC-sjabloon te bouwen.

Raadpleeg deze app-configuratiezelfstudie voor eenvoudige portal-instructies. Als u deze functie wilt toevoegen aan een bicep-bestand, voegt u de App Configuration-id toe in de nettolading van de 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
      }
    }
  }
}

Serviceconnector gebruiken

Het maken van verbindingen tussen de bron- en doelservice met behulp van serviceconnector is de voorkeurs- en aanbevolen benadering, mits de beperking van de serviceconnector geen negatieve invloed heeft op uw scenario. ServiceConnector vereenvoudigt de sjabloon en biedt aanvullende functies, zoals een validatie van de verbindingsstatus, die niet beschikbaar zijn bij het rechtstreeks bouwen van verbindingen via sjabloonlogica.

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

Voor de indelingen van eigenschappen en waarden die nodig zijn bij het maken van een serviceconnectorresource, controleert u hoe u de juiste parameters opgeeft. U kunt ook een VOORBEELD bekijken en een ARM-sjabloon downloaden voor referentie bij het maken van een serviceconnectorresource in Azure Portal.

Schermopname van Azure Portal, het exporteren van een ARM-sjabloon van een serviceconnectorresource.

Sjabloonlogica gebruiken

Voor de scenario's waarbij de IaC-beperking van de serviceconnector van belang is, kunt u rechtstreeks verbindingen maken met behulp van de sjabloonlogica. De volgende sjabloon is een voorbeeld van het verbinden van een opslagaccount met een web-app met behulp van een door het systeem toegewezen identiteit.

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

Wanneer u rechtstreeks verbindingen bouwt met behulp van sjabloonlogica, is het essentieel om te begrijpen wat Service Connector doet voor elk type verificatie, omdat de sjabloonlogica gelijk is aan de back-endbewerkingen van de Service Connector. In de volgende tabel ziet u de details van de bewerking die u moet vertalen naar sjabloonlogica voor elk type verificatietype.

Verificatietype Bewerkingen van serviceconnector
Geheim/verbindingsreeks - Configureer de verbindingsreeks van de doelservice in de app-instellingen van de bronservice
- Firewall configureren op de doelservice om de uitgaande IP-adressen van de bronservice toe te staan
Door het systeem toegewezen beheerde identiteit - Het eindpunt van de doelservice configureren in de app-instellingen van de bronservice
- Firewall configureren op de doelservice om de uitgaande IP-adressen van de bronservice toe te staan
- Door het systeem toegewezen identiteit inschakelen voor de bronservice
- Roltoewijzing maken voor de identiteit van de bronservice op de doelservice
Door de gebruiker toegewezen beheerde identiteit - Het eindpunt van de doelservice configureren in de app-instellingen van de bronservice
- Firewall configureren op de doelservice om de uitgaande IP-adressen van de bronservice toe te staan
- Door de gebruiker toegewezen identiteit binden aan de bronservice
- Roltoewijzing maken voor de door de gebruiker toegewezen identiteit in de doelservice
Service-principal - Het eindpunt van de doelservice configureren in de app-instellingen van de bronservice
- Configureer de appId en het geheim van de service-principal in de app-instellingen van de bronservice
- Firewall configureren op de doelservice om de uitgaande IP-adressen van de bronservice toe te staan
- Roltoewijzing maken voor de service-principal op de doelservice