# hashicorp/terraform-provider-azurerm architecture

> Architecture diagram of the GitHub repository hashicorp/terraform-provider-azurerm, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hashicorp/terraform-provider-azurerm
- Repository: https://github.com/hashicorp/terraform-provider-azurerm

## Overview

AzureRM is a Terraform provider for configuring and managing Azure Resource Manager resources. Terraform supplies provider configuration and resource operations; the provider builds authenticated clients, registers service-specific resources and data sources, and their lifecycle handlers call Azure APIs and map responses back to Terraform state. The tree documents broad coverage across application hosting, storage, data protection, integration, and platform services. Source excerpts are partial, so the graph captures the documented provider structure and representative service paths rather than asserting every internal call.

Main entry points: [`internal/provider/services.go`](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/services.go) (Service registry), [`internal/clients/client.go`](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/clients/client.go) (Azure clients), [`internal/provider/provider.go`](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/provider.go) (Provider entry), [`internal/provider/framework/provider.go`](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/framework/provider.go) (Framework adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Terraform interface"]
  node_provider["Provider entry<br/>[provider.go]"]
  node_framework["Framework adapter<br/>[provider.go]"]
  node_sdk["Resource lifecycle SDK<br/>[resource.go]"]
  node_functions["Resource ID functions"]
end

subgraph group_core["Provider core"]
  node_features["Provider features<br/>[features.go]"]
  node_client_builder["Client builder<br/>[builder.go]"]
  node_auth["Authentication<br/>[auth.go]"]
  node_clients["Azure clients<br/>[client.go]"]
  node_service_registry["Service registry<br/>[services.go]"]
  node_preflight["Preflight validation<br/>[validate.go]"]
end

subgraph group_apps["Applications and data"]
  node_appservice["App Service resources<br/>[registration.go]"]
  node_storage["Storage resources"]
  node_machinelearning["ML datastore"]
  node_dataprotection["Backup policies"]
  node_datafactory["Data Factory links"]
end

subgraph group_platform["Azure platform services"]
  node_apimanagement["API Management<br/>[registration.go]"]
  node_authorization["Authorization<br/>[registration.go]"]
  node_iothub["IoT Hub endpoints"]
  node_frontdoor["Front Door rules"]
end

node_terraform(("Terraform Core"))
node_azure(("Azure Resource Manager"))

node_terraform -->|"configures and operates"| node_provider
node_provider -->|"sets defaults"| node_features
node_provider -->|"builds clients"| node_client_builder
node_client_builder -->|"resolves credentials"| node_auth
node_client_builder -->|"creates"| node_clients
node_provider -->|"registers services"| node_service_registry
node_provider -->|"exposes provider"| node_framework
node_framework -->|"adapts lifecycle"| node_sdk
node_framework -->|"validates configuration"| node_preflight
node_terraform -->|"invokes"| node_functions
node_service_registry -->|"registers"| node_appservice
node_service_registry -->|"registers"| node_storage
node_service_registry -->|"registers"| node_machinelearning
node_service_registry -->|"registers"| node_dataprotection
node_service_registry -->|"registers"| node_datafactory
node_service_registry -->|"registers"| node_apimanagement
node_service_registry -->|"registers"| node_authorization
node_service_registry -->|"registers"| node_iothub
node_service_registry -->|"registers"| node_frontdoor
node_appservice -->|"uses service clients"| node_clients
node_storage -->|"uses service clients"| node_clients
node_machinelearning -->|"uses service clients"| node_clients
node_dataprotection -->|"uses service clients"| node_clients
node_datafactory -->|"uses service clients"| node_clients
node_apimanagement -->|"uses service clients"| node_clients
node_authorization -->|"uses service clients"| node_clients
node_iothub -->|"uses service clients"| node_clients
node_frontdoor -->|"uses service clients"| node_clients
node_appservice -->|"manages resources"| node_azure
node_storage -->|"manages resources"| node_azure
node_machinelearning -->|"manages datastores"| node_azure
node_dataprotection -->|"manages backups"| node_azure
node_datafactory -->|"manages linked services"| node_azure
node_apimanagement -->|"manages APIs"| node_azure
node_authorization -->|"manages access"| node_azure
node_iothub -->|"updates routing"| node_azure
node_frontdoor -->|"configures rules"| node_azure

click node_provider "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/provider.go"
click node_framework "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/framework/provider.go"
click node_sdk "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/sdk/resource.go"
click node_functions "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/function/parse_resource_id.go"
click node_features "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/features.go"
click node_client_builder "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/clients/builder.go"
click node_auth "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/clients/auth.go"
click node_clients "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/clients/client.go"
click node_service_registry "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/services.go"
click node_preflight "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/preflight/validate.go"
click node_appservice "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/appservice/registration.go"
click node_storage "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/storage/storage_account_resource.go"
click node_machinelearning "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/machinelearning/machine_learning_datastore_blobstorage_resource.go"
click node_dataprotection "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/dataprotection/data_protection_backup_policy_blob_storage_resource.go"
click node_datafactory "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/datafactory/data_factory_linked_service_azure_blob_storage_resource.go"
click node_apimanagement "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/apimanagement/registration.go"
click node_authorization "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/authorization/registration.go"
click node_iothub "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/iothub/iothub_endpoint_storage_container_resource.go"
click node_frontdoor "https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/frontdoor/frontdoor_rules_engine_resource.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_provider,node_framework,node_sdk,node_functions toneBlue
class node_features,node_client_builder,node_auth,node_clients,node_service_registry,node_preflight toneAmber
class node_appservice,node_storage,node_machinelearning,node_dataprotection,node_datafactory toneMint
class node_apimanagement,node_authorization,node_iothub,node_frontdoor toneRose
class node_terraform,node_azure toneIndigo
```

## Components

### Terraform interface

- [Provider entry](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/provider.go): `internal/provider/provider.go`
- [Framework adapter](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/framework/provider.go): `internal/provider/framework/provider.go`
- [Resource lifecycle SDK](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/sdk/resource.go): `internal/sdk/resource.go`
- [Resource ID functions](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/function/parse_resource_id.go): `internal/provider/function/parse_resource_id.go`

### Provider core

- [Provider features](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/features.go): `internal/provider/features.go`
- [Client builder](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/clients/builder.go): `internal/clients/builder.go`
- [Authentication](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/clients/auth.go): `internal/clients/auth.go`
- [Azure clients](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/clients/client.go): `internal/clients/client.go`
- [Service registry](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/provider/services.go): `internal/provider/services.go`
- [Preflight validation](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/preflight/validate.go): `internal/preflight/validate.go`

### Applications and data

- [App Service resources](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/appservice/registration.go): `internal/services/appservice/registration.go`
- [Storage resources](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/storage/storage_account_resource.go): `internal/services/storage/storage_account_resource.go`
- [ML datastore](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/machinelearning/machine_learning_datastore_blobstorage_resource.go): `internal/services/machinelearning/machine_learning_datastore_blobstorage_resource.go`
- [Backup policies](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/dataprotection/data_protection_backup_policy_blob_storage_resource.go): `internal/services/dataprotection/data_protection_backup_policy_blob_storage_resource.go`
- [Data Factory links](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/datafactory/data_factory_linked_service_azure_blob_storage_resource.go): `internal/services/datafactory/data_factory_linked_service_azure_blob_storage_resource.go`

### Azure platform services

- [API Management](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/apimanagement/registration.go): `internal/services/apimanagement/registration.go`
- [Authorization](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/authorization/registration.go): `internal/services/authorization/registration.go`
- [IoT Hub endpoints](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/iothub/iothub_endpoint_storage_container_resource.go): `internal/services/iothub/iothub_endpoint_storage_container_resource.go`
- [Front Door rules](https://github.com/hashicorp/terraform-provider-azurerm/blob/main/internal/services/frontdoor/frontdoor_rules_engine_resource.go): `internal/services/frontdoor/frontdoor_rules_engine_resource.go`

### Other components

- **Terraform Core**
- **Azure Resource Manager**

## Connections

- Terraform Core → Provider entry: configures and operates
- Provider entry → Provider features: sets defaults
- Provider entry → Client builder: builds clients
- Client builder → Authentication: resolves credentials
- Client builder → Azure clients: creates
- Provider entry → Service registry: registers services
- Provider entry → Framework adapter: exposes provider
- Framework adapter → Resource lifecycle SDK: adapts lifecycle
- Framework adapter → Preflight validation: validates configuration
- Terraform Core → Resource ID functions: invokes
- Service registry → App Service resources: registers
- Service registry → Storage resources: registers
- Service registry → ML datastore: registers
- Service registry → Backup policies: registers
- Service registry → Data Factory links: registers
- Service registry → API Management: registers
- Service registry → Authorization: registers
- Service registry → IoT Hub endpoints: registers
- Service registry → Front Door rules: registers
- App Service resources → Azure clients: uses service clients
- Storage resources → Azure clients: uses service clients
- ML datastore → Azure clients: uses service clients
- Backup policies → Azure clients: uses service clients
- Data Factory links → Azure clients: uses service clients
- API Management → Azure clients: uses service clients
- Authorization → Azure clients: uses service clients
- IoT Hub endpoints → Azure clients: uses service clients
- Front Door rules → Azure clients: uses service clients
- App Service resources → Azure Resource Manager: manages resources
- Storage resources → Azure Resource Manager: manages resources
- ML datastore → Azure Resource Manager: manages datastores
- Backup policies → Azure Resource Manager: manages backups
- Data Factory links → Azure Resource Manager: manages linked services
- API Management → Azure Resource Manager: manages APIs
- Authorization → Azure Resource Manager: manages access
- IoT Hub endpoints → Azure Resource Manager: updates routing
- Front Door rules → Azure Resource Manager: configures rules
