--- title: RMNFR1 - Module Naming description: Module Specification for the Azure Verified Modules (AVM) program url: /spec/RMNFR1 type: default tags: [ Class-Resource, # MULTIPLE VALUES: this can be "Class-Resource" AND/OR "Class-Pattern" AND/OR "Class-Utility" Type-NonFunctional, # SINGLE VALUE: this can be "Type-Functional" OR "Type-NonFunctional" Category-Naming/Composition, # SINGLE VALUE: this can be "Category-Testing" OR "Category-Telemetry" OR "Category-Contribution/Support" OR "Category-Documentation" OR "Category-CodeStyle" OR "Category-Naming/Composition" OR "Category-Inputs/Outputs" OR "Category-Release/Publishing" Language-Bicep, # MULTIPLE VALUES: this can be "Language-Bicep" AND/OR "Language-Terraform" Language-Terraform, # MULTIPLE VALUES: this can be "Language-Bicep" AND/OR "Language-Terraform" Severity-MUST, # SINGLE VALUE: this can be "Severity-MUST" OR "Severity-SHOULD" OR "Severity-MAY" Persona-Owner, # MULTIPLE VALUES: this can be "Persona-Owner" AND/OR "Persona-Contributor" Lifecycle-Initial, # SINGLE VALUE: this can be "Lifecycle-Initial" OR "Lifecycle-BAU" OR "Lifecycle-EOL" Validation-TBD # SINGLE VALUE (PER LANGUAGE): for Bicep, this can be "Validation-BCP/Manual" OR "Validation-BCP/CI/Informational" OR "Validation-BCP/CI/Enforced" and for Terraform, this can be "Validation-TF/Manual" OR "Validation-TF/CI/Informational" OR "Validation-TF/CI/Enforced" ] priority: 3010 --- ## ID: RMNFR1 - Category: Naming - Module Naming Resource modules **MUST** follow the below naming conventions (all lower case). {{% notice style="important" %}} As part of the module proposal process, the module's approved name is captured both in the module proposal issue AND the related [module index page]({{% siteparam base %}}/indexes) (backed by the corresponding [CSV file](https://github.com/Azure/Azure-Verified-Modules/tree/main/docs/static/module-indexes)). Therefore, **module owners don't need to construct the module's name themselves, instead they need use the name prescribed in the module proposal issue or in the related CSV file, at the time of approval.** {{% /notice %}} {{% notice style="note" %}} We will maintain a set of CSV files in the [AVM Central Repo (`Azure/Azure-Verified-Modules`)](https://github.com/Azure/Azure-Verified-Modules/tree/main/docs/static/module-indexes) with the correct singular names for all resource types to enable checks to utilize this list to ensure repos are named correctly. To see the formatted content of these CSV files with additional information, please visit the [AVM Module Indexes]({{% siteparam base %}}/indexes) page. This will be updated quarterly, or ad-hoc as new RPs/ Resources are created and highlighted via a check failure. {{% /notice %}} ### Bicep Resource Module Naming - Naming convention (module name for registry): `avm/res//` - Example: `avm/res/compute/virtual-machine` or `avm/res/managed-identity/user-assigned-identity` - Segments: - `res` defines this is a resource module - `` is the resource provider's name after the `Microsoft` part, with each word starting with a capital letter separated by dashes, e.g., `Microsoft.Compute` = `compute`, `Microsoft.ManagedIdentity` = `managed-identity`. - `` is the **singular** version of the word after the resource provider, with each word starting with a capital letter separated by dashes, e.g., `Microsoft.Compute/virtualMachines` = `virtual-machine`, **BUT** `Microsoft.Network/trafficmanagerprofiles` = `trafficmanagerprofile` - since `trafficmanagerprofiles` is all lower case as per the ARM API definition. #### Bicep Child Module Naming - Naming convention (module name for registry):`avm/res///` `/` - Example: `avm/res/network/virtual-network/subnet` or `avm/res/storage/storage-account/blob-service/container` - Segments: - `res` defines this is a resource module - `` is the resource provider's name after the `Microsoft` part, with each word starting with a capital letter separated by dashes, e.g., `Microsoft.Network` = `network`. - `` is the **singular** version of the word after the resource provider, with each word starting with a capital letter separated by dashes, e.g., `Microsoft.Network/virtualNetworks` = `virtual-network`. - `` is the **singular** version of the word after the resource provider, with each word starting with a capital letter separated by dashes, e.g., `Microsoft.Network/virtualNetworks/subnets` = `subnet` or `Microsoft.Storage/storageAccounts/blobServices/containers` = `blob-service/container`. ### Terraform Resource Module Naming - Naming convention: - `avm-res--` (module name for registry) - `terraform--avm-res--` (GitHub repository name to meet registry naming requirements) - Example: `avm-res-compute-virtualmachine` or `avm-res-managedidentity-userassignedidentity` - Segments: - `` is a legacy requirement of the Terraform registry. This must be set to `azure` - `res` defines this is a resource module - `` is the resource provider's name after the `Microsoft` part, e.g., `Microsoft.Compute` = `compute`. - `` is the **singular** version of the word after the resource provider, e.g., `Microsoft.Compute/virtualMachines` = `virtualmachine`