首页 > 解决方案 > 你可以通过fargate中的同一个容器将期望计数缩小到0吗

问题描述

我有一个 Fargate 服务,其中有一个运行容器的任务。所以,我的容器是一个定制的管道,它基于 SQS 计数运行。因此,如果所有记录都已处理,那么我会停止容器中的管道。那么,我想知道的是,我可以将所需的服务计数设置为 0,而不是停止管道吗?(此服务是此容器任务的父级)

标签: amazon-web-servicesamazon-ecsaws-fargate

解决方案


是的,一旦过程完成,您可以将欲望计数设置为零,但您需要考虑的事项很少。

  • 一旦完成操作,您的节点进程应该退出
  • Dockerfile 应该有一个有效的入口点 aws-cli
  • Fargate 服务应该有 ecs 服务更新操作

例如 Dockerfile

FROM node:alpine
RUN apk add --no-cache python py-pip

RUN pip install awscli
RUN aws --version
WORKDIR /app
COPY app.js .
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT /entrypoint.sh

当 nodejs 进程从 SQS 完成时,将处理 nodejs 进程并将服务计数设置为 0 的入口点。

#!/bin/sh
# start the node process, but it should exit once it processes all SQS
node app.js
# once process is done, we are good to scale down the service
aws ecs update-service --cluster my-cluster --region us-west-2 --service my-http-service --desired-count 0

将在 1 分钟后退出的示例节点进程 app.js

function intervalFunc() {
  console.log('Container will stop  in 1 minutes');
}

setInterval(intervalFunc, 1500);
setTimeout((function() {
    return process.exit(0);
}), 60000);

所以 Docker 镜像起着重要的作用,节点进程应该退出,否则它将继续运行。


推荐阅读