Stewart Rutledge2025-05-28
Using Azure for M3 Integrations, Continuted
A Follow-Up on Integrations: Getting Started with Azure and ION
As part of our ongoing exploration into integration strategies, we decided to set up a simple yet capable integration platform using Azure, connected to ION.
This approach is ideal for customers who want more flexibility than what traditional tools allow, especially when dealing with third-party systems or more advanced processing.
What You Need in Azure
To get started, you'll need a few core services:
Resource Group – the container that holds all your related resources
Service Bus – Azure’s messaging system, used to receive messages from ION
Function App – where your processing logic will live
Application Insights / Log Analytics – for monitoring and logging
App Registration – used to authenticate securely with ION
Note: Some services, like Azure Storage (required for Function Apps), are created automatically when using the Azure Portal, but may need to be defined manually if you're using infrastructure-as-code tools like Bicep.
Connecting ION to Azure
The part that tends to cause the most confusion is how to send data from ION to Azure. In our setup, we use ION API Gateway to send messages directly to Azure Service Bus, using the Service Bus REST API.
To make this work, the registered app in Azure must have the "Send" permission on the Service Bus. Once that's configured, you can define an API in ION that sends POST requests to the appropriate queue endpoint. We’ve built a clean, reusable version of this setup that can be imported into ION with minimal effort.
From there, the API becomes a connection point in ION, ready to use in any data flow.
We've included a few screenshots.
Using BODs
In this setup, we’re working with BODs (Business Object Documents). A simple two-step data flow can push messages from M3 into Azure by targeting a fixed queue. For more flexibility, we use a lightweight “envelope” that includes metadata about the BOD type, and route it to a queue named accordingly (e.g., SyncItemMaster, SyncCustomerPartyMaster, etc.).
This gives you the option to organize by document type or customize flows, useful when you need to handle the same BOD in different ways.
From Queue to Code
Once BODs are in the queue, Azure takes over. You can write your processing logic using any supported language, JavaScript, C#, Python, and more. With built-in support for version control, automated testing, and CI/CD, this makes Azure Functions a powerful option for maintainable and scalable integration work.
It takes a bit of setup, but in a day or less, you can have a fully functional pipeline up and running, ideal for teams who want better visibility, control, and flexibility over their integrations.
We’re working on packaging everything you need to get started, including:
A Bicep template for provisioning resources
A ready-to-import ION API definition
Real-world examples and reusable patterns
If you want to know more, we’re happy to help.
hello@beredo.net