3

我计划在 Fargate 上使用 AWS Elastic Container Service 部署 Docker 容器。

我找不到任何有关 docker 容器被暂停和相关计费的有价值信息。

是否可以在 Fargate 上暂停 Docker 容器以节省 CPU/内存费用?用例是不时使用容器,但不想重新生成新容器,只需暂停并恢复现有容器。类似于 DigitalOcean 的快照。

4

1 回答 1

1

正如您可能已经在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
于 2019-02-27T10:55:07.543 回答