Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mikestead/ecs-task-deploy
Update an AWS ECS task definition with Docker image and trigger a blue/green deployment
https://github.com/mikestead/ecs-task-deploy
aws aws-ecs continuous-deployment deployment docker
Last synced: 17 days ago
JSON representation
Update an AWS ECS task definition with Docker image and trigger a blue/green deployment
- Host: GitHub
- URL: https://github.com/mikestead/ecs-task-deploy
- Owner: mikestead
- Created: 2016-02-02T11:29:22.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2023-08-01T14:28:37.000Z (over 1 year ago)
- Last Synced: 2024-10-12T23:53:32.369Z (about 1 month ago)
- Topics: aws, aws-ecs, continuous-deployment, deployment, docker
- Language: JavaScript
- Homepage:
- Size: 98.6 KB
- Stars: 38
- Watchers: 3
- Forks: 11
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ECS Task Deploy
[![Build Status](https://travis-ci.org/mikestead/ecs-task-deploy.svg?branch=greenkeeper%2Fcommander-2.10.0)](https://travis-ci.org/mikestead/ecs-task-deploy)
A script to increment an active task definition on [ECS](https://aws.amazon.com/ecs) with an updated Docker image, followed by a service update to use it.
Sequence of steps performed by the script:
1. Download the active task definition of an ECS service.
1. Clone it.
1. Given the Docker image name provided, find *any* containers in the task definition with references to it and replace them with the new one. Docker tags are ignored when searching for a match.
1. Register this new task definition with ECS.
1. Update the service to use this new task definition, triggering a blue/green deployment.#### Environment Varaiables
For all the container definitions found when looking up your defined `image`, you have the option to add or update environment variables for these.
This can be done using the `--env` option.
--env "SERVICE_URL=http://api.somedomain.com"
You can supply as many of these as required.
#### Spare Capacity
In order to roll a blue/green deployment there must be spare capacity available to spin up a task based on your updated task definition.
If there's not capacity to do this your deployment will fail.This can be done via ECS service `minimum healthy percent` but as a brute force option this tool supports `--kill-task`.
This will attempt to stop an existing task, making way for the blue/green rollout.If you're only running a single task you'll experience some down time. **Use at your own risk.**
#### Usage
ecs-task-deploy [options]
Options:
-h, --help output usage information
-V, --version output the version number
-k, --aws-access-key aws access key, or via AWS_ACCESS_KEY_ID env variable
-s, --aws-secret-key aws secret key, or via AWS_SECRET_ACCESS_KEY env variable
-r, --region aws region, or via AWS_DEFAULT_REGION env variable.
-c, --cluster ecs cluster, or via AWS_ECS_CLUSTER env variable
-n, --service ecs service, or via AWS_ECS_SERVICE_NAME env variable
-i, --image docker image for task definition, or via AWS_ECS_TASK_IMAGE env variable
-t, --timeout max timeout (sec) for ECS service to launch new task, defaults to 90s
-v, --verbose enable verbose mode
-e, --env environment variable in "=" format
--kill-task stop a running task to allow space for a rolling blue/green deployment##### Node
To run via cli.
npm install -g ecs-task-deploy
```javascript
ecs-task-deploy \
-k 'ABCD' \
-s 'SECRET' \
-r 'us-west-1' \
-c 'qa' \
-n 'website-service' \
-i '44444444.ddd.ecr.us-east-1.amazonaws.com/website:1.0.2' \
-e 'SERVICE_URL=http://api.somedomain.com' \
-e 'API_KEY=clientapikey' \
-v
```To run in code.
npm install ecs-task-deploy --save
```javascript
const ecsTaskDeploy = require('ecs-task-deploy')ecsTaskDeploy({
awsAccessKey: 'ABCD',
awsSecretKey: 'SECRET',
region: 'us-east-1',
cluster: 'cache-cluster',
service: 'cache-service',
image: 'redis:2.8',
env: {
SERVICE_URL: 'http://api.somedomain.com',
API_KEY: 'clientapikey'
}
})
.then(
newTask => console.info(`Task '${newTask.taskDefinitionArn}' created and deployed`),
e => console.error(e)
)
```##### Docker
Run with arguments.
docker run --rm stead/ecs-task-deploy \
-k \
-s \
-r \
-c \
-n \
-iRun with standard AWS environment variables.
docker run --rm \
-e AWS_DEFAULT_REGION= \
-e AWS_ACCESS_KEY_ID= \
-e AWS_SECRET_ACCESS_KEY= \
stead/ecs-task-deploy \
-c \
-n \
-i