新实例未通过 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
可以扩展实例和任务。遗憾的是,情况并非如此。
我正在使用 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
可以扩展实例和任务。遗憾的是,情况并非如此。