Grabeni - An ops-friendly AWS Elastic Network Interface (ENI) attachment grabbing tool.


Keywords
aws, cli, ec2, go
License
MIT
Install
go get github.com/yuuki/grabeni

Documentation

grabeni

Latest Version Build Status Go Documentation Go Report Card License

grabeni is an operation-friendly tool to grab an EC2 Network Interface (ENI) from an other EC2 instance.

Detaching and attaching (grabbing) ENI is a common way to realize VIP (Virtual IP address) in EC2 with Heartbeat, Keepalived, MHA, etc. grabeni provides command line interface for handling ENI.

The list of grabeni's features below.

  • Listing ENI information.
  • Attacing the specified ENI to the specified instance.
  • Detaching the specified ENI.
  • Grabbing (Attaching and Detaching) the specified ENI to the specified instance.
  • timeout/retry for requesting AWS API.

Requirements

ec2:DescribeInstances
ec2:DescribeNetworkInterfaces
ec2:AttachNetworkInterface
ec2:DetachNetworkInterface

Usage

$ export AWS_ACCESS_KEY_ID='...'
$ export AWS_SECRET_ACCESS_KEY='...'
$ export AWS_REGION='us-east-1'
$ grabeni grab eni-xxxxxx --instanceid i-xxxxxxd # attach eni-xxxxxx to EC2 instance where grabeni runs if instanceid option is skipped

See also grabeni --help.

Example

$ grabeni ls
ID            NAME    STATUS      PRIVATE DNS NAME                              PRIVATE IP  AZ              DEVICE INDEX    INSTANCE ID INSTANCE NAME
eni-00000000  eni01   in-use      ip-10-0-0-100.ap-northeast-1.compute.internal 10.0.0.100  ap-northeast-1b 0   i-00000000  instance01
eni-11111111  eni02   available   ip-10-0-0-10.ap-northeast-1.compute.internal	10.0.0.10   ap-northeast-1c -1
eni-22222222  eni03   avaolable   ip-10-0-0-11.ap-northeast-1.compute.internal	10.0.0.11   ap-northeast-1c 1

$ grabeni status eni-2222222
ID            NAME    STATUS      PRIVATE DNS NAME                              PRIVATE IP  AZ              DEVICE INDEX    INSTANCE ID INSTANCE NAME
eni-22222222  eni03   avaolable   ip-10-0-0-11.ap-northeast-1.compute.internal	10.0.0.11   ap-northeast-1c 1

$ grabeni grab eni-2222222
--> Detaching:    eni-2222222
--> Attaching:    eni-2222222
eni eni-2222222 attached to instance i-xxxxxx

Installation

Homebrew

$ brew tap yuuki/grabeni
$ brew install grabeni

Download binary from GitHub Releases

Releases・yuuki/grabeni - GitHub

Build from source

 $ go get github.com/yuuki/grabeni
 $ go install github.com/yuuki/grabeni/...

Roadmap

  • attach, detach, grab: Show ENI information before execution
  • list: Filter option
  • Add check command to check an availability zone
  • attach, detach, grab: dryrun option

Contribution

  1. Fork (https://github.com/y_uuki/grabeni/fork)
  2. Create a feature branch
  3. Commit your changes
  4. Rebase your local changes against the master branch
  5. Run test suite with the go test ./... command and confirm that it passes
  6. Run gofmt -s
  7. Create new Pull Request

License

The MIT License.

Author

y_uuki