0

我正在使用AWS Code Pipeline,Code Build创建一个新的Docker容器并将其推送到ECR。简单的连续发送程序,用于aws中的docker

我的应用程序是一个简单的直接单容器的基础。下拉当前正在运行的容器并从ECS注册表重新启动一个新的容器(通过代码流水线的代码构建的输出)将会减少摩擦。

我尝试了CloudFormation与EC2用户数据,一方面定制脚本和CloudFormation与ECS与任务定义在另一边(不成功)。我强烈地感到必须有更明显和更简单的方法。

回答

1

你检查了aws ecs command-line tool?它允许编写一个简单的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 
相关问题