Published
- 6 min read
Azure AI Foundry Architecture Lessons Learned
Every Azure AI Foundry architecture looks clean in the first workshop. There is a hub, a few projects, a model deployment, some evaluation flows, and a confident statement that production will come later. Then enterprise reality arrives: regions, quotas, private networking, cost centers, policy, data classification, and teams that need to move at different speeds.
These are the lessons I keep coming back to from real enterprise deployments. None of them are glamorous. All of them matter.
The hub is an operating model decision
The first design question is not technical. It is who owns the platform.
A single central hub can make governance easier. Security, platform engineering, and architecture teams get one place to apply guardrails, manage connections, standardize evaluation assets, and monitor usage. It works well when the organization has a mature platform team and a clear intake process.
Multiple hubs can be better when business units have different data boundaries, funding models, or regulatory obligations. I have seen this pattern work in global enterprises where a shared hub would create too much friction or too much blast radius.
The mistake is creating hubs based only on project count. A hub is not a folder. It is a trust boundary, a cost boundary, a networking decision, and sometimes a compliance boundary.
My current rule is simple: align hubs to ownership and risk. Align projects to workloads, teams, or lifecycle stages inside that ownership model.
Project topology should reflect delivery, not demos
In early pilots, teams often create one project per idea. That feels natural, but it can become messy once the organization starts reusing data connections, prompt assets, evaluation flows, and deployment patterns.
For production, I prefer projects that map to a real workload or product team. A customer service agent, a claims summarization system, and an engineering assistant should not be mixed into one project just because they all use the same model family.
This makes access reviews easier. It also makes incident response easier. When a risky prompt flow, tool, or index appears, I want to know which team owns it and which business process it supports.
Quota and region planning cannot be postponed
Many enterprise AI conversations begin with model quality and end with quota. Token throughput, regional availability, model versions, content filtering settings, and failover expectations all affect architecture.
I now ask quota questions early:
- Which regions are approved by data residency and latency requirements
- Which model families are required for production and evaluation
- What token throughput is needed for peak business processes
- Which workloads can share deployments and which need isolation
- What happens when a region cannot provide the requested capacity
If the answer is unknown, I treat it as a risk, not as a detail. It is easier to plan a controlled rollout with known quota constraints than to promise a launch date that depends on capacity arriving just in time.
Environment separation needs more than naming
I have seen dev, test, and prod separated only by project names. That is not enough for enterprise systems. The separation model needs to consider subscriptions, resource groups, identities, data stores, model deployments, private endpoints, and policy assignments.
My preferred pattern is separate subscriptions for production and nonproduction when the organization can support it. At minimum, I want separate resource groups, separate managed identities, separate Key Vaults, separate storage accounts, and separate Azure AI Search services.
The reason is practical. Evaluation data, test prompts, and prototype indexes can be messy. Production systems need stricter retention, access, monitoring, and change control. If the same service holds both worlds, people will eventually grant a permission that is convenient for dev and dangerous for prod.
Networking decided late is expensive
The most painful Foundry redesigns I have been part of started with public access during the pilot and private access as a late production requirement. The team then discovered that local development, CI pipelines, private DNS, firewall rules, and dependent resources all needed redesign.
Private networking is not only a security setting. It changes how people work.
If developers need VPN, say so early. If build agents need to run in a private subnet, budget for it. If Azure AI Search and Storage require private endpoints, plan the DNS zones before the first production data lands. If model calls must stay inside approved routes, test that from the application runtime, not only from a portal session.
The lesson is blunt: decide the network posture before the pilot becomes politically successful.
Cost surprises come from everything around the model
Model tokens get the attention, but the supporting platform creates many of the surprises. Search indexes, storage growth, diagnostic logs, private endpoints, managed compute, evaluation runs, and duplicated environments all contribute.
I now ask teams to estimate cost in categories:
- Model inference and provisioned capacity
- Evaluation and red team runs
- Search indexing and query load
- Storage for datasets, traces, and artifacts
- Observability and log retention
- Networking components
- Dev, test, and production duplication
This changes the conversation. Instead of asking whether AI is expensive, we ask which controls and workloads are worth paying for. That is a better enterprise conversation.
Landing-zone alignment is not optional
Azure AI Foundry does not live outside the enterprise landing zone. It needs subscription placement, naming, tagging, policy, role assignments, diagnostics, private DNS, and incident processes that match the rest of the Azure estate.
The friction usually appears when AI teams move faster than platform teams. The AI team wants a model deployment today. The platform team wants policy and network review. Both are right.
The best compromise I have found is a paved road: preapproved subscriptions, modules, role assignments, policies, private endpoint patterns, and deployment pipelines for common AI workloads. Teams can move quickly because the guardrails are already designed.
What I would do differently
If I could restart most enterprise Foundry programs, I would do five things earlier.
First, I would define the ownership model before choosing the hub topology. Second, I would run a quota and region review before any executive launch commitment. Third, I would make private networking the default design conversation, even for pilots. Fourth, I would separate environments with real Azure boundaries, not just naming. Fifth, I would set up evaluation and monitoring patterns before teams start calling agents production ready.
I would also spend more time on operations. Who rotates secrets if any remain? Who approves new model versions? Who reviews prompt and retrieval changes? Who responds when a safety evaluation fails? These questions are architecture, not administration.
Key takeaways
- Design hubs around ownership, risk, and trust boundaries, not only project count.
- Plan regions and quota before promising production timelines.
- Separate dev, test, and production with real Azure resources and identities.
- Decide private networking early because it changes development and deployment.
- Treat landing-zone alignment as part of the AI architecture, not a later migration task.