0.0
A long-lived project that still receives updates
container_ship is a simple ECS deployment tool. You only need to prepare Dockerfile and task_definition.json
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Project Readme

container_ship

Gem Version Circle CI Code Climate Libraries.io dependency status for GitHub repo GitHub

container_ship is yet another ECS deployment tool.

Key features

  • Using raw task_definition.json file instead of a template file with complex state or variables
  • Convention over configuration

Installation

gem 'container_ship'

Usage

Prepare Dockerfile

You need to put Dockerfile in your app root directory. And all the services/tasks will use the image built with that.

Prepare task_definition.json and Dockerfile

container_ship init YOUR_CLUSTER_NAME

will create empty directory for you. And you must put task_definition.json file in directories like below.

your_app
|-- .container_ship
|    |-- your_cluster_name
|    |    |-- services // ECS services 
|    |    |    |-- your_service_name // like server or api
|    |    |    |    |-- your_envrionment_name // like production or staging
|    |    |    |    |    |-- task_definition.json
|    |    |    |    |
|    |    |    |    +-- your_other_environment_name
|    |    |    |         |-- task_definition.json
|    |    |    |    
|    |    |    +-- your_other_service_name
|    |    |
|    |    |
|    |    +-- tasks // ECS tasks
|    |         |-- your_task_name ( like db-migrate or 
|    |         |    |-- your_envrionment_name // like production or staging
|    |         |    |    |-- task_definition.json
|    |         |    |
|    |         |    +-- your_other_environment_name
|    |         |         |-- task_definition.json   
|    |         +-- your_task_name ( like db-migrate or
|    |
|    +-- your_other_cluster_name
|--...

Prepare ECS resources

You must obey convention over configuration concept. So, naming convention is presented below.

  • ECS cluster: "#{cluster_name}-#{environment}"
  • ECS service: "#{cluster_name}-#{service_name}-#{environment}"
  • ECS task: "#{cluster_name}-#{task_name}-#{environment}"

And export your ECR repository root uri.

export ECR_REPOSITORY=xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/

Deploy a service

container_ship ship CLUSTER_NAME SERVICE_NAME ENVIRONMENT BUILD_NUMBER

will deploy a service in .container_ship/CLUSTER_NAME/services/SERVICE_NAME/ENVIRONMENT/task_definition.json

Run a task

container_ship exec CLUSTER_NAME TASK_NAME ENVIRONMENT BUILD_NUMBER

will run a task in .container_ship/CLUSTER_NAME/tasks/TASK_NAME/ENVIRONMENT/task_definition.json

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/seibii/container_ship. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the ContainerShip project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.