“Неожиданные дополнительные операторы после адреса” при импорте terraform

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

У меня есть такая конфигурация в моем модуле Terraform, названном cluster:

resource "aws_vpc_security_group_ingress_rule" "eks_cluster_https" {
  for_each                 = toset(var.cidr_blocks)
  description              = "Разрешить доступ к кластеру"
  security_group_id        = aws_security_group.eks-cluster.id
  cidr_ipv4                = each.key
  from_port                = 443
  ip_protocol              = "tcp"
  to_port                  = 443
}

В файле переменных два CIDR блока заданы так (я придумал их по соображениям безопасности):

cidr_blocks = ["15.0.0.0/8", "120.61.0.0/16"]

Эти две правила группы безопасности уже существуют в учетной записи AWS. Я хочу импортировать их в Terraform. Я использую эту команду для импорта первого:

terraform import 'cluster.aws_vpc_security_group_ingress_rule.eks_cluster_https["15.0.0.0/8"]' sgr-0bdc5cc08c70f13c3

Но когда я запускаю эту команду, я получаю следующую ошибку:

│ Ошибка: Неверный адрес
│ 
│   на <import-address> строка 1:
│    1: cluster.aws_vpc_security_group_ingress_rule.eks_cluster_https["15.0.0.0/8"]
│ 
│ Неожиданные дополнительные операторы после адреса.

Я не могу понять, что не так. Я пробовал множество вариантов одинарных и двойных кавычек и экранирование кавычек. Что не так с этой командой?

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

Ошибка "Unexpected extra operators after address" в Terraform при использовании команды terraform import может возникнуть из-за неправильного синтаксиса указания адреса ресурса. В приведенном вами примере вы пытаетесь импортировать правило входящего трафика для группы безопасности кластера EKS, но формат команды импорта некорректен.

Подробный разбор проблемы

Согласно вашему коду, ресурс aws_vpc_security_group_ingress_rule использует for_each, что создает множество экземпляров этого ресурса на основе заданных CIDR блоков. Однако, в Terraform, когда вы работаете с множественными ресурсами через for_each, синтаксис импорта немного отличается от обычного.

Вы правильно указали идентификатор правила группы безопасности в AWS (sgr-0bdc5cc08c70f13c3), но неправильно сформировали путь к ресурсам. В этой ситуации не будет работать обращение к ресурсу с указанием ключа.

Как правильно импортировать ресурс?

Для успешного импорта конкретного экземпляра ресурса с использованием for_each, вам нужно указать его индекс, как это сделано в следующем примере:

  1. Правильный синтаксис:

    terraform import 'module.cluster.aws_vpc_security_group_ingress_rule.eks_cluster_https["15.0.0.0/8"]' sgr-0bdc5cc08c70f13c3

    Обратите внимание на использование правильного пути к ресурсу, который включает название модуля (module.cluster), а также правильные кавычки.

  2. Убедитесь, что CIDR блок присутствует в cidr_blocks:

    Убедитесь, чтоCIDR блок, который вы пытаетесь импортировать, на самом деле присутствует в переменной cidr_blocks. Terraform должен знать, что этот CIDR блок существует, иначе он не сможет создать корректный атрибут для импортирования.

  3. Проверка текущих ресурсов:

    Перед импортом рекомендуется запустить команду terraform plan, чтобы убедиться, что инфраструктура сведена к актуальному состоянию и все ресурсы правильно определены.

Заключение

Ошибка "Unexpected extra operators after address" в Terraform при попытке импорта ресурса часто связана с неправильным синтаксисом пути к ресурсу. Убедитесь, что выделяете название модуля и правильно указываете ключи в выражении for_each. Следуя приведенным выше рекомендациям, вы сможете успешно импортировать существующие ресурсы в вашу Terraform конфигурацию.

Если ошибка продолжает возникать, стоит пересмотреть конфигурацию и проверить корректность идентификаторов ресурсов в AWS.

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

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