DEV Community

Rafael Herik de Carvalho
Rafael Herik de Carvalho

Posted on

Improving Cloud governance using an automated naming generation tool.

Managing cloud assets efficiently is crucial for governance, operational management, and accounting. One of the key challenges is ensuring consistent and meaningful naming of resources, which becomes increasingly complex as your infrastructure grows. Without a standardized naming convention, locating and managing resources can be time-consuming and error-prone, leading to inefficiencies and increased costs.

This article introduces an automated approach to generating resource names using a Terraform provider. This solution simplifies the naming process, ensuring consistency and compliance across your cloud environment. Implementing this automated naming convention lets you quickly locate and manage resources, improve governance, and streamline operational workflows.

Additionally, this approach helps associate cloud usage costs with business teams through chargeback and showback mechanisms. With well-defined naming and metadata tagging conventions, you can more accurately track and allocate expenses, making it easier to manage budgets and optimize resource utilization.

Implementing an automated resource naming solution with Terraform not only saves time and reduces human error but also enhances your overall cloud management strategy, providing clear benefits in governance, operational efficiency, and cost control.

AzureNamingTool

AzureNamingTool was created to help administrators define and manage their naming conventions while providing users with a simple interface for generating compliant names. The tool was developed using a naming pattern based on Microsoft's best practices.

This tool is extensible, and you can apply new components to the name generation and improve the policies used to generate names.

It's an open-source tool, and you can extend it to fit your needs, add extra functionalities, and customize its content. This flexibility puts you in control, and your heart makes the tool adaptable to your unique requirements.

Why Use a Terraform Provider?

Benefits of a Declarative API

Terraform's declarative API offers significant advantages for managing resource naming conventions:

  • Simplicity and Clarity: By defining the desired state of resource names, you can ensure consistency and avoid naming conflicts. Terraform configurations are straightforward, making it easy to understand and manage the naming conventions.

  • Automation: A declarative approach allows for the automation of resource naming, reducing the need for manual intervention and minimizing human error. This automation ensures that all resources follow the defined naming standards automatically.

  • Scalability: As your infrastructure grows, maintaining a consistent naming convention manually becomes increasingly challenging. Terraform's declarative model scales seamlessly, enabling you to manage large and complex environments with ease.

State Management for Naming Convention

Terraform's state management is a powerful feature that tracks the current state of your infrastructure. This capability is particularly beneficial for enforcing naming conventions:

  • Consistency: Terraform maintains a state file that records the names of all resources, ensuring that changes are applied consistently across your environment. This prevents discrepancies and maintains uniformity in resource naming.

  • Version Control: State management allows for versioning, making it possible to track changes to naming conventions over time. This historical insight helps in auditing and compliance, providing a clear record of how resource names have evolved.

  • Conflict Resolution: Terraform's state management helps in detecting and resolving naming conflicts before they occur. By keeping track of the existing resource names, Terraform can prevent duplicate names and ensure that new resources adhere to the naming standards.

Setup the environment

To make the Azure Naming Tool work, you must deploy and configure it. Then, you can start using the Terraform provider.

You must consider the compatibility matrix related to which provider version you can use to communicate with your Azure Naming Tool Api.

Azure Naming Tool

AzureNamingTool offers multiple installations modes, the easiest one is running it in a Container, but you can also deploy it to an App Service: More details here

To use the Terraform provider, you must choose the best installation mode and generate the APIKEY that the provider will use to generate names.

The Terraform provider

I've created a new provider to provide the interface to request names to AzureNamingTool.

The provider's v1.0.0 is quite simple. It cannot manage all the entities, only the resource names.

To see more: Documentation.

How to configure the provider


  terraform {
   required_providers {
     aznamingtool = {
        source = "registry.terrafrom.io/rafaelherik/aznamingtool"
        version = "1.0.0-beta"
   }
 }

provider "aznamingtool" {
  api_key = "YOUR_API_KEY"
  base_url = "http://AZURE_NAMING_TOOL_BASE_URL"
  admin_password = "YOUR_ADMIN_PASSWORD" 
}
Enter fullscreen mode Exit fullscreen mode

How to create a new Azure Resource using a name provided by the naming tool

variable "project_configuration" {
  type = map(string)
  default = {
    resource_environment = "dev"
    resource_location = "euw"
    resource_proj_app_svc = "tnp"
  } 
}
resource "aznamingtool_resource_name" "aznt-rg" {  
  components = merge(var.project_configuration, {
    resource_type= "rg"    
    resource_instance = "1"
  })
}
Enter fullscreen mode Exit fullscreen mode

Using this approach, you can easily configure your projects to reuse properties and automate the resource naming generation. To use the name generated from the aznamingtool_resource_name:



resource "azurerm_resource_group" "az-rg" {
  name     = aznamingtool_resource_name.aznt-rg.resource_name
  location = "West Europe"
}

Enter fullscreen mode Exit fullscreen mode

Your plan result must have similar values:

# aznamingtool_resource_name.aznt-rg will be created
  + resource "aznamingtool_resource_name" "aznt-rg" {
      + components         = {
          + "resource_environment"  = "dev"
          + "resource_instance"     = "1"
          + "resource_location"     = "euw"
          + "resource_proj_app_svc" = "tnp"
          + "resource_type"         = "rg"
        }
      + created_on         = (known after apply)
      + id                 = (known after apply)
      + resource_name      = (known after apply)
      + resource_type_name = (known after apply)
    }

 #azurerm_resource_group.az-rg will be created
 + resource "azurerm_resource_group" "az-rg" {
      + id       = (known after apply)
      + location = "westeurope"
      + name     = (known after apply)
    }

Enter fullscreen mode Exit fullscreen mode

This is a simple example, but both tools are very extensible, and you can configure them to fit your infrastructure requirements. Managing resource names and metadata using tags can help you improve your governance and manage large-scale cloud environments.

Give a detailed look to both documentation to get know more each one of these tools AzureNaminTool aznamintool terraform provider

Top comments (0)