Skip to main content

AWS ECS related deployment tools

Project description

      _            _              __ _     _
     | |          | |            / _(_)   | |
   __| | ___ _ __ | | ___  _   _| |_ _ ___| |__
  / _` |/ _ \ '_ \| |/ _ \| | | |  _| / __| '_ \
 | (_| |  __/ |_) | | (_) | |_| | | | \__ \ | | |
  \__,_|\___| .__/|_|\___/ \__, |_| |_|___/_| |_|
            | |             __/ |
            |_|            |___/

deployfish has commands for managing the whole lifecycle of your application:

  • Safely and easily create, update, destroy and restart ECS services

  • Safely and easily create, update, run, schedule and unschedule ECS tasks

  • Extensive support for ECS related services like load balancing, application autoscaling and service discovery

  • Easily scale the number of containers in your service, optionally scaling its associated autoscaling group at the same time

  • Manage multiple environments for your service (test, qa, prod, etc.) in multiple AWS accounts.

  • Uses AWS Parameter Store for secrets for your containers

  • View the configuration and status of running ECS services

  • Run a one-off command related to your service

  • Easily exec through your VPC bastion host into your running containers, or ssh into a ECS container machine in your cluster.

  • Setup SSH tunnels to the private AWS resources in VPC that your service uses so that you can connect to them from your work machine.

  • Extensible! Add additional functionality through custom deployfish modules.

  • Works great in CodeBuild steps in a CodePipeline based CI/CD system!

Additionally, deployfish integrates with terraform state files so that you can use the values of terraform outputs directly in your deployfish configurations.

To use deployfish, you

  • Install deployfish
  • Define your service in deployfish.yml
  • Use deploy to start managing your service

A simple deployfish.yml looks like this:

services:
  - name: my-service
    environment: prod
    cluster: my-cluster
    count: 2
    load_balancer:
      service_role_arn: arn:aws:iam::123142123547:role/ecsServiceRole
      load_balancer_name: my-service-elb
      container_name: my-service
      container_port: 80
    family: my-service
    network_mode: bridge
    task_role_arn: arn:aws:iam::123142123547:role/myTaskRole
    containers:
      - name: my-service
        image: 123142123547.dkr.ecr.us-west-2.amazonaws.com/my-service:0.0.1
        cpu: 128
        memory: 256
        memoryReservation: 128
        ports:
          - "80"
        environment:
          - ENVIRONMENT=prod
          - ANOTHER_ENV_VAR=value
          - THIRD_ENV_VAR=value

See the examples/ folder in this repository for example deployfish.yml files.

Documentation

deployfish.readthedocs.io is the full reference for deployfish, including a full deployfish.yml reference and tutorials.

Installing deployfish

deployfish is a pure python package. As such, it can be installed in the usual python ways. For the following instructions, either install it into your global python install, or use a python virtual environment to install it without polluting your global python environment.

Install deployfish

pip install deployfish

Install AWS CLI v2

deployfish requries AWS CLI v2 for some of its functionality, notably EXEC'ing into FARGATE containers. While AWS CLI v1 was installable via pip, AWS CLI v2 is not, so we have to do the install manually. Here's how to set that up on a Mac:

# Uninstall any old versions of the cli
pip uninstall awscli

# Deactivate any pyenv environment so we can be in the system-wide Python interpreter
cd ~

# Install the new AWS CLI from brew -- it's no longer pip installable
brew update
brew install awscli

# Install the Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

If later on you have issues with EXEC'ing or with the aws command in general, check to ensure you're getting your global version of aws instead of an old one in your current virtual environment:

aws --version

If the version string shows version < 2:

pip uninstall awscli

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deployfish-1.14.6.tar.gz (162.7 kB view details)

Uploaded Source

Built Distribution

deployfish-1.14.6-py2.py3-none-any.whl (214.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file deployfish-1.14.6.tar.gz.

File metadata

  • Download URL: deployfish-1.14.6.tar.gz
  • Upload date:
  • Size: 162.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.12

File hashes

Hashes for deployfish-1.14.6.tar.gz
Algorithm Hash digest
SHA256 cd0a86284d732779772567f284229d69c5e9b7e324a0d1e7711f24046855c3c7
MD5 3d211692d100c7c922cf601c1ecca8c7
BLAKE2b-256 045e1e8d207af1b5474dc2bee71d854dcd4e5c7f82dc094854eafbcf2fe2d9a6

See more details on using hashes here.

File details

Details for the file deployfish-1.14.6-py2.py3-none-any.whl.

File metadata

  • Download URL: deployfish-1.14.6-py2.py3-none-any.whl
  • Upload date:
  • Size: 214.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.12

File hashes

Hashes for deployfish-1.14.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 efdecbe6e194870cfdf75f727e16eb470d6e862b1b93e9f928f8710082fe56a3
MD5 80c8b2b276f31dcb989988d3b7e790ee
BLAKE2b-256 6b438ffb60de38cd35e15a4bfd080a1817cc413d992b85fd0bbfc1f0d37d7876

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page