A few weeks ago I posted about a crude bash script to tag your EC2 resources, I have since tweaked the script to use the instance ID to find the volumes
and snapshots
associated with each instance ID.
It will also dynamically pull in account to use from your AWS config file.
Have Fun
#!/bin/bash
## Functions
tag_rescources () {
aws --profile=$profile --region=$region ec2 create-tags --resources $1 \
--tags Key="COST CENTRE",Value="$cost" \
Key="APP",Value="$app" \
Key="ENVIRONMENT",Value="$environment" \
Key="OWNER",Value="$owner"
}
get_volumes (){
aws --profile=$profile --region=$region ec2 describe-volumes \
--filters Name=attachment.instance-id,Values=$1 \
--query "Volumes[].VolumeId" --output=text
}
get_snapshots(){
aws --profile=$profile --region=$region ec2 describe-snapshots \
--filters Name=volume-id,Values=$1 \
--query "Snapshots[].SnapshotId" --output=text
}
## Script
echo "Use this script to tag EC2 instance in the desired account"
echo "Multiple can be enter at once seperated by a singe space."
echo "Below resources are supported using the ID"
echo " Instance ID"
echo " Security Group ID"
echo " Elastic IPs Allocation ID"
echo " "
echo "----------------------------------------------------------- "
echo "Please choose AWS Account Profile"
select profile in `grep '^\[' ~/.aws/config|sed -r 's/\[|\]//g'|awk '{print $2}'`
do
echo "Please choose AWS Region"
select region in eu-west-1 eu-central-1 us-east-1
do
echo "Please list EC2 Instance ID"
echo "Multiple can be entered at once, seperated by a singe space."
read instance
echo "Please Enter COST CENTRE"
read cost
echo "Please Enter APP"
read app
echo "Please Enter ENVIRONMENT"
read environment
echo "Please Enter OWNER"
read owner
## Tagging EC2 Instances
for i in $instance
do
tag_rescources $i
echo "Tagging EC2 Instances $i"
done
## Tagging Volunmes
#! a nested loop is used as the get volume function can only filter one volume at a time
for i in $instance
do
for j in `get_volumes $i`
do
echo "Tagging Volume $j beloning to Instance $i"
tag_rescources $j
done
done
## Tagging Snapshots
#! a nested loop is used as the get snapshot function can only filter one volume at a time
volumes=`get_volumes $instance`
for i in $volumes
do
for j in `get_snapshots $i`
do
echo "Tagging SnapShot $j belonging to Volume $i"
tag_rescources $j
done
done
echo "If no error's above tagging complete"
break
done
break
done
Top comments (0)