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-updater

v0.3.6

Published

Update AWS ECS services easily from command line

Downloads

23

Readme

ecs-updater

A Node.js CLI utility for updating and restarting AWS Elastic Container Service services.

Requirements

AWS credentials with authorization to perform the needed AWS API calls, corresponding to the following policy:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:*"
      ],
      "Resource": "*"
    },
    {
      "Action": [
        "ecs:describeServices",
        "ecs:describeTaskDefinition",
        "ecs:registerTaskDefinition",
        "ecs:updateService"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid": "",
      "Effect":"Allow",
      "Action":[
        "s3:GetObject",
        "s3:PutObject",
      ],
      "Resource":"arn:aws:s3:::${bucket}/${path}/*"
    }
  ]
}

For operations involving Docker Hub, you will also have to be logged in into Docker Hub.

Installation

Preferably with NPM:

npm install -g ecs-updater

Configuration

Reads options from a ecs-updater.json file in the current working directory. Following options are available:

  • REGION: AWS region. Defaults to eu-west-1.
  • CLUSTER: AWS cluster name, for example default.
  • SERVICE: ECS service name, for example heaven.
  • CONTAINER: Container name in the ECS service task definition, for example heaven.
  • IMAGE: ECR repository name (for example heaven) or Docker Hub image name (for example lucified/heaven).
  • BUCKET: Bucket in which we store the following:
    • [KEY]_tag: Text file with newest image tag for this Docker image (written by ecs-updater).
    • [KEY]_revision: Text file with newest revision for the ECS service task definition (written by ecs-updater).
    • [KEY]_taskdefinition.json: Task definition for this serice (read by ecs-updater, written by terraform).
  • KEY: Key to use for files stored in bucket. This can also contain a path, such as ecs_services/heaven.
  • DOCKERFILE: Dockerfile to use when building Docker image. Defaults to Dockerfile.

Alternatively every option can be specified by an environment variable, which have precedence.

Example:

{
  REGION: 'eu-west-1',
  CLUSTER: 'default',
  SERVICE: 'heaven',
  CONTAINER: 'heaven',
  IMAGE: 'lucified/heaven',
  BUCKET: '',
  KEY: '',
  DOCKERFILE: 'Dockerfile'
}

Every option without a default value is mandatory, except IMAGE_TAG. If the command is run inside a git repository, the tag will be a shortened SHA1 of the HEAD commit.

Usage

Default action

ecs-updater

This will:

  1. Login to ECR
  2. Build a Docker image
  3. Tag the image so that Docker knows to upload it to the ECR repository or Docker hub
  4. Push the image to the repository or Docker hub
  5. Register a new ECS taskDefinition with a reference to the newly built image
  6. Restart the ECS service using the new taskDefinition
  7. Upload metadata into an S3 bucket

To run this command, all of the options listed in the configuration section need to be defined, expect for options that have defaults.

Restart

ecs-updater -s restart-terraform

This will load the most recent task definition from s3://[BUCKET]/[KEY]_taskdefinition.json and increment its revision, which will cause the service to restart with an updated task definition. The revision and tag information will be updated to the s3 bucket.

To run this command, all of the following options need to be defined:

  • REGION
  • CLUSTER
  • SERVICE
  • CONTAINER
  • BUCKET
  • KEY

Build

ecs-updater -s build

To run this command, all of the following options need to be defined:

  • IMAGE
  • DOCKERFILE

Plain restart (advanced)

ecs-updater -s restart-service

This will load the most recent task definition from AWS and increment its revision, which will cause the service to restart. To run this command, all of the following options need to be defined:

  • REGION
  • CLUSTER
  • SERVICE

This will not update the revision and tag information to the S3 bucket, which will cause Terraform to be out-of-sync. You will need to resolve that manually.