用例就像 - 开发人员进行一些代码更改,以下事情自动发生 - 构建运行,创建应用程序工件,使用工件生成docker镜像,将图像推送到Docker注册表,更新AWS ECS任务和ECS服务。
我想知道实现上述AWS ECS服务更新自动化的方法是什么。到目前为止,我已使用 -
实现了Jenkins构建的AWS ECS更新
1>从Jenkins运行后构建AWS CLi脚本以更新ECS
2>发布构建操作或管道步骤以调用AWS Lambda函数。我用Java创建了一个Lambda函数来实现它。
请让我以其他方式实现上述目标。谢谢。
答案 0 :(得分:2)
我不断将Docker容器从CircleCI部署到AWS ECS。
部署流程概述如下:
ecs-deploy
ecs-deploy
是一个有用的脚本,用于更新ECS中的Docker镜像。
答案 1 :(得分:0)
答案 2 :(得分:0)
虽然有大量的CI / CD工具,但由于我在推出的初期,我决定编写一个小脚本,而不是让CI / CD管道执行。
以下是我使用ecs-deploy script作为依赖项编写的一键式部署脚本,以实现 docker镜像的滚动部署到 ECS 强>
您可以在开发或构建/部署框中本地运行它,也可以使用Jenkins或一些本地构建工具。
#!/bin/bash
# automatically login to AWS
eval $(aws ecr get-login)
# build local docker image and push repo to AWS
docker build -t <yourlocaldockerimagetag> .
docker tag <yourlocaldockerimagetag>:latest <yourECSRepoURL>:latest
docker -D -l debug push <yourECSRepoURL>:latest
# deploy to ECS
ecs-deploy/ecs-deploy -m 50 -k <access-key> -s <secret-key> -r <aws-region> -c <cluster-name> -n <service-name> -i <yourECSRepoURL>:latest
参数:
确保在此脚本之前安装ecs-deploy。
-m 50告诉它即使节点数下降到50%也可以部署。理想情况下,您可以使用额外的节点进行部署,但如果您无法承担此设置,则可确保部署继续进行。
如果您还使用ELB(负载均衡器),则目标组的默认注销延迟为5分钟,这有点过分。注销延迟是在ECS向您的docker容器发送SIGTERM或SIGINT之前等待现有请求完成的时间。您应该通过转到EC2仪表板中的目标组并单击编辑属性进行编辑来降低此值。否则,您的部署可能需要永远。
答案 3 :(得分:0)
您可以使用Shell脚本来调用aws cli命令来创建cloudformation堆栈,也可以直接在aws cli中调用ECR存储库,任务定义,事件规则和target(用于计划)的create命令。
如果您随后仅使用以下命令在终端上调用此脚本:./setup.sh
,它将立即执行所有命令。
aws ecr create-repository \
--repository-name tasks-${TASK_NAME}-${TASK_ENV} \
;
或cloudformation:
aws cloudformation create-stack \
--stack-name stack-name \
--capabilities CAPABILITY_IAM \
--template-body file://name.yml \
--parameters
ParameterKey=ParamName,ParameterValue=${PARAM_NAME} \
;