AWS Cli自分用Tips

### EC2


- EC2インスタンスのNameタグを取得する

```
aws ec2 describe-instances --instance-ids INSTANCE_ID --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value' --output text
```

- 全てのインスタンスの情報を取得

```
aws ec2 describe-instances | jq '.Reservations[].Instances[]'
```

- 全てのインスタンスの Public IP と Public DNS Name を取得

```
aws ec2 describe-instances | jq '.Reservations[].Instances[] | {PublicDnsName, PublicIpAddress}' 
```

- 全てのインスタンスのタグ名を取得

```
aws ec2 describe-instances | jq '.Reservations[].Instances[]|{InstanceId, Tags}' 
```

- インスンタンスへ ssh でアクセスするのに必要な情報を取得

```
aws ec2 describe-instances --filters Name=tag-value,Values="XXXX" |jq '.Reservations[].Instances[]|{InstanceId,PublicIpAddress,PrivateIpAddress,Tags}' 
```

- PublicIpAddressを取得

```
aws ec2 describe-instances | jq '.Reservations [] .Instances [] .PublicIpAddress'
```

- インスタンスIDを取得

```
aws ec2 describe-instances | jq -r '.Reservations[] .Instances[] .InstanceId'
aws ec2 describe-instances | jq '.Reservations[] .Instances[] .InstanceId'
```

- Elastic IPの一覧を取得

```
aws ec2 describe-addresses| jq '.'
```

- PublicDnsName, PublicIpAddress, Tagsの一覧を取得

```
aws ec2 describe-instances | jq '.Reservations[].Instances[] | {PublicDnsName, PublicIpAddress, Tags}'
```

- AutoScalingで起動しているインスタンスの状態,InstanceID,PublicDnsName,PublicIpAddressの一覧を取得

```
aws ec2 describe-instances --filters "Name=tag:aws:autoscaling:groupName,Values=YOUR AUTOSCALING GROUP NAME" | jq '.Reservations[].Instances[] | {State, InstanceId, PublicDnsName, PublicIpAddress}'
```

- 自分で作成したAMIのName,ImageIdの一覧を取得

```
aws ec2 describe-images --owners self | jq '.Images[] | {Name, ImageId}'
```

- 自分で作成したAMIに特定のtagが付いているName,ImageIdの一覧を取得

```
aws ec2 describe-images --owners self --filter Name=tag-key,Values=YOUR TAG NAME Name=tag-value,Values=YOUR TAG VALUES | jq '.Images[] | {Name, ImageId}'
```

- 自分で作成したSnapshotに特定のtagが付いているSnapshotIdの一覧を取得

```
aws ec2 describe-snapshots --filter Name=tag-key,Values=YOUR TAG NAME Name=tag-value,Values=YOUR TAG VALUES | jq '.Snapshots[] .SnapshotId'
```

- 東京リージョンのEBSのVolumeId,SnapshotId,Sizeの一覧を取得

```
aws ec2 describe-volumes --region ap-northeast-1 | jq '.Volumes[]| {VolumeId, SnapshotId, Size}'
```

- 対象のAutoScalingグループで稼働中のインスタンスIDを取得
 
```
aws ec2 describe-instances --filter 'Name=tag:aws:autoscaling:groupName,Values=demo-asg' "Name=instance-state-name,Values=running" | jq '.Reservations[].Instances[] | {InstanceId}'
```

- Auto Scaling グループのインスタンスの更新（min, max変更）

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name demo-asg --min-size 2 --max-size 8
```

- AutoScalingスケジュール実行

```
aws autoscaling put-scheduled-update-group-action --auto-scaling-group-name demo-asg --scheduled-action-name "demo-scaling-1100-1500" --recurrence "0 2 * * *" --min-size 2 --max-size 8 --desired-capacity 3
```

- AutoScalingグループに設定されたインスタンスの設定

```
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names demo-asg | jq '.AutoScalingGroups[] | {MinSize, DesiredCapacity, MaxSize}'
```

- AWS EC2 で取得しているグローバルIP(Elastic IP)を CLI で一覧する

```
aws ec2 describe-addresses | jq '.[] | .[] | .PublicIp' | sed 's/\"//g'
```

- (add 2016/07/29) セキュリティグループID指定して設定内容確認

```
 aws ec2 describe-security-groups --query 'SecurityGroups[?GroupId==`sg-12345678`]'
```

- (add 2016/11/15) 停止しているインスタンスIDの一覧を確認

```
aws ec2 describe-instances --filter "Name=instance-state-name,Values=stopped" --query 'Reservations[].Instances[].[InstanceId]'
```

- (add 2016/11/15) 削除保護を無効化

```
aws ec2 modify-instance-attribute --instance-id i-xxxxxx --no-disable-api-termination
```

- (add 2017/02/20) Parameter Storeの値設定

```
# 文字列
aws ssm put-parameter --name dev.db_user --type String --value devdbuser --region ap-northeast-1

# 安全な文字列
aws ssm put-parameter --name dev.db_password --type SecureString --value password --region ap-northeast-1
```

- (add 2017/02/20) Parameter Storeの値取得

```
aws --region ap-northeast-1 ssm get-parameters --name dev.db_password --with-decryption

aws --region ap-northeast-1 ssm get-parameters --name dev.db_user --with-decryption

aws --region ap-northeast-1 ssm get-parameters --name dev.db_user --with-decryption --query "Parameters[0].Value" --output text

aws --region ap-northeast-1 ssm get-parameters --name dev.db_password --with-decryption --query "Parameters[0].Value" --output text
```

- (add 2017/03/02) AMI作成（タイムスタンプ付き）

```
aws ec2 --region ap-northeast-1 create-image --instance-id i-xxxxx --name base-$(date +%Y%m%d%H%M%S) --description 'created by '$(date +%Y%m%d%H%M%S) --no-reboot
```

- (add 2017/03/02) EBSスナップショット作成（タイムスタンプ付き）

```
aws ec2 --region ap-northeast-1 create-snapshot --volume-id vol-xxxxx --description 'created by '$(date +%Y%m%d%H%M%S)
```

- (add 2017/03/15) セキュリティグループのInboundへ追加

```
aws --region ap-northeast-1 ec2 authorize-security-group-ingress --group-id sg-xxxxxxxx --protocol tcp --port 80 --cidr 192.168.10.1/32
```

- (add 2017/03/15) セキュリティグループのInboundから削除

```
aws --region ap-northeast-1 ec2 revoke-security-group-ingress --group-id sg-xxxxxxxx --protocol tcp --port 80 --cidr 192.168.10.1/32
```

- (add 2017/09/04) 特定のタグが付いた起動中のインスタンスのprivate ipを取得する

```
aws ec2 describe-instances --filter "Name=tag-key,Values=prj" "Name=tag-value,Values=demo" --query 'Reservations[].Instances[?State.Name==`running`].PrivateIpAddress[]' --region ap-northeast-1
```


### ELB
- ELBに紐付いているInstanceId,Statusを一覧取得

```
aws elb describe-instance-health --load-balancer-name YOUR ELB NAME | jq '.InstanceStates[]|{InstanceId, State}'
```


### RDS

- RDSのインスタンスを取得

```
aws rds describe-db-instances 
```

- RDSのEndPointとDB Instance Identifierを取得

```
aws rds describe-db-instances | jq '.DBInstances[] |{DBInstanceIdentifier,Endpoint}'
```

- RDS SnapshotのDBSnapshotIdentifier,DBInstanceIdentifierの一覧を取得

```
aws rds describe-db-snapshots | jq '.DBSnapshots[] | {DBSnapshotIdentifier, DBInstanceIdentifier}'
```

- RDSのログ一覧取得

```
aws rds describe-db-log-files --db-instance-identifier demo-db | jq '.DescribeDBLogFiles[].LogFileName'
```

- RDSのログダウンロード

```
aws rds download-db-log-file-portion --db-instance-identifier demo-db --region ap-northeast-1 --log-file-name "slowquery/mysql-slowquery.log" --output text
```

- (add 2017/02/20) RDSのマスターパスワード再設定

```
aws rds modify-db-instance --db-instance-identifier demo-db --master-user-password 'xxxxxxx' --region ap-northeast-1
```


### S3

- バケット一覧

```
aws s3api list-buckets | jq '.Buckets[] .Name'
```

- バケットの使用量

```
aws s3 ls s3://demo --recursive --human-readable --summarize --region ap-northeast-1
```


### VPC

- VPC一覧を取得

```
aws ec2 describe-vpcs | jq '.Vpcs[]'
```

- Subnet一覧を取得

```
aws ec2 describe-subnets | jq '.Subnets[]'
```

- RouteTable一覧を取得

```
aws ec2 describe-route-tables | jq '.RouteTables[]'
```

### IAM

- ユーザ一覧を取得

```
aws iam list-users
```

- 自分のAWSアカウントID確認

```
aws sts get-caller-identity
```

- ELBへ証明書アップロード


```
aws iam upload-server-certificate --server-certificate-name monoqn-20170512 --certificate-body file://my-crt.pem --private-key file://my-key.pem --certificate-chain file://my-chain.pem
```


### Elastic Beanstalk

- ApplicationName,EnvironmentName,VersionLabel,EndpointURL,CNAMEを一覧取得

```
aws elasticbeanstalk describe-environments | jq '.Environments[] | {ApplicationName, EnvironmentName, VersionLabel, EndpointURL, CNAME}'
```

- 特定の環境で起動しているEC2インスタンスIDを取得

```
aws elasticbeanstalk describe-environment-resources --environment-name YOUR ENVIRONMENT NAME | jq '.EnvironmentResources.Instances[].Id'
```

### CloudTrail

- 東京リージョンのCloudTrailで出力しているS3bucketを取得

```
aws cloudtrail describe-trails --region ap-northeast-1 | jq '.trailList[] .S3BucketName'
```

### ESC
- 最新のECS-optimized AMI ID取得

```
aws ssm get-parameters --names "/aws/service/ecs/optimized-ami/amazon-linux/recommended" --query "Parameters[0].Value" --output text --region ap-northeast-1 | jq -r .image_id
```


### その他便利なコマンド
- 自分のグローバルIPを取得

```
curl -s ipinfo.io | jq -r '.ip'
curl ifconfig.me
curl http://checkip.amazonaws.com/
```

- 自分のローカルIPを取得

```
ifconfig en0 | grep inet
```

## 2017/01/24 追記
こういうGitHubのrepository見つけました。
[https://github.com/awslabs/awscli-aliases](https://github.com/awslabs/awscli-aliases)
これめっちゃ便利です！！おすすめします。