Stewart Rutledge2025-05-28

Using Azure for M3 Integrations, Continuted

azureintegrations

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