Phil's ECS Notes - tooltwist/documentation GitHub Wiki
New EC2 Instance
Creating a new instance: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html
Unfortunately we can't (yet) use autoscaling to create new instances as required, because the following steps need to be performed when a new instance is created.
-
Let the instance access configs.tooltwist.com, by adding it's IP address to the security group whitelist.
-
Checkout the standard scripts
cd ${HOME} git clone http://[email protected]/r/ttutil.git
-
Update ~/.bash_profile
# Standard utilities . ~/ttutil/bashrc
Log off and back on again.
-
For each project, create the volumes.
sudo mkdir /Configs-prod cd /Configs-prod git clone http://[email protected]/r/prod/drinkcircle.git
-
Install the shared file system
s3fs-fuse
Volumes
We use Docker volumes to provide the configuration to each container. We place these in /volumes-for-apps/project-name/mode/sub-project-name/site-conf where mode is devel, stage, prod, etc.
For example, the Drinkcircle project uses TEA, Crowdhound and TTAuth2 so needs these volumes on each EC2 instance in the Cluster:
$ cd /Configs-prod/crowdhound/staging
$ ls -la
total 0
drwxr-xr-x 4 philipcallender staff 136 Aug 16 23:26 crowdhound
drwxr-xr-x 4 philipcallender staff 136 Aug 16 23:26 drinkcircle
drwxr-xr-x 3 philipcallender staff 102 Aug 16 23:26 tea
drwxr-xr-x 3 philipcallender staff 102 Aug 16 23:26 ttauth2
You may notice that this is the same structure as the volumes folder provided by the development configs (e.g. ~/Configs/drinkcircle/dev/volumes). We download the configs used by ECS from configs.tooltwist.com.
Before the volumes can be downloaded, you need to install git:
$ sudo yum install git
and set your git permissions:
zzzz
Repository
Create a repository for your Docker images, using the Create Repository button on the Repositories page.
Follow the instructions, and copy the login commands into the
Debugging
Unfortunately debugging ECS is not straightforward. Here a few links:
http://docs.aws.amazon.com/AmazonECS/latest/developerguide/troubleshooting.html
https://convox.com/blog/ecs-challenges/
Shortcuts
Most debugging of ECS involves logging on to the EC2 Instances.
To log in, you'll need to install a file ~/.ssh/phil-singapore.pem.
I added functions to my .bashrc
file, to make it easy to log in to the ECS servers. Unfortunately the IP addresses are baked in, and will need to be updated if they change.
function login-ecs-dev-1 { ssh -i ~/.ssh/phil-singapore.pem [email protected] ; }
function login-ecs-dev-2 { ssh -i ~/.ssh/phil-singapore.pem [email protected] ; }
Pulling private docker images
My tasks would not run up tasks using images from hub.docker.com. To make this possible I added Docker credentials to /etc/ecs/ecs.config
. see here for details.
Older Notes (may be obsolete)
These are my notes while experimenting with Amazon ECS.
Documentation Start Point: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html - obsolete? Console: http://aws.amazon.com/cli/
Consoles: EC2 [VPC] (https://ap-southeast-1.console.aws.amazon.com/vpc/home?region=ap-southeast-1) [ECS] (https://ap-southeast-1.console.aws.amazon.com/ecs/home?region=ap-southeast-1)
Start example
https://ap-southeast-1.console.aws.amazon.com/ecs/home?region=ap-southeast-1#/firstRun
Run the 'first run' wizard, with default settings to start an example container.
-
It gave me a chance to download a permissions file, in my case
philcal.pem
. This needs to be copied to~/.ssh
andchmod 400 philcal.pem
. -
To access the server (AWS->Load Balancers->select one->description tab->DNS Name).
In my case
http://ec2contai-ecselast-2osll8hq9uv8-652856159.us-west-2.elb.amazonaws.com
-
To log in to the server instance (The Docker machine), (a) add an Elastic IP address, (b) assign it to the instance, (b) go to the instance and on the description tab click on the security group, and (c) add an inbound route for SSH to
My IP
.$ ssh -i ~/.ssh/philcal.pem ec2-user@<elastic IP address>
-
I pointed a DNS entry at the domain name of the ELB.
Using the ECS CLI
Install the AWS Client
Check Python. Must be v2.6.5+.
$ python --version
Python 2.7.10
Check pip
is installed. If not:
(http://stackoverflow.com/questions/17271319/installing-pip-on-mac-os-x)
$ sudo easy_install pip
Now install the AWS client:
(http://docs.aws.amazon.com/cli/latest/userguide/installing.html)
(http://docs.aws.amazon.com/general/latest/gr/rande.html)
$ sudo pip install awscli --ignore-installed six
$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-southeast-1 (singapore)
Default output format [None]:
Install the aws-shell
This is like the aws
command, but provides auto-complete when typing in commands.
$ sudo pip install aws-shell --upgrade --ignore-installed six
Read https://github.com/awslabs/aws-shell for information on how to use aws-shell.
Converting docker-compose.yml to ECS task file
(https://github.com/micahhausler/container-transform)
This command seems to have trouble running on OS X, but a Docker image can be used instead.
$ docker run --rm -i micahhausler/container-transform < docker-compose.yml
Useful Links
(http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_GetStarted.html)