Overview
APIM Accelerator is an enterprise-grade Infrastructure-as-Code (IaC) solution that deploys a complete Azure API Management landing zone using Bicep templates and the Azure Developer CLI (azd). It provides a production-ready foundation for organizations to centralize API governance, enable developer self-service through a portal, and establish comprehensive monitoring β all from a single azd up command.
The accelerator follows a modular, layered architecture that separates shared infrastructure (monitoring, storage) from core platform services (API Management, Developer Portal) and API inventory management (API Center). By leveraging reusable Bicep modules with strong type definitions, deterministic naming conventions, and YAML-driven configuration, teams can customize deployments across dev, test, staging, prod, and uat environments without modifying template code.
π‘ Why This Matters: Standing up a production API Management platform with monitoring, governance, and developer portal integration typically requires weeks of manual Azure configuration. This accelerator automates the entire process with validated, repeatable infrastructure deployments.
β οΈ Important: This project deploys Azure resources that incur costs. Review the Configuration section to understand SKU selections and scaling options before provisioning.
- Overview
- Architecture
- Features
- Requirements
- Quick Start
- Deployment
- Usage
- Configuration
- Project Structure
- Contributing
- License
Overview
The APIM Accelerator deploys a three-tier landing zone architecture orchestrated at the Azure subscription level. The deployment creates a single resource group containing shared monitoring infrastructure, a core API Management platform with developer portal, and an API Center for centralized API inventory and governance.
The deployment sequence ensures dependency resolution: shared monitoring components deploy first, providing Log Analytics and Application Insights identifiers to the core APIM platform, which in turn provides service references needed by the API Center integration.
---
title: "APIM Accelerator - Landing Zone Architecture"
config:
theme: base
look: classic
layout: dagre
themeVariables:
fontSize: '16px'
flowchart:
htmlLabels: true
---
flowchart TB
accTitle: APIM Accelerator Landing Zone Architecture
accDescr: Shows the three-tier deployment architecture with shared monitoring, core APIM platform, and API inventory management layers
%% βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
%% AZURE / FLUENT ARCHITECTURE PATTERN v1.1
%% (Semantic + Structural + Font + Accessibility Governance)
%% βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
%% PHASE 1 - STRUCTURAL: Direction explicit, flat topology, nesting β€ 3
%% PHASE 2 - SEMANTIC: Colors justified, max 5 semantic classes, neutral-first
%% PHASE 3 - FONT: Dark text on light backgrounds, contrast β₯ 4.5:1
%% PHASE 4 - ACCESSIBILITY: accTitle/accDescr present, icons on all nodes
%% PHASE 5 - STANDARD: Governance block present, classDefs centralized
%% βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
subgraph subscription["βοΈ Azure Subscription"]
direction TB
subgraph rg["π¦ Resource Group (apim-accelerator-{env}-{region}-rg)"]
direction TB
subgraph shared["π Shared Infrastructure"]
direction LR
law["π Log Analytics\nWorkspace"]:::monitoring
ai["π Application\nInsights"]:::monitoring
sa["ποΈ Storage\nAccount"]:::monitoring
end
subgraph core["βοΈ Core Platform"]
direction LR
apim["π API Management\n(Premium SKU)"]:::primary
ws["π Workspaces"]:::primary
dp["π₯οΈ Developer\nPortal"]:::primary
end
subgraph inventory["π API Inventory"]
direction LR
ac["π API Center"]:::governance
acsrc["π API Source\nIntegration"]:::governance
end
end
end
law --> ai
sa --> ai
law --> apim
ai --> apim
sa --> apim
apim --> ws
apim --> dp
apim --> ac
ac --> acsrc
style subscription fill:#F3F2F1,stroke:#605E5C,stroke-width:2px
style rg fill:#FAFAFA,stroke:#8A8886,stroke-width:2px
style shared fill:#EFF6FC,stroke:#0078D4,stroke-width:1px
style core fill:#F0FFF0,stroke:#107C10,stroke-width:1px
style inventory fill:#FFF8F0,stroke:#FFB900,stroke-width:1px
classDef monitoring fill:#DEECF9,stroke:#0078D4,stroke-width:2px,color:#004578
classDef primary fill:#DFF6DD,stroke:#107C10,stroke-width:2px,color:#0B6A0B
classDef governance fill:#FFF4CE,stroke:#FFB900,stroke-width:2px,color:#986F0B
Component Roles:
| Component | Purpose | Source Module |
|---|---|---|
| π Log Analytics Workspace | Centralized log aggregation, KQL-based querying, and alerting | src/shared/monitoring/operational/main.bicep |
| π Application Insights | Application performance monitoring, distributed tracing, and telemetry | src/shared/monitoring/insights/main.bicep |
| ποΈ Storage Account | Long-term diagnostic log archival and compliance retention | src/shared/monitoring/operational/main.bicep |
| π API Management | API gateway, policy enforcement, rate limiting, and caching | src/core/apim.bicep |
| π Workspaces | Logical API isolation for different teams or business domains | src/core/workspaces.bicep |
| π₯οΈ Developer Portal | Self-service API discovery, documentation, and testing with Azure AD auth | src/core/developer-portal.bicep |
| π API Center | Centralized API catalog, governance, and inventory management | src/inventory/main.bicep |
| π API Source Integration | Automatic API discovery and synchronization from APIM to API Center | src/inventory/main.bicep |
Overview
The accelerator provides a comprehensive set of capabilities designed for enterprise API platform teams. Each feature is implemented as a modular Bicep component, enabling teams to customize or extend individual capabilities without affecting the rest of the platform.
π‘ How It Works: The modular architecture uses Bicep's module system with strongly-typed inputs (defined in
src/shared/common-types.bicep) and a centralized configuration file (infra/settings.yaml) to drive all deployments through a single orchestration template.
| Feature | Description | Status |
|---|---|---|
| π API Management Platform | Full Azure APIM deployment with configurable SKU (Developer through Premium), managed identity, VNet integration support, and CORS policies | β Stable |
| π₯οΈ Developer Portal | Self-service portal with Azure AD authentication, sign-in/sign-up controls, terms of service, and CORS configuration | β Stable |
| π Workspace Isolation | APIM workspaces for team-based or domain-based API isolation within a single instance, enabling independent API lifecycle management | β Stable |
| π Unified Monitoring | Log Analytics workspace with Application Insights integration, diagnostic settings across all resources, and storage-based log archival | β Stable |
| π API Governance | Azure API Center with automatic APIM integration, RBAC-based access control, and centralized API cataloging | β Stable |
| π Managed Identity | System-assigned and user-assigned managed identity support across APIM, API Center, and Log Analytics resources | β Stable |
| β‘ One-Command Deploy | Full landing zone provisioning via azd up with pre-provision hooks for soft-deleted resource cleanup |
β Stable |
| π·οΈ Tag Governance | Comprehensive tagging strategy with cost center, business unit, owner, compliance, and budget tracking applied to all resources | β Stable |
Overview
Before deploying the APIM Accelerator, ensure your environment meets the following prerequisites. The accelerator targets Azure subscription-level deployments and requires appropriate permissions to create resource groups and provision Azure services.
π Note: The default configuration uses the Premium SKU for API Management, which supports workspaces, multi-region deployment, and VNet integration. Adjust the SKU in
infra/settings.yamlif a lower tier is appropriate for your environment.
| Requirement | Details | Documentation |
|---|---|---|
| βοΈ Azure Subscription | Active Azure subscription with permissions to create resource groups and deploy resources | Create an Azure account |
| π Azure CLI | Version 2.60+ installed and authenticated with az login |
Install Azure CLI |
| π οΈ Azure Developer CLI | azd installed for deployment orchestration and lifecycle management |
Install azd |
| β‘ Bicep CLI | Included with Azure CLI 2.60+; used for template compilation and validation | Bicep documentation |
| π Azure AD App Registration | Required for Developer Portal authentication β client ID and client secret | Register an application |
| π Azure Region | Target region must support API Management Premium tier and API Center | Azure products by region |
Overview
Get the APIM Accelerator deployed in minutes with three commands. This section provides the fastest path to a running environment for developers familiar with Azure tooling.
π‘ Why This Matters: A full API Management landing zone typically requires configuring dozens of Azure resources individually. The accelerator reduces this to a single command that provisions the entire stack with production-ready defaults.
git clone https://github.com/Evilazaro/APIM-Accelerator.git
cd APIM-Accelerator
azd auth login
azd upExpected output:
Provisioning Azure resources (azd provision)
(β) Done: Resource group: apim-accelerator-dev-eastus-rg
SUCCESS: Your application was provisioned in Azure.
π Note: When prompted by
azd up, select your target Azure region and provide an environment name (e.g.,dev,staging,prod). See the Deployment section for the full step-by-step walkthrough.
Overview
The deployment process uses the Azure Developer CLI (azd) to orchestrate a subscription-level Bicep template. The pipeline creates a resource group, provisions shared monitoring infrastructure, deploys the core APIM platform, and registers APIs in API Center β all in a deterministic, repeatable sequence.
π‘ How It Works: The
azd upcommand readsazure.yamlfor project configuration, loads parameters frominfra/main.parameters.json, and executes lifecycle hooks (such as purging soft-deleted APIM instances) before provisioning infrastructure defined ininfra/main.bicep.
git clone https://github.com/Evilazaro/APIM-Accelerator.git
cd APIM-Acceleratoraz login
azd auth loginazd initWhen prompted, provide an environment name (e.g., dev, staging, prod). This value maps to the envName parameter and determines resource naming and configuration.
azd upWhen prompted, select your target Azure region. The command executes the following sequence:
- Runs the pre-provision hook (
infra/azd-hooks/pre-provision.sh) to purge any soft-deleted APIM instances in the target region - Provisions all Azure resources defined in
infra/main.bicep - Deploys shared monitoring infrastructure (Log Analytics, Application Insights, Storage)
- Deploys the core APIM platform with workspaces and developer portal
- Deploys API Center with APIM integration
az apim show --name <apim-name> --resource-group <resource-group-name> --query "{name:name, sku:sku.name, state:properties.provisioningState}" --output tableExpected output:
Name Sku State
-------------------------------------- -------- ---------
apim-accelerator-abc123-apim Premium Succeeded
π‘ Tip: To provision infrastructure only without application deployment, use
azd provision. To tear down all resources, useazd down.
Overview
After deployment, the accelerator provides a fully operational API Management platform with a developer portal and centralized API governance. This section covers common post-deployment operations for managing APIs, accessing the portal, and monitoring platform health.
π‘ Why This Matters: Deploying infrastructure is only the first step. Understanding how to interact with the provisioned resources ensures your team can onboard APIs, configure policies, and leverage the full platform effectively.
The Developer Portal is deployed with Azure AD authentication enabled. Navigate to the portal URL output by the deployment:
az apim show --name <apim-name> --resource-group <resource-group-name> --query "properties.developerPortalUrl" --output tsvUse the Log Analytics workspace to query API Management diagnostic logs:
az monitor log-analytics query --workspace <workspace-id> --analytics-query "ApiManagementGatewayLogs | summarize count() by ResultType | order by count_ desc" --output tableList the configured APIM workspaces for team-based API isolation:
az apim workspace list --service-name <apim-name> --resource-group <resource-group-name> --output tableAccess the API Center to review registered APIs and governance status:
az apic api list --service-name <api-center-name> --resource-group <resource-group-name> --output tableOverview
All deployment settings are centralized in infra/settings.yaml, providing a single source of truth for environment-specific configuration. The YAML-driven approach enables infrastructure customization without modifying Bicep templates, making it straightforward to manage multiple environments.
π Note: Resource names left empty in the configuration file (e.g.,
name: "") are auto-generated using a deterministic naming convention:{solutionName}-{uniqueSuffix}-{resourceType}. The unique suffix is derived from the subscription and resource group identifiers, ensuring globally unique but reproducible names.
The infra/settings.yaml file contains all configurable parameters:
# Solution identifier used for naming conventions
solutionName: "apim-accelerator"
# Core API Management configuration
core:
apiManagement:
name: "" # Leave empty for auto-generation
publisherEmail: "admin@contoso.com"
publisherName: "Contoso"
sku:
name: "Premium" # Options: Developer, Basic, Standard, Premium, Consumption
capacity: 1 # Scale units (Premium: 1-10)
identity:
type: "SystemAssigned" # Options: SystemAssigned, UserAssigned
workspaces:
- name: "workspace1" # Add additional workspaces as neededParameters are passed via infra/main.parameters.json:
| Parameter | Type | Description |
|---|---|---|
βοΈ envName |
string |
Environment identifier: dev, test, staging, prod, or uat |
π location |
string |
Azure region for resource deployment (e.g., eastus, westeurope) |
All resources receive governance tags defined in infra/settings.yaml:
| Tag | Purpose | Example Value |
|---|---|---|
π’ CostCenter |
Cost allocation tracking | CC-1234 |
πΌ BusinessUnit |
Department identification | IT |
π€ Owner |
Resource owner contact | admin@contoso.com |
π ApplicationName |
Workload identification | APIM Platform |
π RegulatoryCompliance |
Compliance requirements | GDPR |
π ServiceClass |
Workload tier classification | Critical |
Overview
The repository follows a modular structure separating infrastructure orchestration (infra/) from reusable Bicep modules (src/). Each module is self-contained with explicit parameter contracts and typed inputs.
APIM-Accelerator/
βββ azure.yaml # Azure Developer CLI project configuration
βββ LICENSE # MIT License
βββ infra/
β βββ main.bicep # Subscription-level orchestration template
β βββ main.parameters.json # Deployment parameters (envName, location)
β βββ settings.yaml # Centralized configuration for all components
β βββ azd-hooks/
β βββ pre-provision.sh # Purges soft-deleted APIM instances before deploy
βββ src/
β βββ core/
β β βββ main.bicep # Core platform orchestrator
β β βββ apim.bicep # API Management service deployment
β β βββ workspaces.bicep # APIM workspace creation
β β βββ developer-portal.bicep # Developer portal with Azure AD integration
β βββ inventory/
β β βββ main.bicep # API Center deployment with APIM integration
β βββ shared/
β βββ main.bicep # Shared infrastructure orchestrator
β βββ common-types.bicep # Reusable type definitions (ApiManagement, Inventory, etc.)
β βββ constants.bicep # Utility functions and shared constants
β βββ monitoring/
β β βββ main.bicep # Monitoring orchestrator
β β βββ insights/
β β β βββ main.bicep # Application Insights deployment
β β βββ operational/
β β βββ main.bicep # Log Analytics and Storage Account deployment
β βββ networking/
β βββ main.bicep # Virtual network placeholder (future expansion)
βββ prompts/ # AI prompt engineering templates (documentation tooling)
Overview
Contributions to the APIM Accelerator are welcome. Whether you are fixing a bug, adding a new Bicep module, or improving documentation, your input helps the community build better API platforms on Azure.
π‘ Getting Started: Fork the repository, create a feature branch, and submit a pull request. Ensure all Bicep templates compile without errors using
az bicep buildbefore submitting.
-
Fork the repository on GitHub
-
Create a feature branch from
main:git checkout -b feature/your-feature-name
-
Make your changes following the existing module patterns and naming conventions
-
Validate Bicep templates compile successfully:
az bicep build --file infra/main.bicep
-
Commit with a descriptive message and push your branch
-
Open a pull request against the
mainbranch
- Follow the existing naming convention:
{solutionName}-{uniqueSuffix}-{resourceType} - Add
@descriptiondecorators to all parameters, variables, and resources - Define reusable types in
src/shared/common-types.bicep - Add shared constants and utility functions to
src/shared/constants.bicep - Include comprehensive module header comments documenting purpose, dependencies, and usage
This project is licensed under the MIT License. See the LICENSE file for details.
Copyright (c) 2025 EvilΓ‘zaro Alves