如何配置VPC端点以使用Terraform访问DynamoDB?

时间:2018-11-09 08:56:32

标签: amazon-web-services terraform vpc routetable

我有一个在AWS VPC中运行的Lambda函数。此Lambda需要访问RDS和DynamoDB,因此需要配置VPC端点才能访问DynamoDB。如on Amazon's blog here所述,我设法使用手动配置使其工作,但是我正在努力使用Terraform将等效的基础架构定义为代码。

我知道我应该在Terraform(文档here)中定义一个aws_vpc_endpoint,但是在为其配置路由表时我有些迷茫。

到目前为止,这是我所拥有的,我不确定这是正确的,并且在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
  }

我还检查了如何通过手动配置创建端点,并且看到它具有具有以下设置的关联路由表:

  • 我的vpc cidr块->本地
  • 0.0.0.0/0-> Internet gw
  • com.amazonaws ... dynamodb-> vpce -...

所以我假设我应该在自己的terraform资源中复制一个等效的配置,但是实际上不知道如何执行该配置。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

您可以仅将端点链接到默认的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}"
  }