Delen via


Uw infrastructuur vertalen naar een IaC-sjabloon

Service Verbinding maken or helpt gebruikers hun rekenservices te 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 laten we zien 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 Service Verbinding maken or 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:

  • Service Verbinding maken or gebruiken en configuratie opslaan in App Configuration
  • Service Verbinding maken or 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 Verbinding maken or, 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 Service Verbinding maken or gebruiken en configuratie opslaan in App Configuration Heeft livecontrole op de cloudresources voordat live verkeer wordt toegestaan - Sjabloon is eenvoudig en leesbaar
- Service Verbinding maken or biedt extra waarde
- Er wordt geen IaC-probleem geïntroduceerd door Service Verbinding maken or
- Extra afhankelijkheid nodig om de configuratie van App Configuration te lezen
- Kosten voor het controleren van de liveness van cloudresources
2 Helemaal zelf ontwerpen Service Verbinding maken or gebruiken Heeft livecontrole op de cloudresources voordat live verkeer wordt toegestaan - Sjabloon is eenvoudig en leesbaar
- Service Verbinding maken or 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 - Service-Verbinding maken orfuncties zijn niet beschikbaar
4 Exporteren en polijsten Service Verbinding maken or 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
- Service Verbinding maken or biedt extra waarde
- Er wordt geen IaC-probleem geïntroduceerd door Service Verbinding maken or
- 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 Service Verbinding maken or gebruiken Heeft livecontrole op de cloudresources voordat live verkeer wordt toegestaan - Resources zijn precies hetzelfde als in de cloud
- Service Verbinding maken or 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
- Service-Verbinding maken orfuncties 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 behulp van Service Verbinding maken or en 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 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'
}

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 service Verbinding maken or. Meestal moet u weten wat de resource-eigenschappen zijn om de geëxporteerde sjabloon te polijsten.

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

Verbindingslogica bouwen

Service Verbinding maken or gebruiken en configuratie opslaan in App Configuration

Het gebruik van app-configuratie om configuratie op te slaan biedt natuurlijk ondersteuning voor 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 Verbinding maken 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
      }
    }
  }
}

Service Verbinding maken or gebruiken

Het maken van verbindingen tussen de bron- en doelservice met behulp van Service Verbinding maken or is de voorkeursoptie en wordt aanbevolen als de beperking van de service Verbinding maken or IaC niet van belang is voor uw scenario. Service Verbinding maken or maakt de sjabloon eenvoudiger en biedt ook aanvullende elementen, zoals de validatie van de verbindingsstatus, die u niet hebt als u rechtstreeks verbindingen maakt 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 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'
    }
  }
}

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

Schermopname van Azure Portal, arm-sjabloon van een serviceconnectorresource exporteren.

Sjabloonlogica gebruiken

Voor de scenario's waarin de Service Verbinding maken or IaC-beperking 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 van cruciaal belang om te begrijpen wat Service Verbinding maken or doet voor elk type verificatie, omdat de sjabloonlogica gelijk is aan de service-Verbinding maken or back-endbewerkingen. In de volgende tabel ziet u de details van de bewerking die u moet vertalen naar sjabloonlogica voor elk type verificatietype.

Verificatietype Service Verbinding maken orbewerkingen
Geheim/Verbinding maken iontekenreeks - 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