0

我正在使用 AWS Code Pipeline、Code Build 创建一个新的 Docker 容器并将其推送到 ECR。

我的应用程序是一个简单直接的基于单个容器的应用程序。有什么方法可以减少当前运行的容器并从 ECS 注册表中重新启动一个新容器(通过代码管道生成代码的输出)。

我尝试了使用 EC2 用户数据的 CloudFormation,一侧是自定义脚本,另一侧是使用 ECS 和任务定义的 CloudFormation(尚未成功)。我强烈认为必须有更明显和更简单的方法。

4

1 回答 1

1

你检查aws ecs过命令行工具吗?它允许编写一个简单的 bash 脚本来更新任务和服务:

cluster='<cluster-id>'
service='<service-id>'
project='<project-name>'
elb='<ELB-id>'

version=$(git rev-parse --short=12 HEAD)

sed "s#{image}#${repo}:app-${version}#g" ./docker-compose.yml | sed "s#{frontend}#${repo}:frontend-${version}#g" | sed "s#{logger}#${repo}:logger-${version}#g"> /tmp/docker-compose.yml
ecs-cli compose --file /tmp/docker-compose.yml --project-name ${project} create

taskDefinition=$(aws ecs list-task-definitions --family-prefix "ecscompose-${project}" --output text --sort DESC | awk '{print $2}' | head -n 1)

if [[ $(aws ecs list-services --cluster "${cluster}" --output text) =~ ${service} ]]; then
    aws ecs update-service --cluster "${cluster}"  --service ${service} --task-definition "$taskDefinition" >> /dev/null
else
    aws ecs create-service --cluster "${cluster}" --service ${service} --task-definition "$taskDefinition" --load-balancers loadBalancerName=${elb},containerName=nginx,containerPort=80 --desired-count 5 --role arn:aws:iam::395910257915:role/ecsServiceRole
fi
于 2017-03-03T21:18:45.340 回答