我计划在 Fargate 上使用 AWS Elastic Container Service 部署 Docker 容器。
我找不到任何有关 docker 容器被暂停和相关计费的有价值信息。
是否可以在 Fargate 上暂停 Docker 容器以节省 CPU/内存费用?用例是不时使用容器,但不想重新生成新容器,只需暂停并恢复现有容器。类似于 DigitalOcean 的快照。
我计划在 Fargate 上使用 AWS Elastic Container Service 部署 Docker 容器。
我找不到任何有关 docker 容器被暂停和相关计费的有价值信息。
是否可以在 Fargate 上暂停 Docker 容器以节省 CPU/内存费用?用例是不时使用容器,但不想重新生成新容器,只需暂停并恢复现有容器。类似于 DigitalOcean 的快照。
正如您可能已经在Task Lifecycle中看到的那样,没有PAUSED
状态,所以不,不可能暂停和恢复任务。
最好的方法是定义一个自动缩放策略,为您管理活动任务,这非常适合节省 CPU/内存费用。
由于您的用例不时需要这些容器,因此诀窍是定义“我如何理解何时需要它们”。例如,您可以将某些内容推入 SQS 队列并仅当队列中至少有 1 个元素时才生成 2 个任务。处理完成后,自动缩放策略将终止任务,您将无需支付任何费用。
使用 CloudFormation,您可以像这样定义目标服务:
ECSTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 2
MinCapacity: 0
ResourceId: !Join ["/", [service, !Ref MyCluster, !GetAtt [MyService, Name]]]
RoleARN: !GetAtt [ EcsAutoScalingRole, Arn ]
ScalableDimension: ecs:service:DesiredCount
ServiceNamespace: ecs
定义放大和缩小的规则
ECSScaleUp:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Join ['-', ['MyService', 'ScaleUpPolicy']]
PolicyType: StepScaling
ScalingTargetId: !Ref ECSTarget
StepScalingPolicyConfiguration:
Cooldown: 30
MetricAggregationType: "Average"
AdjustmentType: "ExactCapacity"
StepAdjustments:
- MetricIntervalLowerBound: 0
ScalingAdjustment: 2
ECSScaleDown:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Join ['-', ['MyService', 'ScaleDownPolicy']]
PolicyType: StepScaling
ScalingTargetId: !Ref ECSTarget
StepScalingPolicyConfiguration:
Cooldown: 30
MetricAggregationType: "Average"
AdjustmentType: "ExactCapacity"
StepAdjustments:
- MetricIntervalUpperBound: -1
ScalingAdjustment: 0
然后定义一个警报来触发自动缩放
ECSSQSAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmName: !Join ['-', [!Ref 'MyService', 'SQSAlarm']]
AlarmDescription: "Trigger ECS Service Scaling based on SQS queue"
Namespace: "AWS/SQS"
MetricName: "ApproximateNumberOfMessagesVisible"
ComparisonOperator: "GreaterThanThreshold"
Dimensions:
- Name: QueueName
Value: !GetAtt [ MyQueue, QueueName]
EvaluationPeriods: 2
Period: 60
Statistic: 'Average'
Threshold: 1
AlarmActions:
- !Ref ECSWorkerScaleUp
- !Ref ECSWorkerScaleDown
OKActions:
- !Ref ECSWorkerScaleUp
- !Ref ECSWorkerScaleDown