我正在尝试将一组微服务从Docker Swarm迁移到AWS ECS使用Fargate。 我已经创建了一个ECS集群。此外,我已经使用ECR初始化了仓库,每个仓库都包含一个微服务的镜像。我已经成功地想出了一种方法来创建新的镜像,并将它们推送到ECR中。实际上,每次代码更改时,都会构建,标记和推送一个新的Docker镜像。此外,我创建了一个任务定义,该任务定义链接到一个服务。此任务定义包含一个容器和所有必要的信息。此外,它的服务定义任务将在VPC中运行,并链接到负载均衡器,并具有目标组。我假设每个新部署都使用带有“latest”标签的映像。至此,一切都清晰并且工作得很好。
以下是令我感到困惑的部分。每次构建后,我希望更新服务,以便部署具有更新映像的新任务。我使用以下命令进行cli操作:
我发现了这篇文章(https://aws.amazon.com/blogs/compute/automating-rollback-of-failed-amazon-ecs-deployments/),它提供了一个解决方案。但是,这是一个相当复杂的解决方案,并且假设每个新的部署都由新的任务定义触发,这不是我想要的。
因此,请考虑我上面描述的内容,希望您能回答以下问题:
1) 使用CLI命令(用于自动化目的),是否有一种方法可以指示Fargate在尝试了几次后自动停止当前部署,如果未能部署新任务?
2) 使用CLI命令,是否有一种方法可以监视部署的当前状态?例如,在Docker Swarm上对服务进行服务更新时,终端会生成有关更新过程的实时日志。
以下是令我感到困惑的部分。每次构建后,我希望更新服务,以便部署具有更新映像的新任务。我使用以下命令进行cli操作:
aws ecs update-service --cluster <cluster-name> --service <service-name>
。通常,在执行命令后,我会在事件选项卡下监视部署日志,并使用以下命令检查服务的状态:aws ecs describe-services --cluster <cluster-name> --service <service-name>
。最后,我尝试模拟一种情况,其中新创建的映像包含错误代码。因此,新任务将无法部署。我所见到的是,Fargate将继续尝试(无限制)部署新任务。此外,除事件日志外,describe-services
命令不包含相关信息,除了Fargate正在执行的操作(例如,注册/注销任务)。我很惊讶,我找不到任何机制来告诉Fargate或服务停止部署并回滚到已存在的部署。我发现了这篇文章(https://aws.amazon.com/blogs/compute/automating-rollback-of-failed-amazon-ecs-deployments/),它提供了一个解决方案。但是,这是一个相当复杂的解决方案,并且假设每个新的部署都由新的任务定义触发,这不是我想要的。
因此,请考虑我上面描述的内容,希望您能回答以下问题:
1) 使用CLI命令(用于自动化目的),是否有一种方法可以指示Fargate在尝试了几次后自动停止当前部署,如果未能部署新任务?
2) 使用CLI命令,是否有一种方法可以监视部署的当前状态?例如,在Docker Swarm上对服务进行服务更新时,终端会生成有关更新过程的实时日志。
3)在部署失败后,Fargate 是否有一种方式来发出错误代码、标志或消息的信号?