Archived - AWS Test

This page describes the test environment created and used between April 2019 and Sept 2019.  Superceded by the ECS cluster created using CloudFormation scripts.


This section describes our test environment hosted in an AWS ECS Elastic Container Service

Amazon Elastic Container Service (Amazon ECS) is a highly scalable, high-performance container orchestration service that supports Docker containers and allows you to easily run and scale containerized applications on AWS. Amazon ECS eliminates the need for you to install and operate your own container orchestration software, manage and scale a cluster of virtual machines, or schedule containers on those virtual machines.

With simple API calls, you can launch and stop Docker-enabled applications, query the complete state of your application, and access many familiar features such as IAM roles, security groups, load balancers, Amazon CloudWatch Events, AWS CloudFormation templates, and AWS CloudTrail logs.

While it is quite possible to run the application directly in EC2 Instances we then become responsible for maintaining the images and some elements of the deployment will become AWS specific.  By using Docker containers we are able to run the same builds both locally on dev machines and on different cloud hosts using the same configurations.  

Architecture

For MVP testing we will use a simple architecture of 1 or more EC2 Instances in a ECS Cluster.  Each running the docker image that has been stored in the ECR registry. 

Build the cluster

We use the ecs-cli command line tool to create a cluster of the right sized instances.

aws/createcluster
ecs-cli up --keypair vly1 --capability-iam --size 1 --instance-type t2.small --cluster-config default -f

Build the docker image

aws/buildimage
# Get a docker login and run it
$(aws ecr get-login --no-include-email --region ap-southeast-1)

# build the docker image
docker build -t vly1-main-repo .

# tag the image
docker tag vly1-main-repo:latest 585172581592.dkr.ecr.ap-southeast-1.amazonaws.com/vly1-main-repo:latest

# push to the repository
docker push 585172581592.dkr.ecr.ap-southeast-1.amazonaws.com/vly1-main-repo:latest

Start the Services

aws/service
# aws/service up
# aws/service down
ecs-cli compose --verbose  --file docker-compose-ecs-atlas.yml service $1

Find out what we have

# Lists all of the running containers in your ECS cluster
ecs-cli ps

[~/workspace/voluntarily/vly1]  $ ecs-cli ps
Name                                      State                Ports                        TaskDefinition  Health
0c9c22ab-2019-4cde-8644-129343378bb7/web  RUNNING              13.229.238.124:80->8000/tcp  vly1:12         UNKNOWN

Scale the number of servers

# example scale to 3 servers.
ecs-cli scale --capability-iam --size 3

# note that you can force reload of the image by scaling to zero and back up again without stopping the service.