{"id":13628323,"url":"https://github.com/lumoslabs/broadside","last_synced_at":"2025-04-17T00:34:00.537Z","repository":{"id":48500123,"uuid":"61584844","full_name":"lumoslabs/broadside","owner":"lumoslabs","description":"Command-line tool for AWS ECS deploys","archived":false,"fork":false,"pushed_at":"2021-07-22T16:36:36.000Z","size":209,"stargazers_count":44,"open_issues_count":5,"forks_count":8,"subscribers_count":24,"default_branch":"master","last_synced_at":"2024-05-22T04:25:36.679Z","etag":null,"topics":["cluster","ecs","ecs-cluster","ecs-deploy","ecs-service","scale"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lumoslabs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-20T22:30:48.000Z","updated_at":"2024-05-17T16:44:50.000Z","dependencies_parsed_at":"2022-09-19T06:41:37.302Z","dependency_job_id":null,"html_url":"https://github.com/lumoslabs/broadside","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lumoslabs%2Fbroadside","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lumoslabs%2Fbroadside/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lumoslabs%2Fbroadside/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lumoslabs%2Fbroadside/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lumoslabs","download_url":"https://codeload.github.com/lumoslabs/broadside/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249293265,"owners_count":21245719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cluster","ecs","ecs-cluster","ecs-deploy","ecs-service","scale"],"created_at":"2024-08-01T22:00:50.024Z","updated_at":"2025-04-17T00:34:00.288Z","avatar_url":"https://github.com/lumoslabs.png","language":"Ruby","funding_links":[],"categories":["Uncategorized","Open Source Repos"],"sub_categories":["Uncategorized","Elastic Container Service"],"readme":"# Broadside [![Build Status](https://travis-ci.org/lumoslabs/broadside.svg?branch=master)](https://travis-ci.org/lumoslabs/broadside)\n\nA [GLI](https://github.com/davetron5000/gli) based command-line tool for deploying applications on [AWS EC2 Container Service (ECS)](https://aws.amazon.com/ecs/)\n\n### [The wiki](https://github.com/lumoslabs/broadside/wiki) has all kinds of useful information on it so don't just rely on this README.\n\n## Overview\nAmazon ECS presents a low barrier to entry for production-level docker applications. Combined with ECS's built-in blue-green deployment, Elastic Load Balancers, Autoscale Groups, and CloudWatch, one can theoretically set up a robust cluster that can scale to serve any number of applications in a short amount of time. The ECS GUI, CLI, and overall architecture are not the easiest to work with, however, so Broadside seeks to leverage the [ECS ruby API](http://docs.aws.amazon.com/sdkforruby/api/Aws/ECS.html) to dramatically simplify and improve the configuration and deployment process for developers, offering a simple command line interface and configuration format that should meet most needs.\n\nBroadside does _not_ attempt to handle operational tasks like infrastructure setup and configuration, which are better suited to tools like [terraform](https://www.terraform.io/).\n\n### Capabilities\n\n- **Trigger** ECS deployments\n- **Inject** environment variables into ECS containers from local configuration files\n- **Launch a bash shell** on container in the cluster\n- **SSH** directly onto a host running a container\n- **Execute** an arbitrary shell command on a container (or all containers)\n- **Tail logs** of a running container\n- **Scale** an existing deployment on the fly\n\n### Example Config for Quickstarters\nApplications using broadside employ a configuration file that looks something like:\n\n```ruby\nBroadside.configure do |config|\n  config.application = 'hello_world'\n  config.default_docker_image = 'lumoslabs/hello_world'\n  config.aws.ecs_default_cluster = 'production-cluster'\n  config.aws.region = 'us-east-1'                  # 'us-east-1 is the default\n  config.targets = {\n    production_web: {\n      scale: 7,\n      command: %w(bundle exec unicorn -c config/unicorn.conf.rb),\n      env_file: '.env.production'\n      predeploy_commands: [\n        %w(bundle exec rake db:migrate),\n        %w(bundle exec rake data:migrate)\n      ]\n    },\n    # If you have multiple images or clusters, you can configure them per target\n    staging_web: {\n      scale: 1,\n      command: %w(bundle exec puma),\n      env_file: '.env.staging',\n      tag: 'latest',                                # Set a default tag for this target\n      cluster: 'staging-cluster',                   # Overrides config.aws.ecs_default_cluster\n      docker_image: 'lumoslabs/staging_hello_world' # Overrides config.default_docker_image\n    },\n    json_stream: {\n      scale: 1,\n      command: %w(java -cp *:. path.to.MyClass),\n      # This target has a task_definition and service config which you use to bootstrap a new AWS Service\n      service_config: { deployment_configuration: { minimum_healthy_percent: 0.5 } },\n      task_definition_config: { container_definitions: [ { cpu: 1, memory: 2000, } ] }\n    }\n  }\nend\n```\n\nFrom here, developers can use broadside's command-line interface to initiate a basic deployment and launch the\nconfigured `command` as an ECS Service:\n\n```bash\nbundle exec broadside deploy full --target production_web --tag v.1.1.example.tag\n```\n\nIn the case of an error or timeout during a deploy, broadside will automatically rollback to the latest stable version. You can perform manual rollbacks as well through the command-line.\n\n## [For more information on broadside commands, see the complete command-line reference in the wiki](https://github.com/lumoslabs/broadside/wiki/CLI-reference).\n\n\n## Installation\n### Via Gemfile\nFirst, install broadside by adding it to your application `Gemfile`:\n```ruby\ngem 'broadside'\n```\n\nThen run\n```bash\nbundle install\n```\n\nYou can now run the executable in your app directory:\n```bash\nbundle exec broadside --help\n```\n\nYou may also generate binstubs using\n```bash\nbundle binstubs broadside\n```\n\n### System Wide\nAlternatively, you can install broadside using:\n```\ngem install broadside\n```\n\n## Configuration\nFor full application setup, see the [detailed instructions in the wiki](https://github.com/lumoslabs/broadside/wiki).\n\n## Debugging\nUse the `--debug` switch to enable stacktraces and debug output.\n\n## Contributing\nPull requests, bug reports, and feature suggestions are welcome!\n\nBefore starting on a contribution, we recommend opening an issue or replying to an existing one to give others some initial context on the work needing to be done.\n\n**Specs must pass on pull requests for them to be considered.**\n\n### Running Specs\nBroadside has a lot of tests for most of its behaviors - just run\n```\nbundle exec rspec\n```\nin the broadside directory.  Don't open pull requests without passing specs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flumoslabs%2Fbroadside","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flumoslabs%2Fbroadside","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flumoslabs%2Fbroadside/lists"}