Applicatie-specifieke Infrastructuur met Bicep en PowerShell

Armiek Assadourian

In de moderne softwareontwikkeling is het cruciaal dat development teams snel en efficiënt kunnen werken zonder afhankelijk te zijn van een centraal platformteam voor elke infrastructuurwijziging. Bij onze klanten hebben we het concept van "app specific infra" geïntroduceerd om dit mogelijk te maken. Dit betekent dat de centrale infrastructuur—zoals netwerken, containerregistries en centrale SQL-servers—door ons wordt beheerd met Terraform, terwijl development teams in staat zijn om hun eigen applicatie-specifieke infrastructuur te deployen via CI/CD pipelines en Infrastructure as Code (IaC) met Bicep modules.

In dit artikel duiken we diep in dit architectuurprincipe, geven we praktische voorbeelden van hoe dit kan worden ingericht met Bicep en Powershell, en bespreken we de voordelen van deze aanpak.

Het concept van applicatie-specifieke infrastructuur

Centrale VS. applicatie-specifieke infrastructuur
  • Centrale infrastructuur: Beheerd door het platformteam (CloudFulness) met Terraform. Dit omvat gedeelde resources zoals netwerken, centrale databases en containerregistries.
  • Applicatie-specifieke infrastructuur: Beheerd door development teams via CI/CD-pipelines en IaC. Teams kunnen hun eigen resources creëren, zoals individuele SQL-databases, storage accounts of Application Insights-instances.
Waarom deze scheiding?
  • Autonomie voor teams: Teams kunnen sneller itereren zonder afhankelijkheid van het platformteam.
  • Consistentie en beveiliging: Het platformteam behoudt controle over de centrale infrastructuur en Bicep modules, wat zorgt voor consistentie en naleving van beveiligingsstandaarden.

Praktisch voorbeeld: Deployment van applicatie-specifieke resources

De rol van Bicep

Bicep is een domeinspecifieke taal voor het definiëren van Azure-resources. Het vereenvoudigt de syntax van ARM-templates en maakt het schrijven en beheren van IaC eenvoudiger en leesbaarder. In Bicep declareer je welke Azure resources je applicatie nodig heeft.

De rol van Powershell

Powershell-scripts dienen als interface tussen de CI/CD-pipeline en de Bicep-modules. Vanuit hier wordt de deploment van Bicep resources gestart en worden bijvoorbeeld migraties uitgevoerd. Je kan hier complexe logica aan toevoegen wanneer dat nodig is.

Voorbeeld: Aanmaken van een Application Insights instance

Stap 1: Bicep module definiëren

We hebben een Bicep-module die verantwoordelijk is voor het aanmaken van een Application Insights-resource.

File: main.bicep

1param applicationName string
2param environment string
3module appInsights 'br:acr.azurecr.io/bicepModules/applicationInsights:2.1.6' = { 
4  name: '${applicationName}-appinsights'
5  params: {
6    applicationName: applicationName
7    environment: environment
8  }
9}
10
11output AppInsightsConnectionString string = appInsights.outputs.ConnectionString

module: Dit definieert een herbruikbare Bicep-module.

name: De naam van de deployment, samengesteld uit de applicatienaam.

params: De parameters die aan de module worden doorgegeven.

Stap 2: Powershell Interface ImplementerenHet Powershell-script fungeert als interface en wordt aangeroepen vanuit de CI/CD-pipeline.

1param 
2(
3    [Parameter(Mandatory, HelpMessage="Arguments in JSON format.")]
4    [String] $arguments, 
5
6    [Parameter(Mandatory, HelpMessage="Environment name")]
7    [String] $environment
8)
9
10# Converteer de JSON-argumenten naar een PowerShell-object
11$pipelineArgs = $arguments | ConvertFrom-Json
12
13# Haal parameters op uit de JSON
14$applicationName = $pipelineArgs.applicationName
15
16# Voer de Bicep-deployment uit
17$bicepOutput = az deployment group create `
18  --name "${applicationName}-deployment" `
19  --resource-group "rg-${environment}-${applicationName}" `
20  --template-file "main.bicep" `
21  --parameters applicationName=$applicationName environment=$environment
22
23Write-Host "##vso[task.setvariable variable=AppInsightsConnectionString;issecret=true]$output.AppInsightsConnectionString.value"

param: Definieert de parameters die het script accepteert.

$arguments: Een JSON-string met alle benodigde parameters.

$environment: De omgeving waarin gedeployed wordt (bijv. dev, test, prod).

az deployment group create: Azure CLI-commando om de deployment uit te voeren. Gebruik de output hiervan om variabelen in je Azure DevOps pipeline te krijgen.

Voordelen van deze aanpak

1. Snellere ontwikkeling en deployment

Teams kunnen zelfstandig infrastructuur deployen die specifiek is voor hun applicaties, wat de doorlooptijd van ontwikkeling tot productie verkort.

2. Consistentie en standaardisatie

Door gebruik te maken van vooraf gedefinieerde Bicep-modules, wordt consistentie gewaarborgd in de manier waarop resources worden gecreëerd.

3. Schaalbaarheid

Deze aanpak maakt het mogelijk om met meerdere teams en projecten te werken zonder dat het platformteam een bottleneck wordt.

4. Flexibiliteit

Teams kunnen hun infrastructuur aanpassen aan hun specifieke behoeften, zoals het configureren van specifieke monitoring of het instellen van bepaalde performance-instellingen.

5. Beveiliging en compliance

Het platformteam kan beveiligings- en compliance-eisen afdwingen in de Bicep-modules, waardoor alle gedeployde resources aan de standaarden voldoen. Door een specifieke set aan IAM rechten toe te kennen bepaalt het platform team wat er wel- en niet mogelijk is door development teams.

Toepassing bij Microservices

Bij het ontwikkelen van microservices is het essentieel dat elke service onafhankelijk kan worden ontwikkeld en gereleased. Met deze aanpak kunnen developmentteams resources creëren die specifiek voor hun microservices bedoeld zijn, zonder afhankelijk te worden van een centraal team.

Conclusie

Het concept van applicatie-specifieke infrastructuur biedt een krachtige manier om de efficiëntie en snelheid van development teams te verhogen. Door het gebruik van Bicep-modules en Powershell-scripts kunnen teams op een consistente en veilige manier hun eigen infrastructuur deployen, terwijl het platformteam controle houdt over de centrale infrastructuur.

Stel je vragen

Klaar voor transformatie?

We horen graag van je! Neem vandaag nog contact op.

info@cloudfulness.nl
Leigraafseweg 2, 6983 BP, Doesburg
0316 798 020