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 .

Service Architecture Overview

The IgnisMap system leverages eight core Azure services organized into critical and supporting tiers based on operational importance and cost impact 1 .

Azure Services Architecture

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
Loading

Infrastructure Provisioning Workflow

The Azure infrastructure is provisioned through automated shell scripts that create and configure all necessary resources in a single resource group 2 .

Automated Provisioning Flow

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"]
Loading

Data Storage Architecture

Cosmos DB serves as the primary data store with eight specialized containers optimized for different data types and access patterns 3 .

Cosmos DB Container Structure

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
Loading

Service Integration Configuration

Key Vault Secret Management

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"]
Loading

Function App Environment Variables

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
Loading

Event Processing Architecture

Event Hubs Configuration

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
Loading

Real-time Data Flow

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
Loading

Monitoring and Observability

Application Insights Integration

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
Loading

Cost Structure and Optimization

Monthly Cost Breakdown

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
Loading

Service Tier Pricing

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
Loading

Resource Optimization Strategy

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"]
Loading

Deployment and Configuration

Resource Naming Convention

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
Loading

Configuration Output

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
Loading
⚠️ **GitHub.com Fallback** ⚠️