Azure · Kiro AI · Bicep · Azure OpenAI · HIPAA

EARE on Azure — Full Production
Deployment Generated by AI

The Azure parallel of the EARE deployment — same product, different cloud. Kiro generated a complete Azure-native stack: Bicep modules, HIPAA-compliant VNet, Durable Functions ETL, Cosmos DB graph and vector databases, Container Apps MCP servers, Azure OpenAI multi-agent orchestration, and five interactive dashboards — including a zero-dependency demo mode deployable in minutes.

10
Bicep modules
5
Azure OpenAI agents
2
Container Apps
6
HTML dashboards
7
Managed Identities
0
Secrets in code

Same spec pattern, different cloud — both generated by Kiro

EARE on Azure is the direct parallel to the AWS deployment, designed and generated simultaneously from the same product spec pattern applied to Azure-native services. The workflow is identical: write a precise architecture design spec; Kiro generates the implementation. The cloud changes; the approach doesn't.

Kiro · Spec-Driven AI Development

The Azure design spec described 10 Bicep modules, a 4-subnet VNet with Private Endpoints and Private DNS Zones, Durable Functions ETL orchestration, Cosmos DB multi-API (Gremlin + NoSQL on the same account), Azure AI Search with HNSW vector search, Container Apps MCP servers, and an Azure OpenAI function-calling agent swarm. Kiro generated all of it — Bicep templates, Python Azure Functions, container Dockerfiles, deployment scripts, and a fully self-contained demo mode.

The key insight: specifying architecture precisely is now the engineering work. Kiro handles the implementation. This deployment has zero manually authored Bicep, zero hand-written IAM/RBAC, and zero custom observability wiring — all generated from the spec with correct Managed Identity assignments, Private Endpoint configurations, and Application Insights instrumentation.

🏗️

Bicep Modules (10)

networking, data-ingestion, etl, masking, databases, compute, cdn, ai, security, monitoring — plus main.bicep orchestrator with parameter files for dev/staging/prod.

Bicep · No state file
🌐

4-Subnet HIPAA VNet

Public, private compute, private database, private integration subnets. 6 Private Endpoints with Private DNS Zones. NSG Flow Logs. HIPAA=true tags on all resources.

Azure Networking

Azure Functions (Python 3.11)

API handlers (5 routes), file validator (Event Grid trigger), Cosmos loader, vector indexer — all with VNet integration, system-assigned Managed Identity, Application Insights.

Python 3.11 · Durable
🔄

Durable Functions ETL

12-state normalization orchestration in Python. Azure Data Factory for CSV/JSON. AI Document Intelligence for PDFs. Microsoft Purview + AI Health Insights for PHI masking.

Durable Functions
🗄️

Cosmos DB Multi-API

Single Cosmos DB account hosting both Gremlin API (dependency graph) and NoSQL API (recommendations + reviews). Private Endpoint, continuous backup, autoscale throughput.

Cosmos DB Gremlin + NoSQL
🔍

Azure AI Search (Vector)

HNSW vector search with 1536-dim text-embedding-ada-002 embeddings. 3 indices (procurement, architecture, market-intel). Private Endpoint, RBAC-controlled access.

Azure AI Search
🐳

Container Apps MCP Servers

Graph MCP (Gremlin → 4 tools) and Vector MCP (AI Search → 4 tools) on Azure Container Apps. Private ACR, VNet-integrated environment, 1–3 replica autoscale.

Container Apps · ACR
🤖

Azure OpenAI Agent Swarm

GPT-4o Orchestrator + 4 specialist tool groups + Synthesizer using Azure OpenAI function calling. Private Endpoint, Managed Identity auth, Cognitive Services OpenAI User role.

Azure OpenAI · GPT-4o
🔐

7 Managed Identities + RBAC

System-assigned and user-assigned Managed Identities replace all service principal credentials. Explicit Azure RBAC role assignments per identity. Zero secrets in code.

Managed Identity · RBAC
🎪

Self-Contained Demo Mode

Separate demo/ folder with static JSON data, localStorage HITL persistence, and a Digital Twin upsell preview. Deployable in minutes to Blob Static Website — no backend needed.

Zero-dependency demo

Every AWS service mapped to its Azure equivalent — and why

The Azure deployment is architecturally identical to the AWS version — same pipeline stages, same agent pattern, same dashboard structure. The service choices follow Azure Well-Architected Framework principles, not just direct substitution.

AWS ServiceAzure EquivalentKey Rationale
CloudFormation (nested stacks)Azure Bicep (modules)Native IaC, no state file, cleaner syntax, instant support for new resource types
VPC + Security Groups + VPC EndpointsVNet + NSGs + Private Endpoints + Private DNS ZonesAzure uses DNS-based private endpoint resolution — requires Private DNS Zone per service
LambdaAzure Functions (Python 3.11)Direct equivalent; VNet integration via Premium plan for production
Step FunctionsAzure Durable FunctionsCode-first orchestration in Python; fan-out/fan-in; native retry; same runtime as other functions
Glue DataBrewAzure Data Factory (data flows)Managed ETL; visual designer; managed VNet integration for secure data movement
Amazon TextractAzure AI Document IntelligencePrebuilt-read model; Private Endpoint in integration subnet
Amazon MacieMicrosoft PurviewData estate scanning and PHI/PII classification across Blob Storage
Amazon Comprehend MedicalAzure AI Health InsightsDirect equivalent for PHI entity detection in healthcare text
Amazon Neptune (Gremlin)Cosmos DB Gremlin APIManaged graph DB; same Gremlin queries; no self-managed HA; 99.999% SLA
OpenSearch Serverless (vectors)Azure AI Search (vector)Managed HNSW; RBAC-native; no capacity planning; Azure-integrated auth
DynamoDBCosmos DB NoSQL APISame Cosmos DB account as Gremlin — one managed service, two APIs
ECS FargateAzure Container AppsServerless containers; built-in scaling; VNet integration; no cluster management
Amazon Bedrock AgentsAzure OpenAI (function calling)GPT-4o with tool use; same multi-agent pattern; Private Endpoint; Managed Identity auth
Bedrock Titan Embeddingstext-embedding-ada-002 / text-embedding-3-large1536 or 3072 dimensions; configurable via EMBEDDING_MODEL env var
IAM RolesManaged Identities + Azure RBACNo credential rotation; no leaked service principal keys; role assignments in Bicep
CloudFront + S3 Static SiteAzure Front Door + Blob Static WebsiteFront Door includes WAF, rate limiting, managed HTTPS — CDN classic is being deprecated
Secrets ManagerAzure Key Vault (Private Endpoint)Soft delete + purge protection; accessed via Private Endpoint only; RBAC-controlled
CloudWatch Logs + AlarmsLog Analytics + Application Insights + Monitor AlertsApplication Insights provides distributed tracing across Functions and Container Apps
SNSAzure Monitor Action GroupEmail/webhook alert actions; integrated with all Azure Monitor alert rules

4-subnet VNet, Private Endpoints throughout, zero public database exposure

Edge & Frontend
Public-facing
Azure Front Door Standard + WAF WAF: Microsoft_DefaultRuleSet 2.1 Rate limit: 1000 req/min per IP Azure API Management (Consumption) Blob Static Website ($web container) config.js template → APIM URL injection
Networking (VNet)
HIPAA-compliant
10.0.0.0/16 VNet · 4 subnets · 2 NSGs Public 10.0.1.0/24 — NAT Gateway Compute 10.0.2.0/24 — Functions, Container Apps, OpenAI Database 10.0.3.0/24 — Cosmos DB, AI Search Integration 10.0.4.0/24 — ADF, AI Document Intelligence 6 Private Endpoints + Private DNS Zones NSG Flow Logs → Log Analytics (90-day) HIPAA: true tags on all resources
Ingestion & ETL
Event Grid → Durable
Storage Account (GRS prod / LRS dev) · soft delete 30d raw/ normalized/ masked/ quarantine/ masking-audit/ Event Grid → file_validator Function (BlobCreated on raw/) Durable Functions 12-state orchestration Azure Data Factory — CSV/JSON data flows AI Document Intelligence — PDF prebuilt-read Microsoft Purview — PHI scan on normalized/ Azure AI Health Insights — entity detection Deterministic masking: [MASKED_{type}_{sha256[:8]}]
Databases
Single Cosmos account
Cosmos DB — Gremlin API: dependencies graph, partition /application_id Cosmos DB — NoSQL API: recommendations + reviews containers Both APIs on one account — one Private Endpoint, one managed backup Azure AI Search: 3 vector indices (procurement, architecture, market-intel) HNSW: m=4, efConstruction=400, efSearch=500, cosine metric All in database subnet — no public access
MCP Servers
Container Apps
mcp-graph: 4 Gremlin tools — profile, deps, blast radius, cycles mcp-vector: 4 AI Search tools — contract/arch/market search + chunk get Private ACR (admin disabled — MI pull) VNet-integrated Container Apps Environment 0.5 vCPU / 1.0 GiB · 1–3 replicas autoscale Read-only RBAC — Cosmos DB Data Reader / Search Index Data Reader
AI Agent Swarm
Azure OpenAI
Azure OpenAI: GPT-4o (reasoning) + text-embedding-ada-002 (1536-dim) Orchestrator → 4 specialist tool groups → Synthesizer Function calling maps tool groups to MCP server endpoints Private Endpoint in compute subnet Managed Identity: Cognitive Services OpenAI User role Output → Cosmos DB NoSQL recommendations container
Observability
Log Analytics + AppInsights
Log Analytics Workspace (30d dev / 90d prod) Application Insights — distributed tracing across Functions + Container Apps Azure Monitor alert rules: Function errors, Durable failures, Cosmos RU throttle, API 5xx, ingestion staleness Action Group — email notifications Structured JSON logs: correlation_id, component, operation, duration_ms

Five phases — Blob upload to AI recommendation

1
Ingestion — Event Grid triggers validation
Data engineer uploads to raw/{date}/{dimension}/. Event Grid fires a BlobCreated event filtered to the raw/ prefix. The validator Function checks file extension and dimension name. Valid → Durable Functions orchestration starts. Invalid → quarantine + Action Group alert.
Blob StorageEvent Gridfile_validator FunctionAction Group on failure
2
Normalization — Durable Functions + ADF + AI Document Intelligence
12-state Durable orchestrator handles file type branching. CSV/JSON → Azure Data Factory managed data flows (configurable delimiters, type inference). PDFs → AI Document Intelligence prebuilt-read model for text extraction, then 512-token chunking with 50-token overlap. Output written to normalized/.
Durable FunctionsAzure Data FactoryAI Document Intelligence
3
PHI Masking — Purview scan + AI Health Insights + deterministic tokens
Microsoft Purview scans normalized files for PHI/PII. Azure AI Health Insights detects entity types (NAME, ADDRESS, DATE, ID, AGE, PHONE, EMAIL). High-severity findings halt processing and route to review-required/. Passed files receive deterministic SHA-256 token masking — same input always produces the same token for referential integrity across all files.
PurviewAI Health Insights[MASKED_{type}_{sha256[:8]}]masking-audit/ log per file
4
Database loading — dimension-routed to graph or vector
Durable routes by dimension: dependency data → Cosmos DB Gremlin loader (Gremlin edges); procurement/architecture PDFs → Azure OpenAI embeddings → AI Search indexing; CMDB → both. All traffic stays in the VNet via Private Endpoints and Private DNS Zone resolution — zero public internet database access.
Cosmos DB GremlinAzure AI Searchtext-embedding-ada-002Private Endpoints throughout
5
AI analysis — GPT-4o function calling swarm produces 6R recommendations
Orchestrator (GPT-4o) iterates the application backlog. Telemetry and Procurement tool groups run in parallel; Dependency and Provisioning run sequentially. All tool calls map to MCP server endpoints on Container Apps. Synthesizer writes confidence score, 6R recommendation, ROI projection, and missing intelligence list to Cosmos DB NoSQL — surfaced through APIM → dashboard.
Azure OpenAI GPT-4o4 Specialist Tool GroupsSynthesizerCosmos DB NoSQL

GPT-4o function calling — same agent pattern as AWS, Azure-native auth

Agent / Tool GroupMCP ServerTools CalledExecution
Orchestrator Delegates to all tool groups, collects outputs for Synthesizer GPT-4o · 4096 tokens · 30s timeout per tool group
Telemetry Tool Group Graph MCP (Container Apps) get_application_profile, get_dependencies Parallel with Procurement
Dependency Tool Group Graph MCP (Container Apps) get_dependencies, get_blast_radius, detect_circular_dependencies Sequential — after Telemetry
Procurement Tool Group Vector MCP (Container Apps) search_contracts, search_market_intel Parallel with Telemetry
Provisioning Tool Group Graph MCP (Container Apps) get_application_profile (CMDB cross-ref) Sequential — after Dependency
Synthesizer Aggregates all tool group outputs Final step → Cosmos DB NoSQL write

Managed Identities replace all secrets — RBAC generated from spec

Kiro generated 7 Managed Identities (system-assigned and user-assigned) with explicit Azure RBAC role assignments scoped to the minimum required resources. No service principal secrets, no credential rotation, no risk of key leakage. All identity-to-role mappings are declared in security.bicep and applied at deploy time.

IdentityRBAC Roles Assigned
functions-identityCosmos DB Data Contributor (recommendations/reviews), Cosmos DB Data Reader (Gremlin), Storage Blob Data Reader, KV Secrets User, Cognitive Services OpenAI User
ingestion-identityStorage Blob Data Contributor (ingestion only), Key Vault Secrets User
etl-identityStorage Blob Data Reader (masked/ only), Cosmos DB Data Contributor (Gremlin write), Search Index Data Contributor, Cognitive Services OpenAI User, KV Secrets User
mcp-graph-identityCosmos DB Built-in Data Reader — explicit deny on writes
mcp-vector-identitySearch Index Data Reader — explicit deny on index/delete
openai-identityCognitive Services OpenAI User
durable-identityStorage Blob Data Contributor, Cosmos DB Data Contributor, Cognitive Services OpenAI User, KV Secrets User

Azure's private endpoint model works differently from AWS VPC Endpoints: each service gets a dedicated Private Endpoint (a private IP in the database subnet) and a Private DNS Zone that overrides public DNS resolution. When code inside the VNet resolves eare-dev-cosmos.documents.azure.com, Azure DNS returns the private IP — all traffic stays inside the VNet.

Six Private Endpoints with Private DNS Zones are generated in networking.bicep: Blob Storage, Cosmos DB, Azure AI Search, Azure OpenAI, Key Vault, and Azure Container Registry. No database call, AI call, or secret retrieval crosses the public internet.

The static website is served via Azure Front Door Standard with a WAF policy in Prevention mode. The Microsoft_DefaultRuleSet 2.1 managed rule set covers OWASP Top 10 and common web attack patterns. A rate limiting rule blocks IPs exceeding 1,000 requests/minute — protecting both the static site and the APIM gateway.

Front Door also provides managed HTTPS with Azure-issued certificates, global anycast routing, and the AzureFrontDoor.Backend NSG service tag that restricts direct-to-origin access — only traffic from Front Door's PoP IPs can reach the static site origin.

Bicep compiles to ARM JSON and is deployed directly through Azure Resource Manager — no state file, no backend configuration, no Terraform Cloud dependency. ARM is the source of truth. Running az deployment group create --mode Complete detects and removes any resources that exist in Azure but aren't in the template — true declarative infrastructure with no drift accumulation.

Bicep also has zero-lag support for new Azure resource types: any new service that ARM supports is immediately available in Bicep without waiting for a provider release. This is a meaningful operational advantage when working on the Azure service boundary.


Six dashboards — including a zero-dependency offline demo

The Azure deployment includes the same five rationalization dashboards as the AWS version, plus a fully self-contained demo mode with static JSON data and a Digital Twin upsell preview — deployable in minutes to a Blob Static Website with no backend required.

Step 2
6R Strategic Allocation
VM distribution, 6R allocation bar chart, Risk vs. ROI bubble chart, Cloud Modernization Summary Matrix for 10 clinical apps. Live via APIM or static fallback.
Chart.jsBubble chartSummary Matrix
Step 3
Data Quality & Confidence Scoring
8-dimension DQ framework, aggregate DQ score, DQ vs. 6R confidence scatter plot, updated matrix with scoring rationale columns.
8 DQ dimensionsScatter plotConfidence overlay
Step 4
Custom Weights & Gates Simulator
Executive hard-stop gates, 8 DQ weight sliders, live confidence matrix bubble chart — fully client-side, zero API calls on interaction.
Live recalculation8 slidersNo API required
Step 5
ROI Engine & Financial Methodology
$6,500/VM baseline TCO, 6R multipliers, ROI variance distribution floating bar chart, financial validation with confidence bounds and intel gap flags.
Variance barsConfidence boundsIntel gap flags
Step 6
Human-in-the-Loop Review
Portfolio sign-off donut, rationalization queue, per-app review cards (Approve / Override / Request Intel / Reject) with DynamoDB persistence via APIM.
HITL workflowOverride + recalcCosmos persistence
Demo Mode
Zero-Dependency Demo Deployment
Separate demo/ folder with pre-computed JSON data, localStorage HITL persistence, and a Digital Twin Premium upsell preview (Step 7). Deployable in minutes with ./deploy-demo.sh or run locally with ./demo-local.sh for offline presentations.
Static JSONlocalStorageDigital Twin preview
Demo Mode Architecture — Why It Matters
The demo folder is a complete, standalone product demo that requires zero backend infrastructure. Steps 2–5 use pre-computed sample-recommendations.json. Step 6 (HITL Review) persists review decisions to localStorage — so reviewers can approve/reject applications during a live demo without any API calls. Step 7 (Digital Twin Preview) is a static teaser that surfaces the upsell narrative. The entire demo deploys to Azure Blob Static Website in under 2 minutes via demo-bicep.bicep (minimal Storage Account + Front Door) — making it viable for prospect demonstrations in environments where provisioning a full backend is impractical.

Two clouds, one spec pattern, AI-generated throughout

10
Bicep Modules Generated
No state file, no provider configuration, instant ARM drift detection on every deploy. Correct Private Endpoint + Private DNS Zone wiring for 6 services — the hardest part of Azure networking, generated correctly from the spec.
0
Secrets in Code
7 Managed Identities with explicit RBAC role assignments replace all service principal credentials. Key Vault is accessed via Private Endpoint only. Azure OpenAI uses Managed Identity authentication — no API key in environment variables.
2-in-1
Cosmos DB Multi-API
Gremlin API (graph) and NoSQL API (recommendations + reviews) share a single Cosmos DB account — one Private Endpoint, one managed backup policy, one set of RBAC assignments. AWS requires Neptune + DynamoDB separately.
2 min
Demo Deployment Time
The zero-dependency demo mode deploys to Azure Blob Static Website in under 2 minutes via demo-bicep.bicep — a distinct advantage over the full-stack deployment for prospect demonstrations and offline presentations.

Same Product. Different Cloud. Same Approach.

The AWS and Azure deployments were generated in parallel from the same spec pattern. Multi-cloud isn't a migration problem when the IaC is generated — it's a spec problem.

Azure Bicep · Azure Functions · Cosmos DB · Azure AI Search · Container Apps · Azure OpenAI · Durable Functions · Python 3.11