The Problem: Real-Time Reporting After Cloud ERP Migration

Migrating from on-premises ERP to a cloud-native system like Infor Cloud Suite brings huge benefits in scalability and maintenance, but it often breaks real-time reporting. Oldcastle APG, a top North American construction materials supplier, faced exactly this: their legacy batch reports couldn't keep up with the need for instant visibility across customer service, finance, logistics, and manufacturing. Hundreds of users were stuck waiting for daily exports, missing opportunities and slowing decisions.

Key challenge: Infor Cloud ERP's built-in reporting covers only minimal needs. Multi-dimensional, real-time analytics required a custom architecture.

This post breaks down the architecture they built with AWS Solutions Architects, focusing on the streaming pipeline, database layer, and embedded dashboard delivery. It's a practical blueprint for any organization extending cloud ERP with cloud-native analytics.

For a broader perspective on cloud-native identity and access patterns, see our guide on Azure Files Entra-Only Identities.

Real-time analytics dashboard with Amazon QuickSight showing ERP data from Infor Coding Session Visual

Architecture Deep Dive: Streaming from Infor to Aurora to QuickSight

The solution rests on three pillars: real-time data streaming, scalable storage with high availability, and embedded analytics. Let's walk through each.

1. Real-Time Data Streaming with Infor Data Fabric Stream Pipelines

Infor's Data Fabric Stream Pipelines is an add-on that captures insert, update, and delete events from ERP tables (sales orders, inventory, financial transactions) as they happen. Instead of waiting for batch ETL, data is pushed immediately.

-- Example: Querying streamed data stored in Aurora PostgreSQL
-- The raw events are stored in JSONB columns for flexibility
SELECT
    event_id,
    event_type,
    table_name,
    payload ->> 'order_id' AS order_id,
    payload ->> 'status' AS status,
    event_timestamp
FROM
    stream_events
WHERE
    table_name = 'sales_orders'
    AND event_timestamp > NOW() - INTERVAL '1 hour'
ORDER BY
    event_timestamp DESC;

Key design decisions:

  • Use Network Load Balancer (NLB) with static Elastic IPs in public subnets so Infor can reach the VPC (Infor cannot directly access private subnets).
  • RDS routers (EC2 instances with iptables NAT) forward traffic from NLB to Aurora in the private subnet.
  • RDS Proxy manages connection pooling and automatic failover, critical for high-frequency streaming.

2. Storage Layer: Aurora PostgreSQL with Multi-AZ

Aurora PostgreSQL was chosen for its JSONB support (flexible schema for streaming data), automatic storage scaling, and Multi-AZ high availability.

# Python snippet: Simulating how a Lambda function might process incoming stream events
# and insert them into Aurora
import json
import boto3
import psycopg2

def lambda_handler(event, context):
    # Parse the stream event (assumes NDJSON format from Infor)
    records = json.loads(event['body'])
    conn = psycopg2.connect(
        host='your-aurora-cluster.cluster-xxxx.us-east-1.rds.amazonaws.com',
        dbname='erp_stream',
        user='stream_user',
        password='your-password'
    )
    cur = conn.cursor()
    for rec in records:
        # Insert raw event into JSONB column
        cur.execute(
            "INSERT INTO stream_events (table_name, payload, event_timestamp) VALUES (%s, %s, %s)",
            (rec['table'], json.dumps(rec['data']), rec['timestamp'])
        )
    conn.commit()
    cur.close()
    conn.close()
    return {'statusCode': 200, 'body': 'OK'}

3. Analytics and Embedded Dashboards with QuickSight

Amazon QuickSight provides interactive dashboards and pixel-perfect reports. The key innovation was embedding these dashboards directly inside Infor OS via Amazon API Gateway.

// Example: Generating an embedded QuickSight dashboard URL via API Gateway + Lambda
// This function is called from an iframe in Infor
const AWS = require('aws-sdk');
const quicksight = new AWS.QuickSight({ region: 'us-east-1' });

exports.handler = async (event) => {
    const userArn = 'arn:aws:quicksight:us-east-1:123456789012:user/default/erp_user';
    const dashboardId = 'sales-dashboard';
    
    const params = {
        AwsAccountId: '123456789012',
        MemberId: event.queryStringParameters.userId,
        IdentityType: 'QUICKSIGHT',
        SessionLifetimeInMinutes: 60,
        ExperienceConfiguration: {
            Dashboard: {
                InitialDashboardId: dashboardId
            }
        }
    };
    
    const result = await quicksight.generateEmbedUrlForRegisteredUser(params).promise();
    return {
        statusCode: 200,
        headers: { 'Access-Control-Allow-Origin': 'https://your-infor-domain.com' },
        body: JSON.stringify({ embedUrl: result.EmbedUrl })
    };
};

Security note: The Lambda function validates Infor session tokens, maps user roles to QuickSight permissions, and applies row-level security filters so each user only sees authorized data.

Cloud architecture diagram for Infor ERP integration with Amazon Aurora and QuickSight System Abstract Visual

Results, Limitations, and Next Steps

What They Achieved

  • 50+ complex dashboards deployed in 8 months
  • 100+ concurrent users supported without performance degradation
  • Millions of transactions processed daily in real-time
  • Subsecond query response using QuickSight SPICE caching
  • Single sign-on and role-based data access

Limitations & Cautions

  • Stream Pipelines is an add-on – not all Infor licenses include it. Check your contract.
  • NLB static IPs require careful management if you scale across multiple regions.
  • JSONB in Aurora is flexible but can become a performance bottleneck if you don't index frequently-queried fields. Plan your indexing strategy early.
  • Embedding QuickSight requires careful CORS configuration and session token validation to avoid security gaps.

Next Steps for Learning

  1. Dive deeper into Infor Data Fabric – explore its streaming capabilities beyond basic table replication.
  2. Try Aurora PostgreSQL with JSONB – experiment with indexing strategies for semi-structured data.
  3. Build a QuickSight embedded dashboard – the Amazon QuickSight Embedded Analytics documentation has excellent tutorials.
  4. Explore AI/ML integration – Oldcastle plans to add demand forecasting and intelligent search using Amazon Bedrock. That's a natural next frontier.

Reference: This article is based on the original architecture published on the AWS Architecture Blog.

AWS server rack with data streaming pipelines connecting on-premises ERP to cloud analytics IT Technology Image

Conclusion: The Blueprint for Cloud ERP Analytics

Oldcastle's journey proves that cloud ERP migrations don't have to sacrifice real-time reporting. By combining Infor Data Fabric Stream Pipelines with AWS's managed services (Aurora, QuickSight, API Gateway, RDS Proxy), they built a system that is both scalable and maintainable. The key takeaway: streaming beats batch every time when operational decisions depend on current data.

If you're planning a similar migration, start small – pick one critical business process (e.g., sales order tracking), build a proof-of-concept with the architecture above, and iterate. The patterns here are reusable across any ERP system that can push events via REST or stream protocols.

For more on securing your cloud-native integration, check our guide on Critical React Server Components RCE Vulnerability (CVE-2025-55182).

This content was drafted using AI tools based on reliable sources, and has been reviewed by our editorial team before publication. It is not intended to replace professional advice.