- 4 minutes to read

Migration L2 Container Diagram Example

This migration container diagram is the L2 view of the Migration Journey example set. It zooms in from the L1 Context example and models a realistic phased migration where both integration platforms coexist.

BizTalk continues to process invoices while Azure Integration Services handles new order processing, and a Service Bus Bridge connects the legacy and new integration paths. Copy the C4Container markup below and follow Import Your First C4 Diagram to import it into a C4 Diagram Set; L2 Container nodes bind to Services (or Systems for the shared business core), and each Boundary can bind to a Domain. See C4 Diagrams for the concepts.

Migration coexistence L2 Container diagram imported into Nodinite
The L2 Container diagram for the migration coexistence scenario, with the Shared Business Core, BizTalk, and Azure Integration Services boundaries.

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", "Domain") { Container(biztalk_order_legacy, "INT1337-RCV-Order-Incoming", "BizTalk Runtime", "Current-state order intake") Container(biztalk_sync_legacy, "INT1337-PLN-Order-Scheduled", "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 Apps", "Migrated order confirmation workflow") Container(invoice_logic_app_new, "INT1337-INV-Order-Invoiced", "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 Runtime", "Current-state order intake")
            Container(biztalk_sync_legacy, "INT1337-PLN-Order-Scheduled", "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 Apps", "Migrated order confirmation workflow")
            Container(invoice_logic_app_new, "INT1337-INV-Order-Invoiced", "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 Steps