accelerate-failover
v0.2.2
Published
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=flat-square)](https://conventionalcommits.org) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
Downloads
3
Readme
accelerate-failover
accelerate-failover
is a CLI tool to view the health and traffic status of AWS Elastic Beanstalks and shift traffic
between regions in the event of a regional AWS outage. It finds all AWS Elastic Beanstalk applications that end in the
stage name provided to the command i.e. dev2, dev, or qa. It then finds any AWS Route 53 weighted alias records for the
Elastic Beanstalk environments that match our set identifiers, us-east-1 and us-west-2. If there are weighted records
for an environment for both identifiers in the same hosted zone, then the application will toggle traffic to the primary
or disaster recovery region.
Table of Contents
Requirements
Instructions
Installation
download binary
Download the accelerate-failover binary executable from the Releases page in this repository.
Copy the binary to a file directory ~/bin/accelerate-failover
and add ~/bin/
to your PATH
if it is not on your
path already.
build and package from source
To build and package the application to a binary source clone this repository and run:
yarn:
yarn
yarn build
yarn package:macos // alternately package:linux for a linux binary
npm:
npm i
npm run build
npm run package:macos // alternately package:linux for a linux binary
AWS Account Credentials
This tool will use the default AWS account profile on your machine. Use ALKS to set your default profile credentials for the account you want to run this script against.
accelerate-failover
Running the command without any options or with the -h or --help flags, will print the tool help menu.
$ accelerate-failover
accelerate-failover <command>
Commands:
accelerate-failover failover <stage> fail over traffic applications in
the <stage> stage to the disaster
recovery region
accelerate-failover rollover <stage> rollover traffic applications in the
<stage> stage to the primary region
accelerate-failover status <stage> check the status of applications in
<region> the <region> region and <stage>
stage
Options:
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
accelerate-failover status <stage> <region>
$ accelerate-failover status -h
accelerate-failover status <stage> <region>
check the status of applications in the <region> region and <stage> stage
Positionals:
region the AWS Region [string] [required] [choices: "us-east-1", "us-west-2"]
stage the application stage
[string] [required] [choices: "dev2", "dev", "qa", "uat", "production",
"production-blue", "production-green"]
Options:
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
$ accelerate-failover status dev2 us-east-1
checking status of Elastic Beanstalk Applications in ca-mmdnp us-east-1 dev2...
finding dev2 Elastic Beanstalk applications in account...
found dr-shopper-platform-dev2 Elastic Beanstalk environment...
found dr-dealstarter-dev2 Elastic Beanstalk environment...
finding weighted resource alias records in hosted zones in account...
found 12 weighted records in ca-mmdnp.makemydeal.com. hosted zone...
found resource record sets for dr-shopper-platform-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
found resource record sets for dr-dealstarter-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
ca-mmdnp dev2 Elastic Beanstalk Environment Status us-east-1
┌───────────────────────────────┬───────────────┬───────────────────┬───────────────────┐
│ Elastic Beanstalk Environment │ Health Status │ us-east-1 Traffic │ us-west-2 Traffic │
├───────────────────────────────┼───────────────┼───────────────────┼───────────────────┤
│ dr-shopper-platform-dev2 │ Ok │ 100% │ 0% │
├───────────────────────────────┼───────────────┼───────────────────┼───────────────────┤
│ dr-dealstarter-dev2 │ Ok │ 100% │ 0% │
└───────────────────────────────┴───────────────┴───────────────────┴───────────────────┘
accelerate-failover failover <stage>
$ accelerate-failover failover -h
accelerate-failover failover <stage>
fail over traffic applications in the <stage> stage to the disaster recovery
region
Positionals:
stage [string] [required] [choices: "dev2", "dev", "qa", "uat", "production",
"production-blue", "production-green"]
Options:
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
$ accelerate-failover failover dev2
performing failover for dev2 shifting traffic to us-west-2...
finding dev2 Elastic Beanstalk applications in account...
found dr-shopper-platform-dev2
found dr-dealstarter-dev2
finding weighted resource records in hosted zones in account...
found 12 weighted records in ca-mmdnp.makemydeal.com. hosted zone...
found resource record sets for dr-shopper-platform-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
found resource record sets for dr-dealstarter-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
dr-shopper-platform-dev2 changing weight of us-east-1 record set to 0...
dr-shopper-platform-dev2 changing weight of us-west-2 record set to 100...
dr-dealstarter-dev2 changing weight of us-east-1 record set to 0...
dr-dealstarter-dev2 changing weight of us-west-2 record set to 100...
updating 2 records for dev2...
updating DNS record for shopper-platform-dev2-dr.ca-mmdnp.makemydeal.com.:us-east-1 weight: 0
updating DNS record for dealstarter-dev2-dr.ca-mmdnp.makemydeal.com.:us-east-1 weight: 0
adding shopper-platform-dev2-dr.ca-mmdnp.makemydeal.com.:us-west-2 weight: 100 to batch...
adding dealstarter-dev2-dr.ca-mmdnp.makemydeal.com.:us-west-2 weight: 100 to batch...
Applying batch update of 4 records for hosted zone /hostedzone/Z3BTVQ65IVZHGF...
hosted zone /hostedzone/Z3BTVQ65IVZHGF updates complete...
change set changes successfully updated to Route 53...
SUCCESSFULLY ROUTED dev2 TRAFFIC TO us-west-2
finding dev2 Elastic Beanstalk applications in account...
found dr-shopper-platform-dev2 Elastic Beanstalk environment...
found dr-dealstarter-dev2 Elastic Beanstalk environment...
finding weighted resource alias records in hosted zones in account...
found 12 weighted records in ca-mmdnp.makemydeal.com. hosted zone...
found resource record sets for dr-shopper-platform-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
found resource record sets for dr-dealstarter-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
ca-mmdnp dev2 Elastic Beanstalk Status us-west-2:
┌──────────────────────────┬───────────────┬───────────────────┬───────────────────┐
│ Environment Name │ Health Status │ us-east-1 Traffic │ us-west-2 Traffic │
├──────────────────────────┼───────────────┼───────────────────┼───────────────────┤
│ dr-shopper-platform-dev2 │ Ok │ 0% │ 100% │
├──────────────────────────┼───────────────┼───────────────────┼───────────────────┤
│ dr-dealstarter-dev2 │ Ok │ 0% │ 100% │
└──────────────────────────┴───────────────┴───────────────────┴───────────────────┘
accelerate-failover rollover <stage>
$ accelerate-failover rollover -h
accelerate-failover rollover <stage>
rollover traffic applications in the <stage> stage to the primary region
Positionals:
stage [string] [required] [choices: "dev2", "dev", "qa", "uat", "production",
"production-blue", "production-green"]
Options:
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
$ accelerate-failover rollover dev2
performing rollover for dev2 shifting traffic to us-east-1...
finding dev2 Elastic Beanstalk applications in account...
found dr-shopper-platform-dev2
found dr-dealstarter-dev2
finding weighted resource records in hosted zones in account...
found 12 weighted records in ca-mmdnp.makemydeal.com. hosted zone...
found resource record sets for dr-shopper-platform-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
found resource record sets for dr-dealstarter-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
dr-shopper-platform-dev2 changing weight of us-east-1 record set to 100...
dr-shopper-platform-dev2 changing weight of us-west-2 record set to 0...
dr-dealstarter-dev2 changing weight of us-east-1 record set to 100...
dr-dealstarter-dev2 changing weight of us-west-2 record set to 0...
updating 2 records for dev2...
updating DNS record for shopper-platform-dev2-dr.ca-mmdnp.makemydeal.com.:us-east-1 weight: 100
updating DNS record for dealstarter-dev2-dr.ca-mmdnp.makemydeal.com.:us-east-1 weight: 100
adding shopper-platform-dev2-dr.ca-mmdnp.makemydeal.com.:us-west-2 weight: 0 to batch...
adding dealstarter-dev2-dr.ca-mmdnp.makemydeal.com.:us-west-2 weight: 0 to batch...
Applying batch update of 4 records for hosted zone /hostedzone/Z3BTVQ65IVZHGF...
hosted zone /hostedzone/Z3BTVQ65IVZHGF updates complete...
change set changes successfully updated to Route 53...
SUCCESSFULLY ROUTED dev2 TRAFFIC TO us-east-1!
finding dev2 Elastic Beanstalk applications in account...
found dr-shopper-platform-dev2 Elastic Beanstalk environment...
found dr-dealstarter-dev2 Elastic Beanstalk environment...
finding weighted resource alias records in hosted zones in account...
found 12 weighted records in ca-mmdnp.makemydeal.com. hosted zone...
found resource record sets for dr-shopper-platform-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
found resource record sets for dr-dealstarter-dev2 in ca-mmdnp.makemydeal.com. /hostedzone/Z3BTVQ65IVZHGF...
ca-mmdnp dev2 Elastic Beanstalk Status us-east-1
┌──────────────────────────┬───────────────┬───────────────────┬───────────────────┐
│ Environment Name │ Health Status │ us-east-1 Traffic │ us-west-2 Traffic │
├──────────────────────────┼───────────────┼───────────────────┼───────────────────┤
│ dr-shopper-platform-dev2 │ Ok │ 100% │ 0% │
├──────────────────────────┼───────────────┼───────────────────┼───────────────────┤
│ dr-dealstarter-dev2 │ Ok │ 100% │ 0% │
└──────────────────────────┴───────────────┴───────────────────┴───────────────────┘
Settings
You can override settings in Settings.ts by setting the environment variable in the environment you are running this tool in.
export MAX_ATTEMPTS=10; // this will set MAX_ATTEMPTS 10; overriding the default.
accelerate-faiover status dev2 us-east-1
Configurable values are:
export class Settings {
// the resource record set identifier(recordId) of the disaster recovery DNS records
public static DR_RECORD_SET_IDENTIFIER: string =
process.env.DISASTER_RECOVERY_RECORD_SET_IDENTIFIER || 'us-west-2';
/*
* The AWS clients will retry 7 times by default with an exponential backoff at 100, 200, 400, 800, 1600, 3200, and
* 6400 ms intervals, if the request fails after the summation of all of those attempts, roughly 13 seconds, the
* script will throw an error.
*/
public static MAX_ATTEMPTS: number = parseInt(
process.env.MAX_ATTEMPTS || '7',
);
// the resource record set identifier(recordId) of the primary DNS records
public static PRIMARY_RECORD_SET_IDENTIFIER: string =
process.env.PRIMARY_RECORD_SET_IDENTIFIER || 'us-east-1';
//...
public static PRIMARY_REGION = process.env.PRIMARY_REGION || 'us-east-1';
public static DR_REGION = process.env.DR_REGION || 'us-west-2';
//...
}
CHANGELOG
see CHANGELOG.md.