Skip to content

Instantly share code, notes, and snippets.

@wknapik
Last active April 6, 2019 12:42
Show Gist options
  • Save wknapik/78aca03acf437bdabfe044ce7ccd831d to your computer and use it in GitHub Desktop.
Save wknapik/78aca03acf437bdabfe044ce7ccd831d to your computer and use it in GitHub Desktop.
Generate a mapping of AWS regions and availability zones for use in cloudformation
Generate a mapping of AWS regions and availability zones for use in cloudformation
Mappings:
# Output of the script.
RegionsAndZones:
ap-northeast-1: { a: true, b: false, c: true, d: true, e: false, f: false }
ap-northeast-2: { a: true, b: false, c: true, d: false, e: false, f: false }
ap-south-1: { a: true, b: true, c: false, d: false, e: false, f: false }
ap-southeast-1: { a: true, b: true, c: true, d: false, e: false, f: false }
ap-southeast-2: { a: true, b: true, c: true, d: false, e: false, f: false }
ca-central-1: { a: true, b: true, c: false, d: false, e: false, f: false }
eu-central-1: { a: true, b: true, c: true, d: false, e: false, f: false }
eu-west-1: { a: true, b: true, c: true, d: false, e: false, f: false }
eu-west-2: { a: true, b: true, c: true, d: false, e: false, f: false }
eu-west-3: { a: true, b: true, c: true, d: false, e: false, f: false }
sa-east-1: { a: true, b: false, c: true, d: false, e: false, f: false }
us-east-1: { a: true, b: true, c: true, d: true, e: true, f: true }
us-east-2: { a: true, b: true, c: true, d: false, e: false, f: false }
us-west-1: { a: true, b: false, c: true, d: false, e: false, f: false }
us-west-2: { a: true, b: true, c: true, d: false, e: false, f: false }
# Conditions to use the mapping in.
Conditions:
ZoneAExists: !Equals [!FindInMap [RegionsAndZones, !Ref "AWS::Region", a], true]
ZoneBExists: !Equals [!FindInMap [RegionsAndZones, !Ref "AWS::Region", b], true]
ZoneCExists: !Equals [!FindInMap [RegionsAndZones, !Ref "AWS::Region", c], true]
ZoneDExists: !Equals [!FindInMap [RegionsAndZones, !Ref "AWS::Region", d], true]
ZoneEExists: !Equals [!FindInMap [RegionsAndZones, !Ref "AWS::Region", e], true]
ZoneFExists: !Equals [!FindInMap [RegionsAndZones, !Ref "AWS::Region", f], true]
#!/usr/bin/env bash
set -eEuo pipefail
declare -A azs
read -ra regions <<<"$(aws ec2 describe-regions --query 'Regions[].RegionName|sort(@)' --output text)"
echo "RegionsAndZones:"
for region in "${regions[@]}"; do
read -ra zones <<<"$(aws ec2 describe-availability-zones \
--region "$region" \
--query 'AvailabilityZones[].ZoneName' \
--output text)"
azs=()
echo -n " $region: { "
for az in "${zones[@]#*[0-9]}"; do
azs[$az]=true
done
for az in {a..f}; do
echo -n "$az: ${azs[$az]:-false}, "
done|head -c -2
echo " }"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment