Automated deployment of a docker on ECS 


ECS is nice, but has plenty of drawbacks (i’m using it since few weeks, and compared to kubernetes it’s a pain in that place..). Deploying a new release is one of the problem, you have to go to the website, add a new task, update the service and so on so forth.

Since I’m lazy and I hate wasting time for automated task, I created a script.


$(aws ecr get-login --no-include-email --region your_region )
docker build -t  your_pacakge .
docker tag your_pacakge your_ecs_repository_url/your_package
docker push your_ecs_repository_url
taskDef=$(aws ecs register-task-definition --cli-input-json file://ecs/task.json | jq -r '.taskDefinition.taskDefinitionArn')
aws ecs update-service --cluster  --service  --task-definition $taskDef 

note:

  • the ecs/task.json is the json you get in the JSON tab when you create the task, copy that one and remove all the fields that have as value null.
  • it requires jq or you have to find a way to parse the output
  • the docker commands URL and TAGS are in the repository page of ecs, you can copy from them.

Similar approach works also with fabric , except the login part (fabric wraps shells, so command are executed one and not saved), thus execute the login in the console before running the fab command.

Annunci

UWSGI avoid logs of health checks


Using UWSGI to run your app is handy, but it logs all the calls to all the urls. If you have a health check you end up having plenty of 200 calls in your log that can be distracting.


route = ^/health donotlog:

where /health (or part of it) is the healthcheck url. This will tell to uwsgi to do not post log at that url.

EDIT Just figured out that you need the pcre library compiled within uwsgi, here the solution SO question (for alpine you need apk install pcre pcre-dev)