Azure Cloud Infrastructure - seojedaperez/IgnisMap GitHub Wiki
This document details the Microsoft Azure cloud services that power the IgnisMap emergency response system, including their configuration, interconnections, and automated provisioning . It covers the core infrastructure components that enable fire monitoring, AI analysis, and real-time emergency response coordination .
The IgnisMap system leverages eight core Azure services organized into critical and supporting tiers based on operational importance and cost impact 1 .
graph TB
subgraph "Critical Services ($115-150/month)"
AzureMaps["emergency-app-maps<br/>Azure Maps S1<br/>$50-80/month"]
CosmosDB["emergency-app-cosmos<br/>Cosmos DB<br/>$25-40/month"]
Functions["emergency-app-functions<br/>Function App<br/>$10-20/month"]
OpenAI["emergency-openai<br/>Cognitive Services<br/>$30-50/month"]
end
subgraph "Supporting Services ($50-120/month)"
EventHub["emergency-app-events<br/>Event Hubs<br/>$30-50/month"]
CogServices["emergency-app-cognitive<br/>Cognitive Services<br/>$30-50/month"]
KeyVault["emergency-app-vault<br/>Key Vault<br/>$5-10/month"]
AppInsights["emergency-app-insights<br/>Application Insights<br/>$10-15/month"]
Storage["emergencystorage<br/>Storage Account<br/>$5-10/month"]
end
subgraph "External Data Sources"
NASA["NASA FIRMS API"]
Weather["Open-Meteo API"]
end
AzureMaps --> Functions
CosmosDB --> Functions
Functions --> OpenAI
Functions --> CogServices
EventHub --> Functions
KeyVault --> Functions
KeyVault --> CosmosDB
KeyVault --> AzureMaps
Functions --> AppInsights
Functions --> Storage
NASA --> EventHub
Weather --> Functions
The Azure infrastructure is provisioned through automated shell scripts that create and configure all necessary resources in a single resource group 2 .
flowchart TD
Start["azure-setup.sh"] --> Login["az login verification"]
Login --> ResourceGroup["Create emergency-rg<br/>Resource Group"]
ResourceGroup --> Maps["Create emergency-app-maps<br/>S1 SKU - $50-80/month"]
Maps --> Cosmos["Create emergency-app-cosmos<br/>GlobalDocumentDB - $25-40/month"]
Cosmos --> Containers["Create 8 Cosmos containers<br/>Organizations, FireAlerts, etc."]
Containers --> Storage["Create storage account<br/>Standard_LRS - $5-10/month"]
Storage --> Functions["Create emergency-app-functions<br/>Node.js 18, v4 - $10-20/month"]
Functions --> Cognitive["Create emergency-app-cognitive<br/>CognitiveServices S0 - $30-50/month"]
Cognitive --> EventHubs["Create emergency-app-events<br/>Standard SKU - $30-50/month"]
EventHubs --> KeyVault["Create emergency-app-vault<br/>Standard SKU - $5-10/month"]
KeyVault --> Secrets["Store connection strings<br/>and API keys"]
Secrets --> Insights["Create emergency-app-insights<br/>Application Insights - $10-15/month"]
Insights --> Config["Configure Function App<br/>environment variables"]
Config --> Output["Generate azure-config.json<br/>configuration file"]
Cosmos DB serves as the primary data store with eight specialized containers optimized for different data types and access patterns 3 .
graph TB
subgraph "EmergencyDB Database"
Orgs["Organizations<br/>Partition: /organizationType<br/>400 RU/s<br/>$5-8/month"]
Zones["MonitoringZones<br/>Partition: /organizationId<br/>400 RU/s<br/>$5-8/month"]
Alerts["FireAlerts<br/>Partition: /organizationId<br/>1000 RU/s<br/>$12-20/month"]
Plans["TacticalPlans<br/>Partition: /organizationType<br/>400 RU/s<br/>$5-8/month"]
Satellite["SatelliteData<br/>Partition: /satellite<br/>2000 RU/s<br/>TTL: 30 days<br/>$25-40/month"]
Weather["WeatherData<br/>Partition: /location<br/>800 RU/s<br/>TTL: 7 days<br/>$10-16/month"]
Resources["ResourceAllocation<br/>Partition: /organizationId<br/>400 RU/s<br/>$5-8/month"]
Audit["AuditLog<br/>Partition: /organizationId<br/>400 RU/s<br/>$5-8/month"]
end
subgraph "Access Patterns"
Orgs --> OrgQuery["Query by organization type"]
Zones --> ZoneQuery["Query by organization ID"]
Alerts --> AlertQuery["Query by organization ID"]
Plans --> PlanQuery["Query by organization type"]
Satellite --> SatQuery["Query by satellite source"]
Weather --> WeatherQuery["Query by geographic region"]
Resources --> ResQuery["Query by organization ID"]
Audit --> AuditQuery["Query by organization ID"]
end
Three critical secrets are stored in Key Vault for secure access 4 :
graph LR
KeyVault["emergency-app-vault"] --> CosmosSecret["CosmosConnectionString<br/>Database access"]
KeyVault --> MapsSecret["AzureMapsKey<br/>Geospatial services"]
KeyVault --> CognitiveSecret["CognitiveServicesKey<br/>AI service authentication"]
CosmosSecret --> CosmosDB["emergency-app-cosmos"]
MapsSecret --> AzureMaps["emergency-app-maps"]
CognitiveSecret --> CogServices["emergency-app-cognitive"]
graph TD
subgraph "Environment Configuration"
CosmosConn["COSMOS_CONNECTION_STRING<br/>Database access"]
MapsKey["AZURE_MAPS_KEY<br/>Geospatial services"]
CogEndpoint["COGNITIVE_SERVICES_ENDPOINT<br/>AI service URL"]
CogKey["COGNITIVE_SERVICES_KEY<br/>AI authentication"]
InsightsKey["APPINSIGHTS_INSTRUMENTATIONKEY<br/>Telemetry collection"]
end
CosmosConn --> Functions["emergency-app-functions"]
MapsKey --> Functions
CogEndpoint --> Functions
CogKey --> Functions
InsightsKey --> Functions
The Event Hubs namespace contains the satellite-data
event hub configured for high-throughput satellite data ingestion 5 :
graph TB
subgraph "Event Processing Pipeline"
NASA["NASA FIRMS API<br/>Fire data every 15 min"]
EventHub["satellite-data Event Hub<br/>4 partitions<br/>7-day retention<br/>Standard SKU"]
Functions["Azure Functions<br/>ProcessSatelliteData"]
Cosmos["Cosmos DB<br/>SatelliteData container"]
AI["Cognitive Services<br/>Fire analysis"]
end
NASA --> EventHub
EventHub --> Functions
Functions --> AI
Functions --> Cosmos
subgraph "Processing Details"
P1["Partition 1<br/>Satellite A data"]
P2["Partition 2<br/>Satellite B data"]
P3["Partition 3<br/>Satellite C data"]
P4["Partition 4<br/>Weather correlation"]
end
EventHub --> P1
EventHub --> P2
EventHub --> P3
EventHub --> P4
sequenceDiagram
participant NASA as "NASA FIRMS API"
participant EventHub as "satellite-data Event Hub"
participant Functions as "Azure Functions"
participant Cosmos as "Cosmos DB"
participant AI as "Cognitive Services"
participant Maps as "Azure Maps"
participant Alerts as "Alert System"
NASA->>EventHub: Satellite fire data (every 15 min)
EventHub->>Functions: ProcessSatelliteData trigger
Functions->>AI: Analyze fire imagery
AI->>Functions: Fire risk assessment
Functions->>Cosmos: Store processed data
Functions->>Maps: Geocode fire locations
Maps->>Functions: Geographic coordinates
Functions->>Functions: GenerateTacticalPlan
Functions->>Cosmos: Store tactical plans
Functions->>Alerts: Send emergency notifications
graph TB
subgraph "Monitoring Stack"
AppInsights["emergency-app-insights<br/>Application Insights"]
Functions["Azure Functions<br/>Telemetry source"]
Cosmos["Cosmos DB<br/>Performance metrics"]
Maps["Azure Maps<br/>Usage analytics"]
EventHub["Event Hubs<br/>Throughput monitoring"]
end
Functions --> AppInsights
Cosmos --> AppInsights
Maps --> AppInsights
EventHub --> AppInsights
subgraph "Key Metrics"
ResponseTime["Alert response time<br/>Target: < 30 seconds"]
Accuracy["Fire detection accuracy<br/>Target: > 95%"]
Availability["System availability<br/>Target: 99.9%"]
TacticalPlan["Tactical plan generation<br/>Target: < 2 minutes"]
DataLatency["Satellite data latency<br/>Target: < 5 minutes"]
end
AppInsights --> ResponseTime
AppInsights --> Accuracy
AppInsights --> Availability
AppInsights --> TacticalPlan
AppInsights --> DataLatency
The Azure infrastructure operates with an estimated monthly cost of $165-270 USD 1 :
pie title "Monthly Azure Costs ($165-270 USD)"
"Azure Maps" : 65
"Cosmos DB" : 32
"Cognitive Services" : 40
"Event Hubs" : 40
"Function App" : 15
"Storage & Others" : 25
Based on the integration guide 6 :
graph TB
subgraph "Tier 1: Essential Services ($150-200/month)"
T1Maps["Azure Maps: $50-80/month"]
T1OpenAI["Azure OpenAI: $30-50/month"]
T1Cosmos["Cosmos DB: $25-40/month"]
T1Functions["Azure Functions: $10-20/month"]
T1ML["Azure ML: $20-30/month"]
end
subgraph "Tier 2: Advanced Services ($300-400/month)"
T2Cognitive["Azure Cognitive Services: $50-80/month"]
T2EventHub["Azure Event Hubs: $30-50/month"]
T2IoT["Azure IoT Hub: $40-60/month"]
T2Storage["Azure Storage: $20-30/month"]
T2Monitor["Azure Monitor: $15-25/month"]
end
subgraph "Tier 3: Premium Services ($500-600/month)"
T3Twins["Azure Digital Twins: $100-150/month"]
T3Synapse["Azure Synapse Analytics: $80-120/month"]
T3Container["Azure Container Instances: $30-50/month"]
T3SignalR["Azure SignalR: $20-30/month"]
end
flowchart TD
Start["Cost Optimization"] --> CosmosOpt["Cosmos DB Optimization"]
CosmosOpt --> SessionConsistency["Session consistency level<br/>Lower cost than Strong"]
CosmosOpt --> OptimizedRU["Optimized RU/s allocation<br/>Per container needs"]
CosmosOpt --> TTLPolicies["TTL policies<br/>Auto-expire old data"]
Start --> StorageOpt["Storage Optimization"]
StorageOpt --> StandardLRS["Standard_LRS redundancy<br/>Cost-effective local storage"]
Start --> FunctionOpt["Function App Optimization"]
FunctionOpt --> ConsumptionPlan["Consumption plan<br/>Serverless cost scaling"]
Start --> MonitoringOpt["Monitoring Optimization"]
MonitoringOpt --> CustomMetrics["Custom telemetry only<br/>Avoid excessive logging"]
All Azure resources follow the naming pattern {APP_NAME}-{SERVICE_TYPE}
where APP_NAME
is "emergency-app":
graph LR
subgraph "Naming Convention: emergency-app-{service}"
Maps["emergency-app-maps<br/>Geospatial mapping services"]
Cosmos["emergency-app-cosmos<br/>Global document database"]
Functions["emergency-app-functions<br/>Serverless compute platform"]
Cognitive["emergency-app-cognitive<br/>AI and ML services"]
Events["emergency-app-events<br/>Real-time data streaming"]
Vault["emergency-app-vault-{timestamp}<br/>Secrets management"]
Insights["emergency-app-insights<br/>Application monitoring"]
Storage["emergencystorage{timestamp}<br/>File and blob storage"]
end
sequenceDiagram
participant Script as "azure-setup.sh"
participant Azure as "Azure CLI"
participant Config as "azure-config.json"
participant App as "Function App"
Script->>Azure: Create all resources
Azure->>Script: Return connection strings & keys
Script->>Config: Generate configuration file
Config->>App: Load environment variables
App->>App: Initialize services