/swa

an alternative CLI for AWS

Primary LanguageRubyMIT LicenseMIT

SWA

SWA is AWS, backwards.

It's an alternative CLI for AWS.

"Backwards" because it puts verbs at the end:

$ swa ec2 instance i-9336f049 terminate

rather than the front:

$ aws ec2 terminate-instances --instance-ids i-9336f049

Listing things

SWA provides sub-commands for listing many types of AWS resource, e.g.

$ swa ec2 instances

Listing commands typically provide options for refining the search:

$ swa ec2 instances --tagged purpose=QA --filter availability-zone=ap-southeast-2b

By default you'll get a "summary" view, one line per resource:

$ swa ec2 instances | head
i-bcf48c2b  ami-1e73737d  c3.large   running     10.47.5.16    
i-1990d85c  ami-538e7330  t2.micro   running     10.47.7.25    "blarg/room-service"
i-f9e6ea27  ami-8bfd7eb1  t2.small   running     10.47.11.54   "blarg/match-feed"
i-19155e5c  ami-d5327ab6  c3.large   running     10.47.6.238   "fnord-snarfer"
i-26357e63  ami-eded7ed7  t2.micro   running     10.47.6.96    "fnord-dashboard"
i-b85f6c87  ami-695a7253  c3.xlarge  running     10.47.5.252   "bam-boozle"
i-5627e187  ami-d9d779ba  c4.2xlarge running     10.47.11.201  "pub-batch-42"
i-ced5ae59  ami-eded7ed7  t2.micro   running     10.47.6.22    "atlas-hugged"
i-63e722b2  ami-8bfd7eb1  t2.small   running     10.47.8.95    "blarg/first-service"

But you can ask for all the data, if you wish:

$ swa ec2 instances data
---
- InstanceId: i-bcf48c2b
  ImageId: ami-1e73537d
  State:
    Code: 16
    Name: running
  PrivateDnsName: ip-10-48-9-16.ap-southeast-2.compute.internal
  PublicDnsName: ''
  ...

Specify -J if you like JSON better than YAML.

You can specify a JMESPath to extract a subset of the data:

$ swa ec2 instances data '[].{Id:InstanceId,Profile:IamInstanceProfile.Id}'
---
- Id: i-7f5495ae
  Profile: AIPAIDOQKT66MFXRO5BPS
- Id: i-9c539e4d
  Profile: AIPAIRT5GOEJ2ZMVPGGD6
- Id: i-fbeda3be
  Profile: AIPAIZXZFLTUW6L456LFU

Inspecting things

Each "collection" operation has a corresponding "item" operation, e.g.

$ swa ec2 instance i-bcf48c2b ...

Different resource-types support different sub-commands, but they all implement data, which again dumps everything in YAML or JSON format.

$ swa ec2 instance i-bcf48c2b data

The "item" sub-command can be ommitted, when it can be inferred from the resource-id:

$ swa ec2 i-bcf48c2b data
$ swa ec2 ami-1e73737d data

Installing it

SWA is packaged as a Ruby gem, and can be installed with:

gem install swa

On a Mac, I recommend brew-gem for easy system-wide installation:

brew install brew-gem
brew gem install swa

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/mdub/swa.

License

The gem is available as open source under the terms of the MIT License.