Come convertire l'infrastruttura in un modello IaC
Service Connessione or consente agli utenti di connettere i servizi di calcolo ai servizi di backup di destinazione in pochi clic o comandi. Quando si passa da una fase introduttiva a una fase di produzione, gli utenti devono anche eseguire la transizione dall'uso di configurazioni manuali all'uso di modelli IaC (Infrastructure as Code) nelle pipeline CI/CD. In questa guida viene illustrato come convertire i servizi di Azure connessi in modelli IaC.
Prerequisiti
- Questa guida presuppone che si siano a conoscenza delle limitazioni del Servizio Connessione or IaC.
Panoramica della soluzione
La conversione dell'infrastruttura in modelli IaC prevede in genere due parti principali: la logica per effettuare il provisioning dei servizi di origine e di destinazione e la logica per creare connessioni. Per implementare la logica per effettuare il provisioning dei servizi di origine e di destinazione, sono disponibili due opzioni:
- Creazione del modello da zero
- Esportazione del modello da Azure e perfezionamento
Per implementare la logica per creare connessioni, sono disponibili tre opzioni:
- Uso di Service Connessione or e archiviazione della configurazione in Configurazione app
- Uso di Service Connessione or nel modello
- Uso della logica del modello per configurare direttamente i servizi di origine e di destinazione
Le combinazioni di queste diverse opzioni possono produrre soluzioni diverse. A causa delle limitazioni IaC in Service Connessione or, è consigliabile implementare le soluzioni seguenti nell'ordine presentato di seguito. Per applicare queste soluzioni, è necessario comprendere gli strumenti IaC e la grammatica di creazione di modelli.
Soluzione | Effettuare il provisioning dell'origine e della destinazione | Creare una connessione | Scenario applicabile | Vantaggi | Svantaggi |
---|---|---|---|---|---|
1 | Creazione da zero | Usare service Connessione or e archiviare la configurazione in Configurazione app | Verifica dell'attività sulle risorse cloud prima di consentire il traffico in tempo reale | - Il modello è semplice e leggibile - Service Connessione or porta valore aggiuntivo - Nessun problema IaC introdotto dal Connessione or del servizio |
- È necessaria una dipendenza aggiuntiva per leggere la configurazione da Configurazione app - Costo per controllare la disponibilità delle risorse cloud |
2 | Creazione da zero | Usare service Connessione or | Verifica dell'attività sulle risorse cloud prima di consentire il traffico in tempo reale | - Il modello è semplice e leggibile - Service Connessione or porta valore aggiuntivo |
- Costo per controllare la disponibilità delle risorse cloud |
3 | Creazione da zero | Configurare i servizi di origine e di destinazione direttamente nel modello | Nessun controllo di attività sulle risorse cloud | - Il modello è semplice e leggibile | - Le funzionalità del Connessione or del servizio non sono disponibili |
4 | Esportazione e polacco | Usare service Connessione or e archiviare la configurazione in Configurazione app | Verifica dell'attività sulle risorse cloud prima di consentire il traffico in tempo reale | - Le risorse sono esattamente le stesse del cloud - Service Connessione or porta valore aggiuntivo - Nessun problema IaC introdotto dal Connessione or del servizio |
- È necessaria una dipendenza aggiuntiva per leggere la configurazione da Configurazione app - Costo per controllare la disponibilità delle risorse cloud - Supporta solo i modelli di Resource Manager - Sforzi necessari per comprendere e perfezionare il modello |
5 | Esportazione e polacco | Usare service Connessione or | Verifica dell'attività sulle risorse cloud prima di consentire il traffico in tempo reale | - Le risorse sono esattamente le stesse del cloud - Service Connessione or porta valore aggiuntivo |
- Costo per controllare la disponibilità delle risorse cloud - Supporta solo i modelli di Resource Manager - Sforzi necessari per comprendere e perfezionare il modello |
6 | Esportazione e polacco | Configurare i servizi di origine e di destinazione direttamente nel modello | Nessun controllo di attività sulle risorse cloud | - Le risorse sono esattamente le stesse del cloud | - Supporta solo il modello di Resource Manager - Sforzi per comprendere e perfezionare il modello - Le funzionalità del Connessione or del servizio non sono disponibili |
Creazione di modelli
Le sezioni seguenti illustrano come creare un'app Web e un account di archiviazione e connetterli con un'identità assegnata dal sistema usando Bicep. Illustra come eseguire questa operazione usando service Connessione or e usando la logica del modello.
Effettuare il provisioning dei servizi di origine e di destinazione
Creazione da zero
La creazione del modello da zero è il modo preferito e consigliato per effettuare il provisioning dei servizi di origine e di destinazione, perché è facile iniziare e rendere il modello semplice e leggibile. Di seguito è riportato un esempio che usa un set minimo di parametri per creare un'app Web e un account di archiviazione.
// 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'
}
Esportazione e polacco
Se le risorse di cui si sta eseguendo il provisioning sono esattamente le stesse di quelle disponibili nel cloud, l'esportazione del modello da Azure potrebbe essere un'altra opzione. Le due impostazioni locali di questo approccio sono: le risorse sono presenti in Azure e si usano i modelli di Resource Manager per l'IaC. Il Export template
pulsante si trova in genere nella parte inferiore della barra laterale in portale di Azure. Il modello arm esportato riflette gli stati correnti della risorsa, incluse le impostazioni configurate da Service Connessione or. In genere è necessario conoscere le proprietà delle risorse per completare il modello esportato.
Creare la logica di connessione
Uso di Service Connessione or e archiviazione della configurazione in Configurazione app
L'uso del Configurazione app per archiviare la configurazione supporta naturalmente gli scenari IaC. È quindi consigliabile usare questo metodo per compilare il modello IaC, se possibile.
Per istruzioni semplici sul portale, è possibile fare riferimento a questa esercitazione Configurazione app. Per aggiungere questa funzionalità in un file bicep, aggiungere l'ID Configurazione app nel payload del Connessione or del servizio.
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
}
}
}
}
Uso di Service Connessione or
La creazione di connessioni tra il servizio di origine e quello di destinazione tramite Service Connessione or è il modo consigliato e consigliato se la limitazione IaC del servizio Connessione or non è rilevante per lo scenario in uso. Service Connessione or semplifica il modello e fornisce anche elementi aggiuntivi, ad esempio la convalida dell'integrità della connessione, che non saranno disponibili se si creano connessioni direttamente tramite la logica del modello.
// 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'
}
}
}
Per i formati di proprietà e valori necessari durante la creazione di una risorsa di Connessione or del servizio, verificare come specificare i parametri corretti. È anche possibile visualizzare in anteprima e scaricare un modello di Resource Manager per riferimento durante la creazione di una risorsa Connessione or del servizio nella portale di Azure.
Uso della logica del modello
Per gli scenari in cui la limitazione IaC di Service Connessione or è importante, prendere in considerazione la creazione di connessioni usando direttamente la logica del modello. Il modello seguente illustra come connettere un account di archiviazione a un'app Web usando un'identità assegnata dal sistema.
// 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
}
}
Quando si creano connessioni usando direttamente la logica del modello, è fondamentale comprendere le operazioni di service Connessione or per ogni tipo di autenticazione, perché la logica del modello equivale alle operazioni back-end di service Connessione or. Nella tabella seguente vengono illustrati i dettagli dell'operazione che è necessario convertire nella logica del modello per ogni tipo di autenticazione.
Tipo di autenticazione | Operazioni di service Connessione or |
---|---|
Stringa secret/Connessione ion | - Configurare il stringa di connessione del servizio di destinazione nelle impostazioni dell'app del servizio di origine - Configurare il firewall nel servizio di destinazione per consentire gli indirizzi IP in uscita del servizio di origine |
Identità gestita assegnata dal sistema | - Configurare l'endpoint del servizio di destinazione nelle impostazioni dell'app del servizio di origine - Configurare il firewall nel servizio di destinazione per consentire gli indirizzi IP in uscita del servizio di origine - Abilitare l'identità assegnata dal sistema nel servizio di origine - Creare un'assegnazione di ruolo per l'identità del servizio di origine nel servizio di destinazione |
Identità gestita assegnata dall'utente | - Configurare l'endpoint del servizio di destinazione nelle impostazioni dell'app del servizio di origine - Configurare il firewall nel servizio di destinazione per consentire gli indirizzi IP in uscita del servizio di origine - Associare l'identità assegnata dall'utente al servizio di origine - Creare un'assegnazione di ruolo per l'identità assegnata dall'utente nel servizio di destinazione |
Entità servizio | - Configurare l'endpoint del servizio di destinazione nelle impostazioni dell'app del servizio di origine - Configurare l'appId e il segreto dell'entità servizio nelle impostazioni dell'app del servizio di origine - Configurare il firewall nel servizio di destinazione per consentire gli indirizzi IP in uscita del servizio di origine - Creare un'assegnazione di ruolo per l'entità servizio nel servizio di destinazione |