как настроить конечную точку VPC для доступа к DynamoDB с помощью Terraform?

У меня есть функция Lambda, работающая в AWS VPC. Этой Lambda требуется доступ как к RDS, так и к DynamoDB, поэтому для нее требуется конечная точка VPC, настроенная для доступа к DynamoDB. Мне удалось заставить его работать, используя ручную настройку, как описано в блоге Amazon здесь, но я изо всех сил пытаюсь определить эквивалентную инфраструктуру в виде кода с использованием Terraform.

Я понимаю, что должен определить aws_vpc_endpoint в Terraform (документы здесь) , но я немного заблудился, когда дело доходит до настройки таблицы маршрутизации для него.

пока что это то, что у меня есть, я не уверен, что это правильно, и я оставил вопросительный знак в конфигурации route_table_ids. Что касается записей, если я не настрою никакую таблицу маршрутизации, конечная точка будет создана правильно, но Lambda не получит доступа к DynamoDB.

  data "aws_vpc" "default" {
    default = true
  }

  resource "aws_vpc_endpoint" "private-dynamodb" {
    vpc_id = "${data.aws_vpc.default.id}"
    service_name = "com.amazonaws.${var.region}.dynamodb"
    route_table_ids = ["${WHAT_SHOULD_I_PUT_HERE?}"]
    policy = <<POLICY
    {
    "Statement": [
        {
        "Action": "*",
        "Effect": "Allow",
        "Resource": "*",
        "Principal": "*"
        }
    ]
    }
    POLICY
  }

Я также проверил, как создается конечная точка с ручной настройкой, и вижу, что у нее есть связанная таблица маршрутизации со следующими настройками:

  • мой блок cidr vpc -> локальный
  • 0.0.0.0/0 -> Интернет gw
  • com.amazonaws ... Dynamodb -> vpce -...

поэтому я предполагаю, что мне следует воспроизвести эквивалентную конфигурацию в моем ресурсе terraform, но на самом деле не имею понятия, как это сделать. Любая помощь приветствуется!


person gru    schedule 09.11.2018    source источник
comment
Это обычная проблема при использовании Terraform. AWS многое делает в фоновом режиме, и когда вам нужно использовать Terraform, вы должны предоставить все самостоятельно. Поскольку я не вижу всю вашу конфигурацию, я не могу помочь вам с помощью фрагмента кода, но вы можете попытаться воспроизвести все изменения в таблице маршрутов, используя terraform.io/docs/providers/aws/r/route.html или даже создайте совершенно новый, чтобы не я что-то напортачил. После этого прикрепите его к списку идентификаторов, например $ {aws_route_table.name.id}.   -  person AlexK    schedule 12.11.2018


Ответы (1)


Вместо создания собственной таблицы маршрутов вы можете просто связать конечную точку с таблицей маршрутов VPC по умолчанию, которую Terraform предоставляет через экспортируемый атрибут VPC main_route_table_id. Вам нужно связать его со своей конечной точкой следующим образом:

  resource "aws_vpc_endpoint_route_table_association" "private-dynamodb" {
    vpc_endpoint_id = "${data.aws_vpc.default.id}"
    route_table_id  = "${data.aws_vpc.default.main_route_table_id}"
  }
person Canjea    schedule 23.07.2019