aws_cli_cheat_sheet.txt
# Count total EBS based storage in AWS |
aws ec2 describe-volumes | jq '[.Volumes[].Size] | add' |
# Count total EBS storage with a tag filter |
aws ec2 describe-volumes --filters 'Name=tag:Name,Values=CloudEndure Volume qjenc' | jq '[.Volumes[].Size] | add' |
# Describe instances concisely |
aws ec2 describe-instances | jq '[.Reservations | .[] | .Instances | .[] | {InstanceId: .InstanceId, State: .State, SubnetId: .SubnetId, VpcId: .VpcId, Name: (.Tags[]|select(.Key'Name')|.Value)}]' |
# Wait until $instance_id is running and then immediately stop it again |
aws ec2 wait instance-running --instance-id $instance_id && aws ec2 stop-instances --instance-id $instance_id |
# Get 10th instance in the account |
aws ec2 describe-instances | jq '[.Reservations | .[] | .Instances | .[]] | .[10]' |
# List the private IP addresses of all instances |
aws ec2 describe-instances | jq '[.Reservations | .[] | .Instances | .[] | .PrivateIpAddress] | sort' |
# Do that, but only on non-terminated instances |
aws ec2 describe-instances | jq '[.Reservations | .[] | .Instances | .[] | select(.State.Name!='terminated') | {Name: (.Tags[]|select(.Key'Name')|.Value), PrivateIp: .PrivateIpAddress}]' |
# JQ export to csv command / suffix |
export_csv_suffix='| map([.Name, .PrivateIp] | join(',')) | join('n')' |
# Get all production instances |
instance_ids=$(aws ec2 describe-instances | jq '[.Reservations | .[] | .Instances | .[] | select(.State.Name!='terminated') | select((.Tags[]|select(.Key'Environment')|.Value) 'prod') | {Name: (.Tags[]|select(.Key'Name')|.Value), InstanceId: .InstanceId}]' | jq '.[] | .InstanceId') |
# Add a backup tag to those instances |
echo $instance_ids | sed 's/'//g' | grep i- | parallel --delay 3 aws ec2 create-tags --resources {} --tags Key=Backup,Value=PolicyA |
# Attach multiple new ebs volumes to an instance |
instance_id='i-0d42888191f597bb8' |
volume_size='8' |
for x in {a..h} |
do |
volume_id=$(aws ec2 create-volume --size $volume_size --volume-type gp2 --availability-zone eu-west-1a | jq -r '.VolumeId') |
aws ec2 wait volume-available --volume-ids $volume_id |
aws ec2 attach-volume --volume-id $volume_id --instance-id $instance_id --device /dev/xvd$x |
done |
# Produce a summary of instances |
jq '[.Reservations | .[] | .Instances | .[] | select(.State.Name!='terminated') | {Name: (.Tags[]|select(.Key'Name')|.Value), InstanceId: .InstanceId}]' |
# Check instances for ones which are missing required tags |
instances=$(cat './scripts/prod-instances.json') |
required_tags='['Environment','Backup','Owner','AppName','Name']' |
echo $instances | jq '[.Reservations | .[] | .Instances | .[] | select(.Tags | [.[] | .Key] | contains($required_tags) | not)]' | jq ' |
[.[] | select(.State.Name!='terminated') | select(([.Tags | .[] | .Key]) | contains(['CloudEndure creation time']) | not) | { |
InstanceId: .InstanceId, |
InstanceName: (.Tags | from_entries | .Name), |
MissingTags: (('$required_tags') - ([.Tags | .[] | .Key])) |
}]' |
# Get the 'Live & Tagged' instances |
instances=$(aws ec2 describe-instances) |
live=$(echo $instances | jq '[.Reservations | .[] | .Instances | .[] | select(.Tags | [.[] | .Key] | contains($required_tags))]') |
# Enable termination protection from a list of instances stored in $list |
echo $live | jq -r '.[] | .InstanceId' | while read id |
do |
echo 'Enabling termination proection on machine: $id' |
aws ec2 modify-instance-attribute --disable-api-termination --instance-id $id |
done |
# Attach unused EBS Volumes to an instance |
instance_id='i-abcd1234' |
letters=({a..j}) |
volumes=$(aws ec2 describe-volumes | jq -r '.Volumes[] | select(.State'available') | .VolumeId') |
lc=1 |
echo $volumes | while read id |
do |
echo 'Attaching volume on: $id' |
aws ec2 attach-volume --instance-id $instance_id --volume-id $id --device /dev/sd${letters[++lc]} |
done |
# Detach and delete secondary volumes on a machine |
aws ec2 describe-instances --instance-ids $instance_id | jq -r '.Reservations[0].Instances[0].BlockDeviceMappings | .[] | select(.DeviceName != '/dev/sda1') | .Ebs.VolumeId' | while read volume_id |
do |
aws ec2 detach-volume --volume-id $volume_id && |
aws ec2 wait volume-available --volume-ids $volume_id && |
aws ec2 delete-volume --volume-id $volume_id |
done |
# Copy everything from an account into an OSX clipboard |
aws ec2 describe-volumes | jq '[.Volumes[] | select(.State'available') | .VolumeId]' | pbcopy |
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment
Aws Cli Commands List
AWS Command Line Interface User Guide About Amazon Web Services About Amazon Web Services Amazon Web Services (AWS) is a collection of digital infrastructure services that developers can leverage when developing their applications. The services include computing, storage, database, and application synchronization (messaging and queuing). Install aws cli: pip install awscli, aws help: Load aws cli profile: aws configure: List regions: aws ec2 describe-regions: List instances: aws ec2 describe-instances: AWS CLI config files /.aws/credentials, /.aws/config: Reference: Github: awslabs/aws-shell.
Aws Cli Cheat Sheet Github
- Brew install awscli aws configure Aws Cli. Answer & Comment.
- AWS CLI Cheat Sheet “aws configure” command lets you connect to your AWS account “aws iam cerate-user –user-name” command will let you create a user in the AWS account called “AWSCLITEST”.