我有一个在 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
}
Run Code Online (Sandbox Code Playgroud)
我还检查了如何使用手动配置创建端点,我看到它有一个关联的路由表,其中包含以下设置:
所以我有一个 docker 镜像,它通过主管运行一个 celery worker,并且在单 docker Elastic Beanstalk 上工作得很好(相当长的任务,所以acks late = true,concurrency = 1和prefetch multiplier = 1)。
问题是我想根据工作人员的有效任务负载来扩展实例,而 EB 只允许整体网络和 CPU 负载。
添加一个规则来扩大 CPU 负载工作正常,但我不能保证 EB 在任务中间不会决定缩小。这将触发docker stop并有效地杀死任何无法在短时间内完成的正在运行的芹菜(如果我没记错的话是 10 秒)。
理想情况下,我需要一个基于 CPU 活动和队列中任务的监视器,伪代码如下:
while check interval has passed
if task queue is empty (or workers are not busy)
if running instances is greater than 1
scale down 1 instance
else
if CPU load is higher than threshold
scale up 1 instance
现在的问题是,这种逻辑级别在 …