有人知道我如何在不停机的情况下在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定义。我把它们都包好了,运行了几个月。唯一的问题是停机时间,因此我必须在午夜运行和测试脚本。感谢您的任何提示。
答案 0 :(得分:0)
没有停机时间是“蓝绿色”部署实践的特征...
摘自马丁·福勒(Martin Fowler)的2010年post。
蓝绿色部署方法通过确保您拥有两个 生产环境,尽可能相同。在任何时候之一 他们,例如蓝色,是现场直播。当您准备新的 发布软件后,您将在 绿色环境。软件运行为绿色后 在环境中,您切换路由器,以便所有传入请求都转到 绿色的环境-蓝色的环境现在处于闲置状态。
AWS的弹性beantalk包括对Blue-Green deployments的支持,执行方式略有不同。
CI / CD管道体系结构创建活动副本(绿色) Elastic Beanstalk环境(蓝色)。然后,管道交换URL 在两个环境之间。
CodePipeline将应用程序代码部署到原始代码时 环境-进行测试和维护-临时克隆 环境处理实时流量。一旦部署到蓝色 环境成功,并且完成了代码审查和代码测试, 管道再次在绿色和蓝色之间交换URL 环境。蓝色环境开始为实时路况服务 再次,管道终止了绿色环境。