npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ecs-service

v0.2.7

Published

A tool for creating and updating ECS services using Cloud Formation

Downloads

35

Readme

ECS Service

Overview

This tool aims to simplify the deployment of docker-based services on Amazon's ECS platform.

How it works

Creation/deployment of ECS services is backed by AWS Cloud Formation.

Every command in the tool maps to a stack operation in Cloud Formation.

To use ecs-service you need to use a Cloud Formation template which creates an ECS service along with a Task Definition.

When creating your service, you must supply this template along with the version of the service you wish to run. The tool will create a CF stack with the name you provide.

After the service is created, you can issue commands to update the running version of the service which will result in a stack update.

Instead of having a separate CF template per environment, the idea is to have a single template which works across all environments. Because the tool lets you supply parameters and environment variables to your docker container, your stack template can remain the same between environments.

Requirements

  • NodeJS v6.x or newer
  • A Cloud formation template with an ecs service and task definition defined
    • Required template parameters:
      1. AppVersion - Must be defined so the version of the service can be supplied by ecs-service
      2. AppDesiredCount - Must be defined so the number of instances can be supplied by ecs-service
  • An AWS user/role which has permissions to:
    • DescribeStack
    • GetTemplate
    • UpdateStack
    • CreateStack
    • DeleteStack

Installation

npm install -g ecs-service

AWS REGION

You must export the AWS region you are deploying your service to, or supply it via the -r parameter.

export AWS_REGION=us-east-1

AWS Credentials

The tool will use the standard credential chain used by other aws cli tools.

If you wish to supply credentials manually see Options

Supported Commands

Deploy Service

To create or update an existing service you must provide:

  • stackname - The name of the service you wish to create (this will be the name of the CF Stack)
  • version
    • The version of the service you wish to run. This version should exist in your backing docker repository as a tag.
    • If you do not wish to change the running version specify current as the version. (Only applicable for existing services)
  • template file - A JSON Cloud Formation template containing your ECS Service and Task Definition
  • parameter file - A file containing a key value JSON object which maps your template parameter's to their values.

To deploy the service, use the following command:

$ ecs-service deploy [stackname] [version] [template_file] [params_file]

This command will create/update a CF stack with the provided stackname and supply the service version via the AppVersion parameter. For the remaining non-default parameters, it will use the parameter file.

The command will wait until the successful creation/update of the stack.

Supplying Environment Variables to your docker service

If your docker service is configured via Environment Variables you must supply them via the TaskDefinition's Container Definition's Environment property. This can be tedious to update when your environment variables change.

ecs-service allows you to supply a env file when creating/updating services which will be used to populate the Container Definition's Environment property.

The --env-file parameter can be used to supply an env file containing all of your environment variables.

Example ENV file

EXTERNAL_SERVICE_URI=http://api.myservice.com
FOO=test
BAR=blah

Each line defines an environment variable.

Example Usage

Using the --env-file parameter, you can supply a env file which will be used to pass environment variables to your container.

$ ecs-service deploy [stackname] [version] [template_file] [params_file] --env-file <file>

This parameter can be used with any of the commands provided.

Update Service

If you need to run a new version of your service or update environment variables you can use the simpler run command. Instead of having to provide a template and parameter files you can use this command if you only need to adjust the version or scale of your service.

This command requires:

  • stackname - The name of the existing service stack.
  • version
    • The version label for the service. A corresponding tag should exist in your docker registry.
    • If you do not wish to change the running version specify current as the version.
$ ecs-service update [stackname] [version]

This command will update your ecs service to use the specified version of your container image.

Environment Variables

As mentioned under the Deploy command, you can use the --env-file parameter to supply a file containing environment variables for your container.

Stop Service

To stop a service, you can issue the stop command which will set the desired count of your service to 0.

$ ecs-service stop [stackname]

Note: this will not remove/delete your ECS service or Task Definition.

Destroy Service

To completely remove the resources associates with your service stack you can use the destroy command.

This command will result in a stack deletion operation.

$ ecs-service destroy [stackname]

Optional Parameters

Setting the scale for your service

To specify the number of instances of your service to run, use the --scale parameter.

Example

To run two instances of an existing service called myservice we can issue the following command:

$ ecs-service update myservice 0.1.0 --scale 2

Specifying AWS Tags for the service stack

If you need your service stack to have associated tags, you can do so via the --tag-file parameter.

Example

A tag file is a JSON file with an object where the keys are names of tags to create and values are the tag values.

Example Tag File - tags.json

{
    "Owner": "Alice",
    "Project": "Top Secret"
}

Given the above tag file we can provide it via the --tag-file command as follows:

$ ecs-service deploy myservice 0.1.0 service.json params.json --tag-file tags.json

The above command will create myservice using the template in service.json with the tags Owner=Alice and Project=Top Secret

AWS Credentials

To supply credentials manually you can use the following parameters:

  • --access-key-id - To specify your access key ID
  • --secret-access-key - To specify your secret
  • --region - To specify the AWS Region

Using Profiles

Alternatively you can supply an AWS credential profile to use via:

  • --profile - To use a credential profile instead of supplying access key and secret