Yet another implementation of the ecs-deploy tool. ecs-ship
will allow you to
deploy changes to your ECS services by patching its current configuration.
Here are the steps that ecs-ship
does for you:
- Grab the configuration from the
cluster
andservice
you specify. - Apply the patches you can specify from the command line.
- Create a task definition out of the patched configuration.
- Deploy the service with the new task definition, wait for stability and if it's not reached roll back.
NAME:
ecs-ship - Deploy your aws ecs services.
USAGE:
ecs-deploy [options] <cluster> <service>
VERSION:
1.1.0
GLOBAL OPTIONS:
--updates FILE, -u FILE Use an input FILE to describe service updates (default: stdin)
--timeout DURATION, -t DURATION Wait this DURATION for the service to be correctly updated (default: 5m0s)
--no-color, -n Disable colored output (default: false)
--no-wait, -w Disable waiting for updates to be completed. (default: false)
--dry, -d Don't deploy just show what would change in the remote service (default: false)
--help, -h show help (default: false)
--version, -v print the version (default: false)
For the input file you can use this yaml schema:
cpu: "95"
memory: "34"
containerDefinitions:
someContainer:
cpu: 95
environment:
NAME: value
image: "some-image:someTag"
memory: 34
memoryReservation: 34
Notice that every part of the input is optional, so the idea is that you just pass in the values that you need.
You can grab ssh ship from DockerHub from the repository nextroll/ecs-ship or from the console by:
docker pull nextroll/ecs-ship
docker run --rm nextroll/ecs-ship ecs-ship --help
You can also grab a Linux staticly linked binary from the releases page and drop it in your environment.
Finally you can grab the source code either from the AdRoll/ecs-ship repo or from the releases page and build yourself a fresh version using go.
go build .
Here's an example for updating a container image to the latest version:
cat << EOF | ecs-ship cluster service
containerDefinitions:
someContainer:
image: "some-image:latestTag"
EOF
Here's an example where you just change an environment variable of a sevice:
cat << EOF | ecs-ship cluster service
containerDefinitions:
someContainer:
environment:
SECRETS_BUCKET: "s3://updated-secrets-bucket"
EOF
Here's yet ahother example where you just want to lower the cpu requirements of your service to lower your costs:
cat << EOF | ecs-ship cluster service
cpu: "50"
containerDefinitions:
someContainer:
cpu: 50
We provide some make commands for your development convenience.
make mod # load dependencies
make lint # check code
make test # run unit tests
make build # build app (see artifacts/ecs-deploy)
make mockgen # rebuild mocked entities