新实例未通过 EC2 部署添加到 ECS

New instances not getting added to ECS with EC2 deployment

我正在使用 CDK 使用 EC2 部署来部署队列处理 ECS 服务。这是我的堆栈

from aws_cdk import core, aws_ecs_patterns, aws_ec2, aws_ecs


class EcsTestStack(core.Stack):

def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
    super().__init__(scope, construct_id, **kwargs)

    _container_image = aws_ecs.ContainerImage.from_asset(
        directory=".",
        file='Dockerfile.ECS_Test',
        exclude=["cdk.out"]
    )

    _scaling_steps = [{"upper": 0, "change": -1}, {"lower": 50, "change": +1}, {"lower": 100, "change": +2}]

    _vpc = aws_ec2.Vpc(self, "ecs-test-vpc-v4", max_azs=3)

    _cluster = aws_ecs.Cluster(self, "ecs-test-cluster-v4", vpc=_vpc)

    _cluster.add_capacity("ecs-autoscaling-capacity-v4",
                          instance_type=aws_ec2.InstanceType("t2.small"),
                          min_capacity=1,
                          max_capacity=3)

    self.ecs_test = aws_ecs_patterns.QueueProcessingEc2Service(
        self,
        "ECS_Test_Pattern_v4",
        cluster=_cluster,
        cpu=512,
        scaling_steps=_scaling_steps,
        memory_limit_mib=256,
        image=_container_image,
        min_scaling_capacity=1,
        max_scaling_capacity=5,
    )

堆栈从服务中的 1 个任务和 1 个 EC2 实例开始。根据我的 _scaling_steps,当队列中的消息数 > 50 时,应该向服务添加一个新任务,并且应该向服务添加 2 个新任务。堆栈以服务中的 1 个任务和 1 个 EC2 实例开始。

但是当我将 200 条新消息添加到队列时,我可以看到 1 个新任务添加到我的服务中,然后我在偶数时收到此错误消息。

service EcsTestStackV4-ECSTestPatternv4QueueProcessingService5C84D200-c00N6R56hB0p was unable to place a task because no container instance met all of its requirements. The closest matching container-instance 81e5380c718c4b558567dc6cc1fb1926 has insufficient CPU units available.

我还注意到没有添加新的 EC2 实例。

问题:如何在服务扩展时将更多 EC2 实例添加到我的集群?

I can see 1 new task added to my service and then I get this error message in the even.

这是因为 t2.small 有 1000 个 CPU 单位。所以你的两个任务都占了他们,没有其他实例可以放置你的额外任务。

I also notice that no new EC2 instances were added.

您设置 min_capacity=1 所以您只有实例。 _scaling_steps 仅适用于任务,不适用于自动缩放组中的实例。如果您想要更多实例,则必须设置 min_capacity=2 或您想要的任何值。

我猜您认为 QueueProcessingEc2Service 可以扩展实例和任务。遗憾的是,情况并非如此。