Skip to content

Instantly share code, notes, and snippets.

@azinneera
Last active August 2, 2018 19:01
Show Gist options
  • Save azinneera/f7e5da87e1e0eac7a0fac7b9c323ff50 to your computer and use it in GitHub Desktop.
Save azinneera/f7e5da87e1e0eac7a0fac7b9c323ff50 to your computer and use it in GitHub Desktop.
Script to copy AMIs across regions using the AWS CLI
#!/bin/bash
####################################################################################
# Gets the list of AMIs from us-east-1 region and copies them to all other regions #
####################################################################################
set -o xtrace
sourceRegion="us-east-1"
regions=("ap-south-1" "eu-west-3" "eu-west-2" "eu-west-1" "ap-northeast-2" "ap-northeast-1" "sa-east-1" "ca-central-1" "ap-southeast-1" "ap-southeast-2" "eu-central-1" "us-east-2" "us-west-1" "us-west-2")
declare -a amiIds=($(aws ec2 describe-images --region $sourceRegion --owner self --filters "Name=root-device-type,Values=ebs" --query 'Images[*].ImageId' --output text))
for a in ${amiIds[@]} ; do
for r in "${regions[@]}" ; do
amiName=$(aws ec2 describe-images --image-id $a --region $sourceRegion --query 'Images[*].Name' --output text)
declare -a tagKeys=($(aws ec2 describe-images --image-ids $a --region $sourceRegion --query 'Images[*].Tags[*].Key' --output text))
declare -a tagValues=($(aws ec2 describe-images --image-ids $a --region $sourceRegion --query 'Images[*].Tags[*].Value' --output text))
newId=$(aws ec2 copy-image --source-image-id $a --source-region $sourceRegion --region $r --name "$amiName" --query ImageId --output text)
for ((i = 0; i < ${#tagKeys[@]}; ++i)); do
aws ec2 create-tags --resources $newId --region $r --tags Key=${tagKeys[$i]},Value=${tagValues[$i]}
done
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment