Не удается импортировать существующую группу ресурсов в состояние terraform из-за ‘конфигурации для импорта целевого объекта не существует’

Вопрос или проблема

Я настраиваю группу ресурсов Azure, если она не существует, используя эту ссылку.

Ниже приведены файлы конфигурации и полученная ошибка.

Могу ли я получить помощь в том, как исправить ошибку, если это возможно?

main.tf

data "external" "rg_check" {
    program = ["/bin/bash","./script.sh"]
    query = {
        group_name = var.RG_NAME
    }
}
resource "azurerm_resource_group" "rg_env" {
    count = data.external.rg_check.result.exists == "true" ? 0 : 1
    name = var.RG_NAME
    location = var.LOCATION
    provider = azurerm.org_env
}

script.sh

#!/bin/bash 

eval "$(jq -r '@sh "GROUP_NAME=\(.group_name)"')"
result=$(az group exists -n $GROUP_NAME)

jq -n --arg exists "$result" '{"exists":$exists}'

import.tf

import {
  to = azurerm_resource_group.rg_env
  id = "/subscriptions/sub_id/resourceGroups/testrg"
  provider = azurerm.org_env
}

ошибка в конвейере

data.external.rg_check:

Планирование завершилось неудачей. Terraform столкнулся с ошибкой при генерации этого плана.

Ошибка: Конфигурация для целевой импорта не существует. Конфигурация для данного импорта azurerm_resource_group.rg_env не существует. Все целевые экземпляры должны иметь связанную конфигурацию для импорта.

##[warning]Не удается найти строку loc для ключа: TerraformPlanFailed

Ответ или решение

Ошибка "Конфигурация для целевого импорта не существует" в Terraform при попытке импортировать существующую ресурсную группу Azure часто возникает из-за отсутствия корректной конфигурации ресурса в файлах Terraform. Давайте подробно разберем, как исправить эту проблему.

1. Понимание проблемы

Ошибка указывает на то, что Terraform не может найти описание ресурса, который вы пытаетесь импортировать, в вашем конфигурационном файле. В вашем случае, это ресурс azurerm_resource_group.rg_env. Прежде чем импортировать существующий ресурс, необходимо убедиться, что конфигурация этого ресурса прописана и соответствует импортируемому объекту.

2. Анализ конфигурации

В вашем файле main.tf вы используете блок azurerm_resource_group с условием на основе внешнего скрипта. Если ресурс группы не существует, то Terraform не создаст его, и вы не сможете выполнить импорт, поскольку соответствующий ресурс не описан в конфигурации.

resource "azurerm_resource_group" "rg_env" {
    count = data.external.rg_check.result.exists == "true" ? 0 : 1
    name  = var.RG_NAME
    location = var.LOCATION
    provider = azurerm.org_env
}

3. Решение проблемы

Чтобы правильно импортировать существующую ресурсную группу, необходимо внести изменения в вашу конфигурацию. Вот пошаговое руководство:

Шаг 1: Убедитесь, что ресурс создан в конфигурации

Перед выполнением импорта уберите условие count из описания ресурса. Это позволит Terraform видеть ресурс, даже если он уже существует в Azure.

resource "azurerm_resource_group" "rg_env" {
    name     = var.RG_NAME
    location = var.LOCATION
    provider = azurerm.org_env
}

Шаг 2: Выполните импорт

С этими изменениями вы сможете выполнить импорт ресурса. Используйте команду:

terraform import azurerm_resource_group.rg_env /subscriptions/sub_id/resourceGroups/testrg

Шаг 3: Примените вашу конфигурацию

После успешного импорта вы можете снова добавить условие для создания новой ресурсной группы, если она не существует.

Советы по улучшению конфигурации

  • Комментарии: Добавьте комментарии в ваш код, чтобы было проще понять логику.
  • Testing: Проверьте ваш скрипт script.sh отдельно, чтобы убедиться, что он правильно возвращает статус существования группы.
  • Логи: Включите более детальное логирование для часных скриптов и Terraform, если это возможно, для упрощения отладки.

Заключение

Эти шаги помогут вам исправить ошибку "Конфигурация для импорта не существует" в Terraform и корректно импортировать существующую ресурсную группу в ваше состояние Terraform. Помните, что четкое описание ресурсов и правильная логика исполнения являются ключевыми аспектами успешного управления инфраструктурой через Terraform.

Оцените материал
Добавить комментарий

Капча загружается...