Infrastructure

Azure resources

Azure infrastructure is managed by IaC (Infrastructure as Code). Bicep files defined in the infra/bicep folder manage Blast Planning specifc resources referencing resrouces on the Shared Development Platform when necessary.

Infrastructure strinctly IaC only. No portal click-ops allowed. This treats infrastructure with the same operational rigor as source code. It enhances cloud infrastructure management by various means including preventing configuration drift, auditability, disaster recovery and allowing peer review for proposed changes.

The entrypoint is infra/bicep/environments/dev/main.bicep, parameterized by main.dev.bicepparam. The infrastructure pipeline deploys that file to australiaeast.

infra/bicep/
  environments/dev/
    main.bicep
    main.dev.bicepparam
  modules/
    appservice.bicep
    cosmos-container.bicep
    servicebus.bicep
    storage-account.bicep

main.bicep creates the application resource group for this project and the modules below. It also declares the Shared Development Platform resources as existing and wires their names, IDs, and connection strings into those modules. In this way the bicep files in this proejct are responsible for the resources “owned” by this project only while deploying to resources owned by the Shared Development Platform.

Managed by this project

These resources are implemented in infra/bicep and live in rg-event-sourcing-dev, except the Cosmos container and Service Bus topic, which are created on the shared account and namespace in rg-platform-dev.

Provisioned with Bicep from infra/bicep .

Service Name Tier Purpose Bicep
Resource group rg-event-sourcing-dev Subscription Application-owned resources environments/dev/main.bicep
App Service (API) api-adt-blastplanning-dev Shared Linux plan Blast Planning API (.NET 10) modules/appservice.bicep
App Service (UI) web-adt-blastplanning-dev Shared Linux plan Angular UI (Node 22) modules/appservice.bicep
Function App func-adt-blastplanning-dev Shared Linux plan Projection worker (.NET isolated 10) modules/appservice.bicep
Storage account stadtblastplanningdev Standard_LRS Function AzureWebJobsStorage modules/storage-account.bicep
Cosmos DB container blastplanning-events Shared account Event store, partition key /streamId modules/cosmos-container.bicep
Service Bus topic domain-events Shared namespace Domain events for the projection worker modules/servicebus.bicep
Service Bus subscription blast-plan-projections Shared namespace Projection consumer on domain-events modules/servicebus.bicep

Referenced from the shared platform

Declared as existing in environments/dev/main.bicep. This project consumes them. It does not create or set their SKUs.

Referenced as existing resources in environments/dev/main.bicep. This project does not create them.

Service Name Tier Purpose Bicep
Resource group rg-platform-dev Shared Shared platform resource group environments/dev/main.bicep
App Service Plan asp-platform-dev Shared Linux plan hosting the API, UI, and Function environments/dev/main.bicep
Application Insights appi-platform-dev Shared Traces, metrics, and exceptions environments/dev/main.bicep
Azure SQL server sql-adt-platform-dev Shared Logical server for the read-model database environments/dev/main.bicep
Azure SQL database ReferenceProjectsDb Shared Blast-plan projections environments/dev/main.bicep
Cosmos DB account cosmos-adt-platform-dev Shared Event-store account environments/dev/main.bicep
Cosmos DB database ReferenceProjects Shared Event-store database environments/dev/main.bicep
Service Bus namespace sb-adt-platform-dev Shared Namespace for domain-events environments/dev/main.bicep