Skip to content

Instantly share code, notes, and snippets.

@ctranstrum
Created December 27, 2017 21:29
Show Gist options
  • Save ctranstrum/7d3b5c90e6ce131c91754bc8f7c1c4bd to your computer and use it in GitHub Desktop.
Save ctranstrum/7d3b5c90e6ce131c91754bc8f7c1c4bd to your computer and use it in GitHub Desktop.
AWS shortcuts
_Name_Tag_='Tags[?Key==`Name`].Value | [0]'
_Env_Tag_='Tags[?Key==`Environment`].Value | [0]'
_Project_Tag_='Tags[?Key==`Project`].Value | [0]'
_Owner_Tag_='Tags[?Key==`Owner`].Value | [0]'
_App_Tag_='Tags[?Key==`ApplicationGroup`].Value | [0]'
ami () {
aws ec2 describe-images --image-id $1 --output json
}
amilist () {
if [[ $1 =~ win ]]; then
aws ec2 describe-images --filters "Name=platform,Values=windows" "Name=virtualization-type,Values=hvm" --owners self amazon --query "Images[].[ImageId, Name]" \
--output text | sort -f -k 2
else
aws ec2 describe-images --filters "Name=virtualization-type,Values=hvm" --owners self amazon --query "Images[].[ImageId, Description]" \
--output text | grep -v Windows | grep -v None | sort -f -k 2
fi
}
ec2list () {
aws ec2 describe-instances --query "Reservations[].Instances[].[$_Name_Tag_, InstanceId, PrivateIpAddress, ImageId, $_Env_Tag_, $_Owner_Tag_, $_Owner_Tag_, $_App_Tag_]" \
--output text | sort -f
}
ec2din () {
if [[ $1 =~ ^i- ]]; then
aws ec2 describe-instances --instance-id "$@"
else
aws ec2 describe-instances --filter "Name=tag:Name,Values=$1" "${@:2}"
fi
}
ec2find () {
if [[ $1 =~ ^i- ]]; then
aws ec2 describe-instances --instance-id "$1" \
--query "Reservations[].Instances[].[InstanceId, $_Name_Tag_, PrivateIpAddress, ImageId, $_Env_Tag_, $_Owner_Tag_, $_Project_Tag_, $_App_Tag_]" \
--output text | sort -f
else
aws ec2 describe-instances --filter "Name=tag:Name,Values=*$1*" \
--query "Reservations[].Instances[].[$_Name_Tag_, InstanceId, PrivateIpAddress, ImageId, $_Env_Tag_, $_Owner_Tag_, $_Project_Tag_, $_App_Tag_]" \
--output text | sort -f
fi
}
ec2tags () {
aws ec2 describe-instances --query 'Reservations[].Instances[].Tags[].[Key]' \
--output text | sort | uniq -c
}
ec2tagvals () {
aws ec2 describe-instances --filter "Name=tag-key,Values=$1" \
--query "Reservations[].Instances[].[Tags[?Key==\`$1\`].Value]" \
--output text | sort | uniq -c
}
ec2stopped () {
aws ec2 describe-instances --filter 'Name=instance-state-name,Values=shutting-down,stopping,stopped' \
--query "Reservations[].Instances[].[$_Name_Tag_, InstanceId, InstanceType, State.Name, StateReason.Message]" \
--output text | sort -f
}
ec2running () {
aws ec2 describe-instances --filter 'Name=instance-state-name,Values=running' \
--query "Reservations[].Instances[].[$_Name_Tag_, InstanceId, InstanceType, LaunchTime, StateReason.Message" \
--output text | sort -f
}
cwmetrics () {
if [[ $1 =~ ^i- ]]; then
aws cloudwatch list-metrics --dimensions Name=InstanceId,Value=$1 --output text --query "Metrics[].[MetricName]" | sort
else
echo Missing instance-id
fi
}
cwcpu () {
if [[ $1 =~ ^i- ]]; then
hour=`date -u -v-1H +%FT%TZ`
now=`date -u +%FT%TZ`
min=`aws cloudwatch get-metric-statistics --namespace 'AWS/EC2' --metric-name CPUUtilization --dimensions Name=InstanceId,Value=$1 --start-time $hour --end-time $now --period 3600 --statistics Minimum --query 'Datapoints[].[Minimum]' --output text`
avg=`aws cloudwatch get-metric-statistics --namespace 'AWS/EC2' --metric-name CPUUtilization --dimensions Name=InstanceId,Value=$1 --start-time $hour --end-time $now --period 3600 --statistics Average --query 'Datapoints[].[Average]' --output text`
max=`aws cloudwatch get-metric-statistics --namespace 'AWS/EC2' --metric-name CPUUtilization --dimensions Name=InstanceId,Value=$1 --start-time $hour --end-time $now --period 3600 --statistics Maximum --query 'Datapoints[].[Maximum]' --output text`
echo Last hour CPU usage min: $min% / avg: $avg% / max: $max%
else
echo Missing instance-id
fi
}
cwnetwork () {
if [[ $1 =~ ^i- ]]; then
hour=`date -u -v-1H +%FT%TZ`
now=`date -u +%FT%TZ`
in=`aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name NetworkIn --dimensions Name=InstanceId,Value=$1 --start-time $hour --end-time $now --period 3600 --statistics Maximum --query 'Datapoints[].[Maximum]' --output text`
out=`aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name NetworkOut --dimensions Name=InstanceId,Value=$1 --start-time $hour --end-time $now --period 3600 --statistics Maximum --query 'Datapoints[].[Maximum]' --output text`
echo Last hour network traffic max In: $in bytes / Out: $out bytes
else
echo Missing instance-id
fi
}
cwstatus () {
if [[ $1 =~ ^i- ]]; then
hour=`date -u -v-1H +%FT%TZ`
now=`date -u +%FT%TZ`
status=`aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name StatusCheckFailed --dimension Name=InstanceId,Value=$1 --start-time $hour --end-time $now --period 3600 --statistics Maximum --query 'Datapoints[].[Maximum]' --output text`
if [[ $status = '0.0' ]]; then
echo Last hour Status: green
else
echo Last hour Status Check Failures at:
aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name StatusCheckFailed --dimension Name=InstanceId,Value=$1 --start-time $hour --end-time $now --period 60 --statistics Maximum --query 'Datapoints[].[Timestamp, Maximum]' --output text | egrep -v '\t0.0$' | awk '{print $1}' | sort
fi
else
echo Missing instance-id
fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment