Вопрос или проблема
Все, что я пытаюсь сделать, это создать группу ресурсов Azure, если она не существует. Ниже приведены файлы для справки и ошибка, которую я вижу, могу ли я получить помощь в исправлении ошибки, если это возможно.
Ссылка, которой я руководствуюсь: https://stackoverflow.com/questions/66811054/how-to-create-azurerm-resourcegroup-through-terraform-only-when-it-does-not-exis
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: Чтение… data.external.rg_check: Чтение завершено через 6s [id=-]
Планирование не удалось. Terraform столкнулся с ошибкой при генерации этого плана.
╷ │ Ошибка: Конфигурация для целевой импорта не существует │ │ Конфигурация для данного импорта azurerm_resource_group.rg_env не существует. Все целевые экземпляры должны иметь связанную конфигурацию для импорта. ╵
##[warning]Не удалось найти строку loc для ключа: TerraformPlanFailed
##[error]Ошибка: TerraformPlanFailed 1
Ответ или решение
Вопрос, с которым вы столкнулись, касается импорта существующей группы ресурсов Azure в состояние Terraform, и ошибка, которую вы наблюдаете, указывает на отсутствие конфигурации для целевого импорта. Давайте разберем вашу ситуацию более подробно и рассмотрим, как можно устранить эту проблему.
Понимание ошибки
Сообщение об ошибке Configuration for import target does not exist
говорит о том, что Terraform не может найти конфигурацию для ресурса, который вы пытаетесь импортировать. В вашем случае вы пытаетесь импортировать ресурс группы ресурсов Azure, но конфигурация для этого ресурса не была правильно определена в ваших файлах .tf
.
Обзор вашего кода
-
Файл
main.tf
:
Вы используете внешний ресурс для проверки существования группы ресурсов. Если группа не существует, Terraform создаст новый ресурс, однако данный ресурс зафиксирован с помощьюcount
, что может быть проблематичным для импорта.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 }
-
Файл
import.tf
:
В данном файле вы указываете конфигурацию для импорта:import { to = azurerm_resource_group.rg_env id = "/subscriptions/sub_id/resourceGroups/testrg" provider = azurerm.org_env }
Решение проблемы
Основная проблема заключается в том, что использование count
в вашем ресурсе azurerm_resource_group
и последующее объявление ресурса в блоке import
создает конфликт. Когда ресурс имеет count = 0
, Terraform не считывает его конфигурацию, и это вызывает ошибку при импорте.
Шаги по устранению ошибки
-
Уберите
count
из определения ресурса:
Вместо использованияcount
, вы можете использовать условие для создания существующего ресурса. Например, вы можете убратьcount
, и добавлять ресурс только если он не существует, используяlifecycle
:resource "azurerm_resource_group" "rg_env" { name = var.RG_NAME location = var.LOCATION provider = azurerm.org_env lifecycle { prevent_destroy = true } }
-
Сделайте импорт до применения конфигурации:
При импорте группы ресурсов убедитесь, что у вас есть правильная конфигурация, которая уже описывается вmain.tf
. Сначала выполните импорт, а затем сделайтеterraform apply
.terraform import azurerm_resource_group.rg_env "/subscriptions/sub_id/resourceGroups/testrg"
-
Проверка:
После импорта убедитесь, что ваши переменныеvar.RG_NAME
иvar.LOCATION
точно совпадают с существующей группой ресурсов, чтобы избежать конфликтов в будущем.
Заключение
Соблюдая вышеперечисленные шаги, вы сможете успешно импортировать существующую группу ресурсов Azure в состояние Terraform. Убедитесь, что конфигурация вашего ресурса всегда соответствует реальному состоянию, что позволяет избежать подобных ошибок в будущем.
Для дальнейшего изучения и установки Terraform, вы можете ознакомиться с официальной документацией, что поможет вам углубить ваши знания о работе с Azure и Terraform.