Фильтр тегов data.aws_subnets применяется со значением “Private”, но не “Public”

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

Описание

У меня есть VPC с 2 публичными подсетями и 2 приватными подсетями в EC2 VPC. Я пытаюсь отфильтровать декларацию data.aws_subnets только до публичных подсетей, используя фильтр по тегам согласно документации. Это работает как задумано, когда значение “public”, но не работает, когда значение фильтра тегов “Public”.

Я пытаюсь выяснить, почему это происходит и является ли “Public” зарезервированным словом для Terraform или AWS.

Terraform

data "aws_vpc" "env_default" {
  cidr_block = var.default_vpc_cidr[var.env_name]
}

data "aws_subnets" "public_subnets" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.env_default.id]
  }

  tags = {
    Tier = "Public"
  }
}

data "aws_subnets" "private_subnets" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.env_default.id]
  }

  tags = {
    Tier = "Private"
  }
}

Вывод консоли

> module.defaults.test_3
{
  "filter" = toset([
    {
      "name" = "vpc-id"
      "values" = toset([
        "vpc-0a017736383e3fb28",
      ])
    },
  ])
  "id" = "us-west-2"
  "ids" = tolist([
    "subnet-0374050527a12267f",
    "subnet-00c787547c5ee8a08",
  ])
  "tags" = tomap({
    "Tier" = "Private"
  })
  "timeouts" = null /* объект */
}
> module.defaults.test_2
{
  "filter" = toset([
    {
      "name" = "vpc-id"
      "values" = toset([
        "vpc-0a017736383e3fb28",
      ])
    },
  ])
  "id" = "us-west-2"
  "ids" = tolist([
    "subnet-0374050527a12267f",
    "subnet-0ea230b36bf53ffa5",
    "subnet-00c787547c5ee8a08",
    "subnet-0b40a33beb489cae5",
  ])
  "tags" = tomap(null) /* строка */
  "timeouts" = null /* объект */
}

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

Вопрос, который вы поднимаете, касается фильтрации подсетей в AWS с использованием тэгов в Terraform, и вы заметили, что значение "Public" не работает так, как ожидалось, в отличие от "public". Рассмотрим несколько наиболее вероятных причин этой проблемы и дам рекомендации по ее решению.

Причины проблемы

  1. Чувствительность к регистру:
    В AWS и Terraform теги различают регистр. Это означает, что "Public" и "public" воспринимаются как разные значения. Убедитесь, что в ваших подсетях действительно установлены теги именно с таким регистром, который вы используете в коде. Можете проверить это в AWS Management Console.

  2. Неправильное назначение тегов:
    Возможно, вы забыли назначить тег "Tier" со значением "Public" на ваши публичные подсети. Вы можете использовать AWS CLI или AWS Management Console, чтобы убедиться, что эти теги действительно применяются к вашим ресурсам.

  3. Кеширование данных:
    Если вы недавно изменили теги или создавали новые подсети, обратите внимание, что Terraform может кешировать данные. Для решения этой проблемы выполните команду terraform refresh, чтобы обновить состояние кэша.

Рекомендации по решению проблемы

  1. Проверьте и обновите теги:
    Убедитесь, что у вас есть подсети с правильными тегами. Если ваши публичные подсети имеют тег "Tier" со значением "public", измените ваш код на следующее:

    data "aws_subnets" "public_subnets" {
     filter {
       name   = "vpc-id"
       values = [data.aws_vpc.env_default.id]
     }
    
     tags = {
       Tier = "public"  # Изменено с "Public" на "public"
     }
    }
  2. Проверьте консоль AWS:
    Используйте AWS Management Console, чтобы проверить текущее состояние тегов ваших подсетей. Убедитесь, что они соответствуют тем, которые вы используете в Terraform.

  3. Перепроверьте ваш код:
    Убедитесь, что код Terraform не выдает ошибок при применении, и все зависимости правильно настроены. После внесения изменений запустите terraform apply, чтобы проверить, работает ли фильтрация как ожидалось.

Заключение

Проблема с фильтрацией данных по тегам в Terraform часто связана с неправильной настройкой тегов или их регистром. Убедитесь, что текущее состояние ваших подсетей соответствует вашим ожиданиям, и внесите необходимые изменения в код Terraform. Если после этих шагов проблема не разрешится, рекомендуется детально просмотреть вывод terraform apply на наличие других возможных ошибок или предупреждений.

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

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