Как объясняется в сообщении об ошибке, Terraform обнаружил, что в состоянии все еще присутствуют объекты ресурсов, конфигурации провайдера которых недоступны, и поэтому у него недостаточно информации для уничтожения этих ресурсов.
Inв данном конкретном случае это происходит, потому что в одном из ваших дочерних модулей есть блок конфигурации provider
. Хотя это разрешено для совместимости со старыми версиями Terraform, рекомендуется иметь только блоки provider
в корневом модуле , чтобы они всегда могли пережить любые экземпляры ресурсов, которыми управляет поставщик.
Если вы намерены уничтожить экземпляров ресурса в module.my_module
, то вы должны сделать это перед удалением блока module "my_module"
из корневого модуля. Это одна необычная ситуация, когда мы можем использовать -target
, чтобы помочь Terraform понять, что мы хотим, чтобы он делал:
terraform destroy -target=module.my_module
После того, как все эти объекты будут уничтожены, вы сможете удалить module "my_module"
блокировать, не видя ошибку «Конфигурация провайдера отсутствует», поскольку в состоянии, не зависящем от конфигурации этого провайдера, не будет ни одного экземпляра ресурса.
Если ваша цель - переместить блоки ресурса в другой модуль, возможен другойздесь разрешается использовать terraform mv
, чтобы поручить Terraform отслеживать существующий объект по новому адресу:
terraform mv 'module.my_module.some_resource.resource_name' 'module.other_module.some_resource.resource_name'
Опять же, лучше сделать это до удаления старого модуля, поэтомучто старая конфигурация провайдера остается в наличии до тех пор, пока ей не останется ничего для управления. После того, как вы переместили существующий объект в новый модуль в состоянии и у вас есть блок resource
для него в конфигурации, Terraform должен понимать ваше намерение управлять этим ресурсом с помощью другой конфигурации провайдера, и вы можетебезопасно удалите старый блок module
и, таким образом, блок provider
внутри него.