PMFR1 - Resource Group Creation
A Pattern Module MAY create Resource Group(s).
A Pattern Module MAY create Resource Group(s).
A Pattern Module SHOULD be built from AVM Resources Modules to establish a standardized code base and improve maintainability. If a valid reason exists, a pattern module MAY contain native resources (“vanilla” code) where it’s necessary. A Pattern Module MUST NOT contain references to non-AVM modules.
A Pattern Module MAY contain and be built using other AVM Pattern Modules. A Pattern Module MUST NOT contain references to non-AVM modules.
An item MUST be logged onto as an issue on the
AVM Central Repo (Azure/Azure-Verified-Modules
)
if a Resource Module does not exist for resources deployed by the pattern module.
If the Resource Module adds no value, see Resource Module functional requirement ID: RMFR2 .
Parameter/variable input names SHOULD contain the resource to which they pertain. E.g., virtualMachineSku
/virtualmachine_sku
A resource module MUST only deploy a single instance of the primary resource, e.g., one virtual machine per instance.
Multiple instances of the module MUST be used to scale out.
A resource module MUST NOT create a Resource Group for resources that require them.
In the case that a Resource Group is required, a module MUST have an input (scope or variable):
targetScope
MUST be set to resourceGroup
or not specified (which means default to resourceGroup
scope)variable
MUST be called resource_group_name
Scopes will be covered further in the respective language specific specifications.
Resource modules support the following optional features/extension resources, as specified, if supported by the primary resource. The top-level variable/parameter names MUST be:
Resource modules MUST implement a common interface, e.g. the input’s data structures and properties within them (objects/arrays/dictionaries/maps), for the optional features/extension resources:
Parameters/variables that pertain to the primary resource MUST NOT use the resource type in the name.
e.g., use sku
, vs. virtualMachineSku
/virtualmachine_sku
Another example for where RPs contain some of their name within a property, leave the property unchanged. E.g. Key Vault has a property called keySize
, it is fine to leave as this and not remove the key
part from the property/parameter name.