Home > Blockchain >  A resource with the ID "/subscriptions/.../resourceGroups/rgaks/providers/Microsoft.Storage/sto
A resource with the ID "/subscriptions/.../resourceGroups/rgaks/providers/Microsoft.Storage/sto

Time:12-29

I have created storage account and container inside it to store my aks backup using terraform. I have created child module for the storage account and container.I am creating the storage account and continer calling it from root module from "main.tf".i have created two modules such as module Ex:"module aks_backup_storage" and "module aks_backup_conatiner". The module have been created successfully after applying the terraform command "terraform apply" but at the end it is raising the following errors are mentioned bellow in the console.

A resource with the ID "/subscriptions/...../resourceGroups/rg-aks-backup-storage/providers/Microsoft.Storage/storageAccounts/aksbackupstorage" already exists - to be managed via Terraform this resource needs to be imported into the State. Please see the resource documentation for "azurerm_storage_account" for more information.
failed creating container: failed creating container: containers.Client#Create: Failure sending request: StatusCode=409 -- Original Error: autorest/azure: Service returned an error. Status=<nil> Code="ContainerAlreadyExists" Message="The specified container already exists.\nRequestId:f.........\nTime:2022-12-28T12:52:08.2075701Z"

root module

module "aks_backup_storage" {
  source                         = "../modules/aks_pv_storage_container"
  rg_aks_backup_storage          = var.rg_aks_backup_storage
  aks_backup_storage_account     = var.aks_backup_storage_account
  aks_backup_container           = var.aks_backup_container
  rg_aks_backup_storage_location = var.rg_aks_backup_storage_location
  aks_backup_retention_days      = var.aks_backup_retention_days
}

Child module


resource "azurerm_resource_group" "rg_aksbackup" {
  name     = var.rg_aks_backup_storage
  location = var.rg_aks_backup_storage_location
}

resource "azurerm_storage_account" "aks_backup_storage" {
  name                      = var.aks_backup_storage_account
  resource_group_name       = var.rg_aks_backup_storage
  location                  = var.rg_aks_backup_storage_location
  account_kind              = "StorageV2"
  account_tier              = "Standard"
  account_replication_type  = "ZRS"
  access_tier               = "Hot"
  enable_https_traffic_only = true
  min_tls_version           = "TLS1_2"
  #allow_blob_public_access  = false
  allow_nested_items_to_be_public = false
  is_hns_enabled                  = false 
  blob_properties {

    container_delete_retention_policy {
      days = var.aks_backup_retention_days
    }

    delete_retention_policy {
      days = var.aks_backup_retention_days
    }
  }
}


# Different container can be created for the different backup level such as cluster, Namespace, PV
resource "azurerm_storage_container" "aks_backup_container" {
  #name                 = "aks-backup-container"
  name                 = var.aks_backup_container
  #storage_account_name = azurerm_storage_account.aks_backup_storage.name
  storage_account_name= var.aks_backup_storage_account
}

I have also try to import the resource using the bellow command

terraform import ['azurerm_storage_account.aks_backup_storage /subscriptions/a3ae2713-0218-47a2-bb72-c6198f50c56f/resourceGroups/rg-aks-backup-storage/providers/Microsoft.Storage/storageAccounts/aksbackupstorage']

But it also saying ZSH command not found

zsh: no matches found: [azurerm_storage_account.aks_backup_storage /subscriptions/a3ae2713-0218-47a2-bb72-c6198f50c56f/resourceGroups/rg-aks-backup-storage/providers/Microsoft.Storage/storageAccounts/aksbackupstorage/]

I had no issue when i was creating the resources using the same code without declaring any module.

Now, I have several modules in root module in the main.tf file

here is my project directory structure enter image description here

I really appreciate any suggestions thanks in advance

variable.tf

variable "rg_aks_backup_storage" {
  type        = string
  description = "storage account name for the backup"
  default     = "rg-aks-backup-storage"
}

variable "aks_backup_storage_account" {
  type        = string
  description = "storage account name for the backup"
  default = "aksbackupstorage"
}

variable "aks_backup_container" {
  type        = string
  description = "storage container name "
  #default     = "aks-storage-container"
  default = "aksbackupstoragecontaine"
}

variable "rg_aks_backup_storage_location" {
  type    = string
  default = "westeurope"
}

variable "aks_backup_retention_days" {
  type    = number
  default = 90
}

CodePudding user response:

The storage account name that you use must be unique within Azure (see naming restrictions). I checked, and the default storage account name that you are using is already taken. Have you tried changing the name to something you know is unique?

A way to consistently do this would be to add a random suffix at the end of the name, eg:

resource "random_string" "random_suffix" {
  length  = 6
  special = false
  upper   = false
}

resource "azurerm_storage_account" "aks_backup_storage" {
  name = join("", tolist([var.aks_backup_storage_account, random_string.random_suffix.result]))
...
}

CodePudding user response:

I also received the same error when I tried to run terraform apply while creating container registry.

enter image description here

It usually occurs when the terraform state file (running locally) does not match the Portal terraform state file resources.

Even if a resource with the same name does not exist in the portal or resource group, it will appear in terraform state files if it was deployed previously. If you've received these types of issues, verify the tf state file in portal. If the resource is not existent, use the following command to import it.

Note: Validate that the terraform state files are identical. Run terraform init & terraform apply once you are done with the changes.

To resolve this error, Use terraform import .

Here I tried to import the container registry (let's say) and it imported successfully.

terraform import azurerm_container_registry.acr "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroup>/providers/Microsoft.ContainerRegistry/registries/xxxxcontainerRegistry1"

Output:

enter image description here

After that I applied terraform apply and successfully deployed the resource without any errors.

enter image description here

Deployed successfully in Portal:

enter image description here

  • Related