Go言語を勉強しながらおれおれAWS-CLI ( ore-aws ) ツールを作った

# 課題
- AWSアカウント複数管理していると、個別にwebコンソールにログインするのが大変
- webコンソールでぽちぽちするのが手間
- インスタンスの起動とかAMI焼きとかちょっとしたオペレーションに時間かかる...(´･ω･`)

# そこで、やったこと
Go勉強してるし、aws-sdk-goを使って独自のコマンドラインツールを作ろう(＾▽＾)！

- コマンド作成は Flagパッケージを利用しています。
  - http://golang.jp/pkg/flag 

- main以外のソースコードはこちらです。
  - `$ go get github.com/yhidetoshi/clitoolgoaws`
  - https://github.com/yhidetoshi/clitoolgoaws

- 準備
  - 実行環境にaws-cliを使える必要があります 
  - go buildでmain.goをクロスコンパイルする
  - /usr/local/bin等の場所に保存する
     - 以下は /usr/local/binに `ore-aws` という名前で配置もしくはパスを通したときの例
  - macOSとLinux(amd64)とWindows用にクロスコンパイルしたバイナリはこちらです
     - https://github.com/yhidetoshi/go-awscli-tool/tree/master/bin
    
  

# 使い方(コマンドオプション)
### EC2
```
  ■ 一覧  
    > $ ore-aws -resource=ec2 -profile=<PROFILE>
  
  ■ 起動
    > $ ore-aws -resource=ec2 -start -instances=<INSTANCENAME> or <INSTANCEID> -profile=<PROFILE>
  ■ 停止
    > $ ore-aws -resource=ec2 -stop -instances=<INSTANCENAME> or <INSTANCEID> -profile=<PROFILE>
  
  ■ 削除
    > $ ore-aws -resource=ec2 -terminate -instances=<INSTANCENAME> or <INSTANCEID> -profile=<PROFILE>
  ※ インスタンスを 複数同時に操作するときは `,` で区切り複数指定する
  
  ■ AMI焼き
    > $ ore-aws -resource=ec2 -ami -aminame=<AMINAME> -instances=<INSTANCENAME> or <INSTANCEID> -profile=<PROFILE>
  
  ■ AMI情報の一覧を取得
    > $ ore-aws -resource=ec2 -amilist -profile=<PROFILE>
  
  ■ AMIの削除(解除)
    > $ ore-aws -resource=ec2 -deregister -amiid=<ami-id> -profile=<PROFILE>
  
  ■ ElasticIPの一覧を取得
    > $ ore-aws -resource=ec2 -eiplist -profile=<PROFILE>
  
  ■ ElasticIPのリリース
    > $ ore-aws -resource=ec2 -deleteeip -allocationid=<ALLOCATIONID> -profile=<PROFILE>
  
  ■ SecurityGroupの一覧を取得
    > $ ore-aws -resource=ec2 -sglist -profile=<PROFILE>
  
  ■ SecurityGroupのルール確認(output:json)
    > $ ore-aws -resource=ec2 -show -sgid=<GROUPID> -profile=<PROFILE>
  
  ■ AutoScalingグループ一覧の情報を出力(コンソール画面相当)
    > $ ore-aws -resource=as -profile=<PROFILE>
  
  ■ AutoScalingグループのインスタンスの`最大`数を変更
    > $ ore-aws -resource=as -asg=<GROUP名> -max -num=<NUM> -profile=<PROFILE>
  
  ■ AutoScalingグループのインスタンスの`最小`数を変更
    > $ ore-aws -resource=as -asg=<GROUP名> -min -num=<NUM> -profile=<PROFILE>
  
  ■ AutoScalingグループのインスタンスの`希望`数を変更
    > $ ore-aws -resource=as -asg=<GROUP名> -desire -num=<NUM> -profile=<PROFILE>
```

### RDS
```
  ■ 一覧  
    > $ ore-aws -resource=rds -profile=<PROFILE>
  
  ■ 起動
    > $ ore-aws -resource=rds -start -instances=<INSTANCENAME> or <INSTANCEID> -profile=<PROFILE>
  
  ■ 停止
    > $ ore-aws -resource=rds -stop -instances=<INSTANCENAME> or <INSTANCEID> -profile=<PROFILE>  
```

### ELB
```
  ■ 一覧
    > $ ore-aws -resource=elb -profile=<PROFILE>
  
  ■ ELBのバックエンドインスタンスを取得
    > $ ore-aws -resource=elb -show -elbname=<ELBNAME> -profile=<PROFILE>
  
  ■ ELBにバックエンドインスタンスを登録
    > $ ore-aws -resource=elb -register -elbname=<ELBNAME> -instances=<INSTANCEID> -profile=<PROFILE>
  
  ■ ELBにバックエンドインスタンスを解除
    > $ ore-aws -resource=elb -deregister -elbname=<ELBNAME> -instances=<INSTANCEID> -profile=<PROFILE>
```

### S3
```
  ■ バケット一覧
    > $ ore-aws -resource=s3 -profile=<PROFILE>
  
  ■ バケットのオブジェクト一覧を取得
    > $ ore-aws -resource=s3 -show -bucket=<BUCKETNAME> -profile=<PROFILE>
  
  ■ バケットのサイズ取得
    > $ ore-aws -resource=s3 -size -bucket=<BUCKETNAME> -profile=<PROFILE> 
  
  ■ バケットの削除(条件: bucket　is empty) 
    > $ ore-aws -resource=s3 -deletebucket -bucket=<BUCKETNAME> -profile=<PROFILE>
  
  ■ オブジェクト削除
    > $ ore-aws -resource=s3 -deleteobject -bucket=<BUCKETNAME> -object=<FILENAME>
  
  ■ バケット内のオブジェクトを全て削除
    > $ ore-aws -resource=s3 -deleteallobject -bucket=<BUCKETNAME> -profile=<PROFILE>

  ■ Tokyoリージョン内の全バケットのACLがPublic or Privateかを取得
    > $ ore-aws -resource=s3 -checkacl -profile=<PROFILE>

  ■ Tokyoリージョン内の全バケットサイズを取得
    > $ ore-aws -resource=s3 -sizeall -profile=<PROFILE>
```

### Route53
```
  ■ Zone一覧
    > $ ore-aws -resource=route53 -profile=<PROFILE>
  ■ Zoneid指定のレコード情報取得
    > $ ore-aws -resource=route53 -show -zoneid=<ZONEID> -profile=<PROFILE>
```

### Cloudwatch
```
  ■ Billing
    > $ ore-aws -resource=cloudwatch -billing -profile=<PROFILE>
  ■ Alarm
    > $ ore-aws -resource=cloudwatch -profile=<PROFILE>
```

### IAM
```
  ■ ユーザ一覧
    > $ ore-aws -resource=iam-user -profile=<PROFILE>
  ■ グループ一覧
    > $ ore-aws -resource=iam-group -profile=<PROFILE>
```


  
- 参考
  - `GoDoc`: https://godoc.org/github.com/aws/aws-sdk-go/aws
  - `aws-sdk-go APIリファレンス`: https://docs.aws.amazon.com/sdk-for-go/api/