- 3 minutes to read

Migration L2 Container Diagram Example

This container diagram models a realistic phased migration where both integration platforms coexist.

BizTalk continues to process invoices while Azure Integration Services handles new order processing.

Example Diagram

Preview Mermaid Code
C4Container title Migration Coexistence - Container View Enterprise_Boundary(migration_enterprise, "Order-to-Cash Migration Coexistence") { Boundary(shared_core, "Shared Business Core", "Domain") { Container(portal, "Portal", "Customer Web App", "Unchanged customer-facing order entry") Container(shared_erp, "ERP", "REST / SOAP API", "Unchanged business core") Container(shared_erp_finance, "ERP-Finance", "REST / SOAP API", "Unchanged business core") Container(shared_wms, "Warehouse Management System", "REST API", "Unchanged business core") } Boundary(current_state, "BizTalk Server", "Domain") { Container(biztalk_order_legacy, "INT1337-RCV-Order-Incoming (BizTalk)", "BizTalk Runtime", "Current-state order intake") Container(biztalk_sync_legacy, "INT1337-PLN-Order-Scheduled (BizTalk)", "BizTalk Runtime", "Current-state planning synchronization") } Boundary(target_state, "Azure Integration Services", "Domain") { Container(api_management_new, "API Management", "REST API Gateway", "Front door for migrated APIs") Container(order_logic_app_new, "INT1337-SND-Confirm-Outgoing (Logic App)", "Logic Apps", "Migrated order confirmation workflow") Container(invoice_logic_app_new, "INT1337-INV-Order-Invoiced (Logic App)", "Logic Apps", "Migrated invoice workflow") ContainerQueue(service_bus_bridge, "Service Bus Bridge", "Service Bus", "Bridge between legacy and new integration paths") Container(function_transform, "Azure Functions - Transformation", "Azure Functions", "Transformation and enrichment") } } Container_Ext(payment_gateway, "Payment Gateway", "External REST API", "Processes customer credit card payments") ContainerDb_Ext(carrier_tracking, "Carrier Tracking DB", "External Database", "Provides delivery confirmation status") ContainerQueue_Ext(edi_gateway, "EDI Gateway", "External Message Queue", "B2B document exchange") Rel(portal, api_management_new, "Order API request/response", "HTTPS / JSON") Rel(api_management_new, order_logic_app_new, "Order API request/response", "HTTPS") Rel(order_logic_app_new, service_bus_bridge, "Publish migrated order event", "AMQP") Rel(service_bus_bridge, function_transform, "Consume and enrich", "AMQP") Rel(function_transform, shared_erp, "Write transformed order", "REST / SOAP") Rel(order_logic_app_new, shared_wms, "Create shipment", "REST") Rel(invoice_logic_app_new, shared_erp_finance, "Post invoice", "REST") Rel(biztalk_order_legacy, shared_erp, "Legacy order and invoice integration", "SOAP") Rel(biztalk_order_legacy, shared_erp_finance, "Legacy invoice posting", "SOAP / SQL") Rel(biztalk_sync_legacy, shared_erp_finance, "Legacy planning sync", "REST") Rel(order_logic_app_new, payment_gateway, "Migrated payment authorization", "REST") Rel(biztalk_order_legacy, carrier_tracking, "Legacy delivery status read", "REST") Rel(order_logic_app_new, carrier_tracking, "Target delivery status read", "REST") BiRel(biztalk_order_legacy, edi_gateway, "Legacy B2B document exchange", "AS2") BiRel(invoice_logic_app_new, edi_gateway, "Target B2B document exchange", "AS2") Rel(service_bus_bridge, biztalk_order_legacy, "Coexistence event bridge", "AMQP / Adapter")
C4Container
    title Migration Coexistence - Container View
    Enterprise_Boundary(migration_enterprise, "Order-to-Cash Migration Coexistence") {
        Boundary(shared_core, "Shared Business Core", "Domain") {
            Container(portal, "Portal", "Customer Web App", "Unchanged customer-facing order entry")
            Container(shared_erp, "ERP", "REST / SOAP API", "Unchanged business core")
            Container(shared_erp_finance, "ERP-Finance", "REST / SOAP API", "Unchanged business core")
            Container(shared_wms, "Warehouse Management System", "REST API", "Unchanged business core")
        }
        Boundary(current_state, "BizTalk", "Domain") {
            Container(biztalk_order_legacy, "INT1337-RCV-Order-Incoming (BizTalk)", "BizTalk Runtime", "Current-state order intake")
            Container(biztalk_sync_legacy, "INT1337-PLN-Order-Scheduled (BizTalk)", "BizTalk Runtime", "Current-state planning synchronization")
        }
        Boundary(target_state, "Azure Integration Services", "Domain") {
            Container(api_management_new, "API Management", "REST API Gateway", "Front door for migrated APIs")
            Container(order_logic_app_new, "INT1337-SND-Confirm-Outgoing (Logic App)", "Logic Apps", "Migrated order confirmation workflow")
            Container(invoice_logic_app_new, "INT1337-INV-Order-Invoiced (Logic App)", "Logic Apps", "Migrated invoice workflow")
            ContainerQueue(service_bus_bridge, "Service Bus Bridge", "Service Bus", "Bridge between legacy and new integration paths")
            Container(function_transform, "Azure Functions - Transformation", "Azure Functions", "Transformation and enrichment")
        }
    }
    Container_Ext(payment_gateway, "Payment Gateway", "External REST API", "Processes customer credit card payments")
    ContainerDb_Ext(carrier_tracking, "Carrier Tracking DB", "External Database", "Provides delivery confirmation status")
    ContainerQueue_Ext(edi_gateway, "EDI Gateway", "External Message Queue", "B2B document exchange")
    Rel(portal, api_management_new, "Order API request/response", "HTTPS / JSON")
    Rel(api_management_new, order_logic_app_new, "Order API request/response", "HTTPS")
    Rel(order_logic_app_new, service_bus_bridge, "Publish migrated order event", "AMQP")
    Rel(service_bus_bridge, function_transform, "Consume and enrich", "AMQP")
    Rel(function_transform, shared_erp, "Write transformed order", "REST / SOAP")
    Rel(order_logic_app_new, shared_wms, "Create shipment", "REST")
    Rel(invoice_logic_app_new, shared_erp_finance, "Post invoice", "REST")
    Rel(biztalk_order_legacy, shared_erp, "Legacy order and invoice integration", "SOAP")
    Rel(biztalk_order_legacy, shared_erp_finance, "Legacy invoice posting", "SOAP / SQL")
    Rel(biztalk_sync_legacy, shared_erp_finance, "Legacy planning sync", "REST")
    Rel(order_logic_app_new, payment_gateway, "Migrated payment authorization", "REST")
    Rel(biztalk_order_legacy, carrier_tracking, "Legacy delivery status read", "REST")
    Rel(order_logic_app_new, carrier_tracking, "Target delivery status read", "REST")
    BiRel(biztalk_order_legacy, edi_gateway, "Legacy B2B document exchange", "AS2")
    BiRel(invoice_logic_app_new, edi_gateway, "Target B2B document exchange", "AS2")
    Rel(service_bus_bridge, biztalk_order_legacy, "Coexistence event bridge", "AMQP / Adapter")

Coexistence Focus

  • Legacy workload retained: BizTalk Invoice Processing
  • New workload migrated: Azure Logic Apps - Order Processing
  • Shared systems: Portal, ERP, ERP-Finance, and Warehouse Management System

Import-Friendly Notes

  • ContainerQueue is used for bridge messaging to improve queue/bus classification.
  • Shared-system names are consistent with BizTalk and Azure sets for matching reuse.

Next Step