Docker on Amazon ECS with AWS Fargate using CloudFormation. https://devteds.com/episodes/9-docker-on-amazon-ecs-using-cloudformation
Devteds Episode #9
Create and run docker container on Amazon ECS using CloudFormation and CLI.
Visit https://devteds.com to watch all the episodes
Announcement: Course on Kubernetes
If you're want to start deploying your containers to Kubernetes, especially on AWS EKS, check this course on Kubernetes that walkthrough creating Kubernetes cluster on AWS EKS using Terraform and deploying multiple related containers applications to Kubernetes and more. https://courses.devteds.com/kubernetes-get-started
mkdir ~/projs
git clone https://github.com/devteds/e9-cloudformation-docker-ecs.git docker-on-ecs
cd docker-on-ecs
# Run on local
docker build -t books-api ./app/
docker run -it -p 4567:4567 --rm books-api:latest
open http://localhost:4567/
open http://localhost:4567/stat
open http://localhost:4567/api/books
aws ecr create-repository --repository-name books-api
aws ecr get-login --no-include-email | sh
IMAGE_REPO=$(aws ecr describe-repositories --repository-names books-api --query 'repositories[0].repositoryUri' --output text)
docker tag books-api:latest $IMAGE_REPO:v1
docker push $IMAGE_REPO:v1
aws cloudformation create-stack --template-body file://$PWD/infra/vpc.yml --stack-name vpc
aws cloudformation create-stack --template-body file://$PWD/infra/iam.yml --stack-name iam --capabilities CAPABILITY_IAM
aws cloudformation create-stack --template-body file://$PWD/infra/app-cluster.yml --stack-name app-cluster
# Edit the api.yml to update Image tag/URL under Task > ContainerDefinitions and,
aws cloudformation create-stack --template-body file://$PWD/infra/api.yml --stack-name api
Copy the BooksApiEndpoint
value from api
stack output on AWS Management Console. Make a request to that URL on browser or any REST client.
There isn't a cleaner way to deploy application changes (container) with CloudFormation, especially if you prefer the same image tag (eg: latest, green, prod etc). There are a few different options,
./deploy_app.sh
script.# ./deploy_app.sh <CLUSTER NAME> <SERVICE NAME> <TASK FAMILY>
./deploy_app.sh bookstore books-service apis
# One executed, ECS Service update will take a few minutes for the new task / container go live
Find the resources and references on https://devteds.com/episodes/9-docker-on-amazon-ecs-using-cloudformation