Forum Discussion
An automation and templating question with Azure Pipelines
How about this:
1. Synapse Workspace Automation
Use ARM templates or Bicep to define your Synapse workspace and its artifacts (pipelines, datasets, linked services, etc.).
• You can extract the workspace template via Synapse Studio > Manage > Workspace > Export template.
• Use the template-parameters-definition.json to expose environment-specific values like connection strings, URLs, etc.
• In your pipeline, use az deployment group create or New-AzResourceGroupDeployment to deploy the template with overridden parameters.
2. Templating Across Environments
To make this scalable:
• Create a parameter file per environment (e.g., dev.parameters.json, qa.parameters.json, etc.).
• Use pipeline variables or variable groups in Azure DevOps to inject values dynamically.
• Use YAML templates to reuse pipeline logic across environments.
parameters:
- name: environment
type: string
steps:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
templateLocation: 'Linked artifact'
csmFile: 'synapse-template.json'
csmParametersFile: '${{ parameters.environment }}.parameters.json'
3. SQL Pool & Stored Procedure Deployment
For database schema changes:
• Use SQL Server Data Tools (SSDT) or DACPACs to manage schema.
• Use SqlPackage.exe in your pipeline to deploy schema changes:
SqlPackage.exe /Action:Publish /SourceFile:MyDW.dacpac /TargetConnectionString:"..." /p:BlockOnPossibleDataLoss=false
• Set BlockOnPossibleDataLoss=false to avoid dropping columns with data—but use with caution.
Consider using Flyway or Liquibase if you want versioned migrations with rollback support.
4. Azure Functions Templating
Use Bicep or ARM templates to deploy Azure Functions with environment-specific settings:
• Define appSettings in your template and override them per environment.
• Use Key Vault references for secrets:
"AzureWebJobsStorage": "@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/storageConnection)"
5. Permissions & Access Control
Use role assignments in your templates or scripts:
• Assign Managed Identity of Azure Functions access to Blob, SQL, etc.
• Use az role assignment create or ARM roleAssignments to automate this.
{
"type": "Microsoft.Authorization/roleAssignments",
"properties": {
"roleDefinitionId": "...",
"principalId": "[reference(resourceId('Microsoft.Web/sites', parameters('functionAppName')), '2018-11-01', 'Full').identity.principalId]"
}
}