
The one-page guide to AWS CLI: usage, examples, links, snippets, and more. It comes with a command line interface (CLI) to help with the deployment of applications. The scope of this blog post is to give you a list of useful command lines to use for deploying your applications. We don’t want to turn you into a superhero (we’ll tackle this in a future blog post), but we want to give you the CF CLI superpower. The AWS Command Line Interface (CLI), on the other hand, is a unified tool to manage your AWS services. AWS CloudFormation provides a common language for you to describe and provision all the infrastructure resources in your cloud environment.

Useful Aws Cli Commands
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 |
Aws Cli Commands Cheat Sheet Pdf

Aws Cli Command Reference
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment
