8

我有一个在 AWS VPC 中运行的 Lambda 函数。此 Lambda 需要同时访问 RDS 和 DynamoDB,因此它需要配置一个 VPC 终端节点以访问 DynamoDB。我已经设法使用手动配置使其工作,如亚马逊博客中所述,但我正在努力使用 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
  }

我还检查了如何使用手动配置创建端点,我看到它有一个关联的路由表,其中包含以下设置:

  • 我的 vpc cidr 块 --> 本地
  • 0.0.0.0/0 --> 互联网网关
  • com.amazonaws...dynamodb --> vpce-...

所以我假设我应该在我的 terraform 资源中复制一个等效的配置,但真的不知道如何去做。任何帮助表示赞赏!

4

1 回答 1

5

无需创建自己的路由表,您只需将端点链接到默认 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}"
  }
于 2019-07-23T02:02:27.330 回答