可能在没有“停止任务”的情况下将docker映像部署到AWS ECS?

时间:2019-07-18 03:33:04

标签: amazon-web-services docker .net-core amazon-ecs

有人知道我如何在不停机的情况下在AWS ECS上部署Docker映像吗? 这是我的具有停机时间版本的可行脚本,

#!/bin/bash
ecr="{accountId}.dkr.ecr.us-west-2.amazonaws.com"
repo="${ecr}/jobapp"
configuration="Debug"
version="1.0.0.0"
endpoint="{url}"
pat="{pat}"

docker build \
  --build-arg CONFIGURATION=${configuration} \
  --build-arg BUILD_VERSION=${version} \
  --build-arg ENDPOINT=${endpoint} \
  --build-arg PAT=${pat} \
  . -t ${repo}:${configuration}-${version} -t ${repo}:${configuration}-latest -f Dockerfile

echo $(aws ecr get-authorization-token --region us-west-2 --output text --query 'authorizationData[].authorizationToken' | base64 -d | cut -d: -f2) | docker login -u AWS ${ecr} --password-stdin

docker push ${repo}:${configuration}-${version} && docker push ${repo}:${configuration}-latest

#stop service, TODO: downtime will happen here
aws ecs list-tasks --cluster jobapp-ecs-dev | jq -r ".taskArns[]" | awk '{print "aws ecs stop-task --cluster jobapp-ecs-dev --task \""$0"\""}' | sh

#run service with latest docker image
aws ecs run-task --cluster jobapp-ecs-dev --task-definition jobapp-task:1

顺便说一句,ECS配置为将1个节点,最少1个节点和最多2个节点作为其群集设置。后面有一个ELB和一个Task定义。我把它们都包好了,运行了几个月。唯一的问题是停机时间,因此我必须在午夜运行和测试脚本。感谢您的任何提示。

1 个答案:

答案 0 :(得分:0)

没有停机时间是“蓝绿色”部署实践的特征...

摘自马丁·福勒(Martin Fowler)的2010年post

  

蓝绿色部署方法通过确保您拥有两个   生产环境,尽可能相同。在任何时候之一   他们,例如蓝色,是现场直播。当您准备新的   发布软件后,您将在   绿色环境。软件运行为绿色后   在环境中,您切换路由器,以便所有传入请求都转到   绿色的环境-蓝色的环境现在处于闲置状态。

AWS的弹性beantalk包括对Blue-Green deployments的支持,执行方式略有不同。

  

CI / CD管道体系结构创建活动副本(绿色)   Elastic Beanstalk环境(蓝色)。然后,管道交换URL   在两个环境之间。

     

CodePipeline将应用程序代码部署到原始代码时   环境-进行测试和维护-临时克隆   环境处理实时流量。一旦部署到蓝色   环境成功,并且完成了代码审查和代码测试,   管道再次在绿色和蓝色之间交换URL   环境。蓝色环境开始为实时路况服务   再次,管道终止了绿色环境。