Platform Engineering and Infrastructure as Code on Microsoft Azure
Platform Engineering and Infrastructure as Code on Microsoft Azure
Azure offers two credible routes to infrastructure as code and two credible routes to CI/CD, which is why most Azure platform work starts with a decision rather than a build. Celestique Cloud helps you choose between Bicep and Terraform, and between Azure DevOps and GitHub, then builds the modules, pipelines and policy guardrails that make the choice hold. Identity, approval and audit run through Microsoft Entra ID, which is usually the directory your business already governs.
Why Azure
When this is the right platform.
- Where Microsoft 365 is already in place, Microsoft Entra ID is the directory the business governs day to day, so pipeline permissions, deployment approvals and access reviews can sit on groups it already owns rather than on a second identity system nobody reviews.
- Bicep is first-party, has no state file to protect and previews changes with what-if, which shortens the learning curve for teams writing infrastructure as code for the first time.
- Azure Policy applies the same rule at management group and subscription level that the pipeline checks at pull request, so the control still holds when a change arrives outside the pipeline.
- Azure DevOps and GitHub can coexist during a transition. Teams embedded in Azure Repos and Azure Pipelines keep working while new services adopt GitHub Actions, sharing one module library and one policy set.
- Azure Container Apps carries services that do not justify a cluster and Azure Kubernetes Service is there for the ones that do, so the runtime decision is per workload rather than all or nothing.
Where it is less suited
We would rather say this now than after a migration.
- Bicep only targets Azure. If you run workloads on another cloud, or manage SaaS platforms that publish Terraform providers, standardising on Terraform avoids maintaining two module libraries, at the cost of running and protecting state.
- Azure DevOps and GitHub overlap heavily. Running both indefinitely means two permission models, two audit trails and two sets of runners to patch, so it is worth picking a destination and setting a date.
- Azure Kubernetes Service upgrades, node image refreshes and add-on support windows are continuing work. A managed control plane does not mean a maintenance-free cluster, and the cadence surprises teams that budgeted for none.
- Azure Policy is capable but awkward to test, and remediation across a large estate evaluates slowly. Proving a policy in a sandbox subscription before assigning it broadly is an extra step worth taking.
Business outcomes
What Azure delivers here.
- One way to deploy into Azure
- Every subscription receives change through the same pipeline and the same module set, so an engineer moving between products does not relearn deployment. We measure the share of Azure resource changes applied through a pipeline rather than the portal, read from subscription activity logs.
- Environments generated rather than assembled
- Development, test and production come from the same Bicep or Terraform modules with different parameter files, so a fix proven in test behaves the same in production. We measure drift findings per environment per month and track how many are closed in code.
- Guardrails that hold outside the pipeline
- Compliance and risk owners get assurance that a resource created by hand still meets the standard, because Azure Policy evaluates it regardless of how it arrived. We measure policy compliance by subscription and report it monthly with the exemptions listed.
- Deployment evidence without the paperwork
- Commit, plan, approver and applied result are captured against every production release, and Application Insights shows the deployment alongside the application behaviour that followed it. We measure the proportion of production changes with a complete record.
- New services start ready to deploy
- A team starts from a template repository with pipeline, policy checks, registry access and Key Vault wiring already connected, rather than waiting on a platform ticket. We measure elapsed days from repository creation to first production deployment.
Common client problems
What we usually hear first.
We have Azure DevOps for some teams and GitHub for others, and no idea which one is the standard.
We assess where each is genuinely embedded, what it would cost to move and what it costs to keep both, then set a target and a migration order instead of leaving the question open. A shared Bicep or Terraform module library and a shared policy set mean both toolchains produce the same result while the transition runs.
Half our Azure resources were created in the portal and we cannot tell which ones.
We reconcile the running estate against the code base, then import or rebuild in priority order, starting with production and anything holding data. What stays outside code is recorded as an exception with an owner and a review date rather than quietly ignored.
Bicep or Terraform? We have been arguing about it for six months.
We make the call against your real constraints: whether the estate is Azure-only, whether Terraform is already in use elsewhere, who will maintain the modules and whether managing state is work you want. The decision is written down with its trade-offs so it does not reopen every quarter.
Our pipeline service principal has owner rights and a secret that expired last month.
We move pipelines to workload identity federation so there is no secret to expire, then scope each deployment identity to the subscription, resource group and role it actually needs. Standing high-privilege access is replaced with elevation that is requested, time-bound and logged.
Our AKS cluster was set up two years ago and nobody wants to touch it.
We bring the cluster configuration into code, establish a supported upgrade path and rehearse the upgrade on a non-production cluster before production is touched. Where a workload never needed Kubernetes, we assess whether Azure Container Apps removes the maintenance entirely.
How we deliver
Our Azure delivery approach.
- 01
Assessment and advisory
Azure platform work usually stalls on unresolved decisions rather than on build effort. We resolve them with evidence taken from your own subscriptions.
- Compare Bicep and Terraform against your estate: whether it is Azure-only, who maintains the modules, existing Terraform investment and your appetite for protecting state.
- Compare Azure DevOps and GitHub against how your teams actually work, including where repositories, pipelines and boards are already embedded and what a move would break.
- Read Azure activity logs to establish how many resource changes currently arrive outside a pipeline, broken down by subscription and by team.
- Reconcile deployed resources against the code base and list what is unmanaged, duplicated or orphaned, with an owner assigned to each item.
- Review management group and subscription structure, naming, tagging and existing Azure Policy assignments against what the pipeline will need to enforce.
- Produce a sequenced plan with effort, dependencies, commercial case and the measures that will define success.
- 02
Architecture and implementation
We build the module library, the pipelines and the runtime foundations together, proving each on a real workload before it becomes the standard.
- Build a versioned Bicep or Terraform module library published to a registry, with pinned versions and a tested upgrade path for the teams consuming it.
- Configure remote state with locking, restricted access and a documented, rehearsed recovery procedure wherever Terraform is used.
- Build pipelines in Azure Pipelines or GitHub Actions that run what-if or plan, publish the output for review, gate on environment approval, then apply.
- Stand up Azure Container Registry with tag locking, retention rules and Microsoft Defender for Cloud image scanning, then deploy to Azure Kubernetes Service or Azure Container Apps by digest rather than by floating tag.
- Define Azure Policy as code alongside the infrastructure modules, so a control ships with the resource pattern it governs instead of arriving later.
- Rebuild a non-production environment into an empty subscription straight from the repository to prove the platform, and record the elapsed time.
- 03
Security and governance
Pipeline identity and secret handling are where Azure delivery platforms most often carry avoidable risk. We remove the standing credentials first, then tighten scope.
- Move pipelines to Microsoft Entra workload identity federation, so no client secret or certificate is stored in Azure DevOps or GitHub.
- Scope each deployment identity to the subscription, resource group and role it needs, and remove inherited owner assignments left over from initial setup.
- Store application secrets, keys and certificates in Azure Key Vault, reference them at run time, subscribe to its near-expiry events and schedule the secret rotation the vault does not perform on its own.
- Assign Azure Policy at management group level with deny and audit effects agreed in advance, and prove each policy in a sandbox subscription before promotion.
- Enforce branch protection, mandatory review and protected environment approvals, so a release to production always requires a second person.
- Map Azure Policy compliance and pipeline controls to the framework your customers ask about, such as the Essential Eight, to support your assurance work. We help you align to a framework rather than certify against one.
- 04
Adoption and enablement
The platform succeeds when a delivery team can create a new service without asking permission and without asking how. We build that path, then teach it.
- Publish a template repository containing the pipeline, module references, policy checks, Azure Container Registry access and Key Vault wiring, ready to clone.
- Pair-build the first two or three service pipelines with your engineers, so the patterns are learned during the build rather than read afterwards.
- Run working sessions on reading what-if and plan output, so the people approving a deployment understand what they are approving.
- Write runbooks for failed deployments, stuck state locks, rollback in Azure Container Apps and AKS, and revoked or expired federated credentials.
- Hand over with your team performing a production deployment and a subscription rebuild while we observe and only advise.
- Track the share of Azure resource changes arriving through the pipeline and report it against the baseline captured during assessment.
- 05
Managed service continuation
Under an agreed managed scope we keep the Azure platform current, because version pins, policy exemptions and cluster support windows all expire on somebody else's schedule.
- Track AKS version support windows, node image releases and add-on compatibility, scheduling upgrades before a version leaves standard support.
- Keep Bicep, Terraform provider, module and container base image versions current, tested in a lower environment before production.
- Run scheduled drift detection across subscriptions and either return the change to code or record an accepted exception with an owner.
- Review Azure Policy compliance and exemptions monthly, closing the temporary exemptions that have outlived their reason.
- Track pipeline duration and failure rate in Azure DevOps pipeline analytics or GitHub Actions run history and act on the recurring failures instead of retrying them, using Application Insights to catch releases that degraded the workload after a successful deploy.
- Report Azure cost by environment and workload, including non-production resources that could be scheduled off, resized or retired.
Technology reference
The Microsoft Azure services we build with.
A reference architecture view of the platform services used in this domain, and what each one does in the design.
Source control and delivery pipelines
GitHubHosts repositories, pull requests, branch protection and required review for teams standardising on GitHub.
- GitHub ActionsRuns the plan, review, approval and apply workflow, with environment protection rules gating production.
Azure DevOpsHosts repositories, pipelines and work tracking for teams already embedded in the Microsoft toolchain.
- Azure ReposProvides Git hosting with branch policy and required reviewers where Azure DevOps is the standard.
- Azure PipelinesRuns multi-stage deployment pipelines with environment approvals and deployment history per stage.
Infrastructure as code
BicepDeclares Azure resources in a first-party language with what-if previews and no state file to protect.
TerraformDeclares infrastructure where the estate reaches beyond Azure or an existing Terraform investment should be extended.
Build artefacts and runtime
Azure Container RegistryStores container images and OCI artefacts with tag locking, retention rules and pull identity scoped through Microsoft Entra ID. Image vulnerability scanning comes from Microsoft Defender for Cloud rather than the registry itself.
Azure Kubernetes ServiceRuns container workloads that need orchestration, custom networking or a large service footprint.
Azure Container AppsRuns container services that need scale to zero and managed ingress without cluster maintenance.
Guardrails and secrets
Azure PolicyEnforces resource standards at management group and subscription level and reports compliance independently of the pipeline.
Azure Key VaultHolds secrets, keys and certificates referenced at deploy and run time, with rotation and expiry alerting.
Deployment telemetry
Azure MonitorCollects platform metrics, logs and alerts, including pipeline duration, failure rate and resource health signals.
Application InsightsCorrelates a deployment with the application behaviour that followed it, so a regression is traced back to a release.
Product names and icons are trademarks of Microsoft and Amazon Web Services, reproduced unmodified from their official architecture icon libraries to identify the technologies used in these architectures. Their presence does not indicate partnership, certification or endorsement by either vendor.
Related industries
Where this work has the most leverage.
Professional Services
Governed enterprise search, document intelligence and secure copilots that respect matter confidentiality and conflict boundaries.
Construction and Property
Tender intelligence, addenda tracking and project reporting that keep estimators and contract administrators ahead of the documents instead of buried in them.
Manufacturing and Distribution
Demand and inventory intelligence, production analytics and supplier automation built on data your planners already trust.
Free discovery workshop
Start with a platform engineering and iac discovery workshop.
Bring one challenge. We will assess whether Microsoft Azure is the right platform for it before recommending anything.