0

用例就像 - 开发人员进行一些代码更改并且下面的事情自动发生 - 构建运行,创建应用程序工件,使用工件生成的docker图像,将图像推送到Docker注册表,AWS ECS任务和ECS服务已更新。AWS ECS - 部署容器的方法

我想知道如何实现上述AWS ECS服务自动更新的方法。截至目前,我已经使用Jenkins构建实施了AWS ECS更新 -
1>从Jenkins运行构建AWS CLi脚本以更新ECS
2>构建后操作或管道步骤以调用AWS Lambda函数。我已经在Java中创建了一个Lambda函数来实现它。

请让我以其他方式实现上述目标。谢谢。

+0

你只是想更新服务?如果是这样的话:http://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html – Snarf

回答

1

我不断将Docker容器从CircleCI部署到AWS ECS。

部署流程的概要如下:

  1. 构建和标记一个新的码头工人形象
  2. 登录到AWS ECR,推动图像ECS的
  3. 更新任务定义和服务ecs-deploy

ecs-deploy是一个有用的脚本,用于更新ECS中的Docker镜像。

https://github.com/silinternational/ecs-deploy

0

虽然有很多的CI/CD工具在那里,因为我在我的早期推出,我决定写一个小脚本,而不是有CI/CD管道这样做。

这里是一个一键部署脚本中,我使用ecs-deploy script作为依赖,实现了泊坞窗图像的滚动部署到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您的群集名称
  • 服务名称:你曾在ECS
  • yourECSRepoURL创建您的服务名称:ECS Repository URL
  • yourlocaldockerimagetag:任何地方形象的标签名
  • 访问键:为部署
  • 您的AWS访问键
  • 的密钥:您的AWS密钥

请务必在此之前安装ecs-deploy脚本。

-m 50告诉它即使节点数量下降到50%也可以部署。理想情况下,您将有一个额外的节点来部署,但如果您无法负担这种设置,这将确保部署继续发生。

如果您还使用ELB(负载平衡器),则目标组的默认取消注册延迟为5分钟,这有点过分。解除注册延迟是等待现有请求完成的时间,然后ECS会向您的码头容器发送SIGTERM或SIGINT。您应该通过转到EC2仪表板中的目标组来降低此值,然后单击编辑属性进行编辑。否则,您的部署可能会永远存在。