I switch instances between different regions frequently and sometimes I forget to turn off my running instance from a different region. I couldn't find any way to see all the running instances on Amazon console.
Is there any way to display all the running instances regardless of region?

- 42,508
- 29
- 229
- 225
-
4Not ideal and definitely not obvious but you can use `Resource Groups > Tag Editor` as a GUI option. See my answer below. – Heinrich Filter Aug 16 '18 at 11:19
-
3@DanDascalescu are you sure? How much money do you think AWS has made from people like the OP who forgot to turn off a running instance? – smartcaveman Feb 19 '19 at 01:32
-
2@DanDascalescu as smartcaveman says it's noway dumb if instances get strewn all over the many regions and forgotten about while the $ ticker tick tick ticks for the Bezos. – Ed R Mar 01 '19 at 17:12
-
2@DanDascalescu how would they charge people for forgetting the instances if they just showed what's running.. ? – EralpB Jul 04 '19 at 13:02
19 Answers
Nov 2021 Edit: AWS has recently launched the Amazon EC2 Global View with initial support for Instances, VPCs, Subnets, Security Groups and Volumes.
See the announcement or documentation for more details
A non-obvious GUI option is the Tag Editor in the Resource Groups console. Here you can find all instances across all regions, even if the instances were not tagged.

- 9,211
- 17
- 48
- 69

- 5,760
- 1
- 33
- 34
-
1@breakpoint looks like they now added back a link to the previous Tag Editor that supports multi-region search. – Heinrich Filter Mar 08 '19 at 06:37
-
-
2It would be great if aws had a built in drop down for 'all-regions' or similar – stevec Jun 18 '19 at 08:56
-
2@user5783745 the screen has recently been updated and now has an "All regions" option – Heinrich Filter Jul 12 '19 at 14:11
-
@HeinrichFilter So it does. I just tried it. Very handy! Thanks for pointing out – stevec Jul 12 '19 at 14:16
-
July 2021: https://eu-west-3.console.aws.amazon.com/resource-groups/tag-editor/find-resources – chris Jul 20 '21 at 12:42
-
There still seems to be no AWS CLI or python SDK command available (that does not involve a loop through all the regions) – fabiog1901 Mar 02 '22 at 22:07
I don't think you can currently do this in the AWS GUI. But here is a way to list all your instances across all regions with the AWS CLI:
for region in `aws ec2 describe-regions --region us-east-1 --output text | cut -f4`
do
echo -e "\nListing Instances in region:'$region'..."
aws ec2 describe-instances --region $region
done
Taken from here (If you want to see full discussion)
Also, if you're getting a
You must specify a region. You can also configure your region by running "aws configure"
You can do so with aws configure set region us-east-1
, thanks @Sabuncu for the comment.
Update
Now (in 2019) the cut command should be applied on the 4th field: cut -f4

- 3,759
- 4
- 29
- 56
-
15To avoid `cut`, you can use: `aws ec2 describe-regions --query Regions[*].[RegionName] --output text` – stefansundin Sep 28 '17 at 21:54
-
If using profiles add --profile profile-name to **both** of the aws ec2 commands. – Carlton Jul 06 '18 at 09:52
-
You can use this command on Windows 10 CMD, `FOR /F %G IN ('aws ec2 describe-regions --query Regions[*].[RegionName] --output text') DO (aws ec2 describe-instances --region %G)` – Manjula Feb 16 '19 at 15:08
-
This doesn't seem to work now -- `You must specify a region. You can also configure your region by running "aws configure".` -- seems like specifying a region is the opposite of what I want to do – Will Sheppard Feb 28 '19 at 09:53
-
@WillSheppard You must first configure your region; e.g. `aws configure set region us-east-1`. Then, when you run `aws ec2 describe-regions`, you should have no problems. Please see answer: https://stackoverflow.com/a/46577479/360840 as well as other answers under the related question. – Sabuncu Apr 16 '19 at 20:19
-
For a more succinct output, you can it inside of the for: ```aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]' --filters Name=instance-state-name,Values=running --region $region --output text ``` – Thiago Jun 03 '19 at 14:16
-
In Console
Go to VPC dashboard https://console.aws.amazon.com/vpc/home
and click on Running instances
-> See all regions
.
In CLI
Add this for example to .bashrc
. Reload it source ~/.bashrc
, and run it
function aws.print-all-instances() {
REGIONS=`aws ec2 describe-regions --region us-east-1 --output text --query Regions[*].[RegionName]`
for REGION in $REGIONS
do
echo -e "\nInstances in '$REGION'..";
aws ec2 describe-instances --region $REGION | \
jq '.Reservations[].Instances[] | "EC2: \(.InstanceId): \(.State.Name)"'
done
}
Example output:
$ aws.print-all-instances
Listing Instances in region: 'eu-north-1'..
"EC2: i-0548d1de00c39f923: terminated"
"EC2: i-0fadd093234a1c21d: running"
Listing Instances in region: 'ap-south-1'..
Listing Instances in region: 'eu-west-3'..
Listing Instances in region: 'eu-west-2'..
Listing Instances in region: 'eu-west-1'..
Listing Instances in region: 'ap-northeast-2'..
Listing Instances in region: 'ap-northeast-1'..
Listing Instances in region: 'sa-east-1'..
Listing Instances in region: 'ca-central-1'..
Listing Instances in region: 'ap-southeast-1'..
Listing Instances in region: 'ap-southeast-2'..
Listing Instances in region: 'eu-central-1'..
Listing Instances in region: 'us-east-1'..
Listing Instances in region: 'us-east-2'..
Listing Instances in region: 'us-west-1'..
Listing Instances in region: 'us-west-2'..

- 2,555
- 2
- 31
- 41
-
3In 2021 this VPC Management Console way was the best way for me to find all regions with an EC2 Instance running. Thanks sobi3ch. – Paul Watson May 28 '21 at 12:43
From VPC
Dashboard:
First go to VPC Dashboard
Then find Running instances and expand see all regions. Here you can find all the running instances of all region:
From EC2
Global view:
Also you can use AWS EC2 Global View to watch Resource summary and Resource counts per Region.

- 1,273
- 11
- 25
-
-
@RezaTaba I don't know why you couldn't find, but I can still see Running Instances. I have updated my answer, hope it may help. – Md Riadul Islam Sep 18 '22 at 02:30
-
1Thanks a lot. I guess the issue was me trying to access it on a phone. Found it on a pc. – Reza Taba Sep 19 '22 at 09:58
@imTachu solution works well. To do this via the AWS console...
- AWS console
- Services
- Networking & Content Delivery
- VPC
- Look for a block named "Running Instances", this will show you the current region
- Click the "See all regions" link underneath

- 5,533
- 4
- 54
- 73
-
1
-
2in AWS console: click 'services' > in the text box type 'vpc' and then select VPC- isolated cloud resources – nir weiner Jun 13 '19 at 13:01
-
They have updated it again. There is now a shortcut in the EC2 dashboard. Go to the instances section and click on "instances". It will show you all the running instances in the select region. – Mindfulgeek Jun 22 '20 at 19:51
-
Sorry Will - it's there ! But you can go direct to VPC. Mindfulgeek - you have missed the point: "by region" was always there in EC2, but the OP wanted to see across all regions. The VPC method allows you to see if any are there across regions – MikeW Jul 07 '21 at 07:17
Every time you create a resource, tag it with a name and now you can use Resource Groups to find all types of resources with a name tag across all regions.

- 109
- 1
- 5
-
This is the way to do it. No crazy loops or multiple queries. Resource groups will put that all together for you! – rusty Nov 19 '21 at 14:15
After reading through all the solutions and trying bunch of stuff, the one that worked for me was-
- List item
- Go to Resource Group
- Tag Editor
- Select All Regions
- Select EC2 Instance in resource type
- Click Search Resources

- 199
- 2
- 8
Based on imTachus answer but less verbose, plus faster. You need to have jq and aws-cli installed.
set +m
for region in $(aws ec2 describe-regions --query "Regions[*].[RegionName]" --output text); do
aws ec2 describe-instances --region "$region" | jq ".Reservations[].Instances[] | {type: .InstanceType, state: .State.Name, tags: .Tags, zone: .Placement.AvailabilityZone}" &
done; wait; set -m
The script runs the aws ec2 describe-instances
in parallel for each region (now 15!) and extracts only the relevant bits (state, tags, availability zone) from the json output. The set +m
is needed so the background processes don't report when starting/ending.
Example output:
{
"type": "t2.micro",
"state": "stopped",
"tags": [
{
"Key": "Name",
"Value": "MyEc2WebServer"
},
],
"zone": "eu-central-1b"
}

- 11,007
- 2
- 61
- 75
You can run DescribeInstances()
across all regions.
Additionally, you can:
- Automate it through Lambda and Cloud watch.
- Create api endpoint using Lambda and api gateway and use it in your code
A sample in NodeJS:
- Create and array of regions (endpoints). [can also use AWS describeRegions() ]
var regionNames = ['us-west-1', 'us-west-2', 'us-east-1', 'eu-west-1', 'eu-central-1', 'sa-east-1', 'ap-southeast-1', 'ap-southeast-2', 'ap-northeast-1', 'ap-northeast-2']; regionNames.forEach(function(region) { getInstances(region); });
- Then, in
getInstances
function,DescribeInstances()
can be called.
function getInstances(region) { EC2.describeInstances(params, function(err, data) { if (err) return console.log("Error connecting to AWS, No Such Instance Found!"); data.Reservations.forEach(function(reservation) { //do any operation intended }); }
And Off Course, feel free to use ES6 and above.
I wrote a lambda function to get you all the instances in any state [running, stopped] and from any regions, will also give details about instance type and various other parameters.
The Script runs across all AWS regions and calls DescribeInstances()
, to get the instances.
You just need to create a lambda function with run-time nodejs
.
You can even create API out of it and use it as and when required.
Additionally, You can see AWS official Docs For DescribeInstances to explore many more options.

- 1,477
- 2
- 15
- 24
-
you have to actually read the linked code for this to make sense https://github.com/jparasha/Get_All_Ec2_Instances_Across_All_Regions/blob/master/getInstances.js – stuart Nov 12 '20 at 18:47
A quick bash oneliner command to print all the instance IDs in all regions:
$ aws ec2 describe-regions --query "Regions[].{Name:RegionName}" --output text |xargs -I {} aws ec2 describe-instances --query Reservations[*].Instances[*].[InstanceId] --output text --region {}
# Example output
i-012344b918d75abcd
i-0156780dad25fefgh
i-0490122cfee84ijkl
...

- 1,369
- 4
- 22
- 32
My script below, based on various tips from this post and elsewhere. The script is easier to follow (for me at least) than the long command lines.
The script assumes credential profile(s) are stored in file ~/.aws/credentials
looking something like:
[default]
aws_access_key_id = foobar
aws_secret_access_key = foobar
[work]
aws_access_key_id = foobar
aws_secret_access_key = foobar
Script:
#!/usr/bin/env bash
#------------------------------------#
# Script to display AWS EC2 machines #
#------------------------------------#
# NOTES:
# o Requires 'awscli' tools (for ex. on MacOS: $ brew install awscli)
# o AWS output is tabbed - we convert to spaces via 'column' command
#~~~~~~~~~~~~~~~~~~~~#
# Assemble variables #
#~~~~~~~~~~~~~~~~~~~~#
regions=$(aws ec2 describe-regions --output text | cut -f4 | sort)
query_mach='Reservations[].Instances[]'
query_flds='PrivateIpAddress,InstanceId,InstanceType'
query_tags='Tags[?Key==`Name`].Value[]'
query_full="$query_mach.[$query_flds,$query_tags]"
#~~~~~~~~~~~~~~~~~~~~~~~~#
# Output AWS information #
#~~~~~~~~~~~~~~~~~~~~~~~~#
# Iterate through credentials profiles
for profile in 'default' 'work'; do
# Print profile header
echo -e "\n"
echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo -e "Credentials profile:'$profile'..."
echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
# Iterate through all regions
for region in $regions; do
# Print region header
echo -e "\n"
echo -e "Region: $region..."
echo -e "--------------------------------------------------------------"
# Output items for the region
aws ec2 describe-instances \
--profile $profile \
--region $region \
--query $query_full \
--output text \
| sed 's/None$/None\n/' \
| sed '$!N;s/\n/ /' \
| column -t -s $'\t'
done
done

- 158
- 1
- 6
-
1If you have not done it yet, I would suggest you invalidate these credentials. – Thiago Jun 03 '19 at 14:14
-
AWS has recently launched the Amazon EC2 Global View with initial support for Instances, VPCs, Subnets, Security Groups, and Volumes.
To see all running instances go to EC2 or VPC console and click EC2 Global View
in the top left corner.
Then click on Global Search
tab and filter by Resource type
and select Instance
. Unfortunately, this will show instances in all states:
pending
running
stopping
stopped
shutting-down
terminated

- 2,555
- 2
- 31
- 41
I created an open-source script that helps you to list all AWS instances. https://github.com/Appnroll/aws-ec2-instances
That's a part of the script that lists the instances for one profile recording them into an postgreSQL database with using jq
for json parsing:
DATABASE="aws_instances"
TABLE_NAME="aws_ec2"
SAVED_FIELDS="state, name, type, instance_id, public_ip, launch_time, region, profile, publicdnsname"
# collects the regions to display them in the end of script
REGIONS_WITH_INSTANCES=""
for region in `aws ec2 describe-regions --output text | cut -f3`
do
# this mappping depends on describe-instances command output
INSTANCE_ATTRIBUTES="{
state: .State.Name,
name: .KeyName, type: .InstanceType,
instance_id: .InstanceId,
public_ip: .NetworkInterfaces[0].Association.PublicIp,
launch_time: .LaunchTime,
\"region\": \"$region\",
\"profile\": \"$AWS_PROFILE\",
publicdnsname: .PublicDnsName
}"
echo -e "\nListing AWS EC2 Instances in region:'$region'..."
JSON=".Reservations[] | ( .Instances[] | $INSTANCE_ATTRIBUTES)"
INSTANCE_JSON=$(aws ec2 describe-instances --region $region)
if echo $INSTANCE_JSON | jq empty; then
# "Parsed JSON successfully and got something other than false/null"
OUT="$(echo $INSTANCE_JSON | jq $JSON)"
# check if empty
if [[ ! -z "$OUT" ]] then
for row in $(echo "${OUT}" | jq -c "." ); do
psql -c "INSERT INTO $TABLE_NAME($SAVED_FIELDS) SELECT $SAVED_FIELDS from json_populate_record(NULL::$TABLE_NAME, '${row}') ON CONFLICT (instance_id)
DO UPDATE
SET state = EXCLUDED.state,
name = EXCLUDED.name,
type = EXCLUDED.type,
launch_time = EXCLUDED.launch_time,
public_ip = EXCLUDED.public_ip,
profile = EXCLUDED.profile,
region = EXCLUDED.region,
publicdnsname = EXCLUDED.publicdnsname
" -d $DATABASE
done
REGIONS_WITH_INSTANCES+="\n$region"
else
echo "No instances"
fi
else
echo "Failed to parse JSON, or got false/null"
fi
done

- 527
- 7
- 9
To run jobs in parallel and use multiple profiles use this script.
#!/bin/bash for i in profile1 profile2 do OWNER_ID=`aws iam get-user --profile $i --output text | awk -F ':' '{print $5}'` tput setaf 2;echo "Profile : $i";tput sgr0 tput setaf 2;echo "OwnerID : $OWNER_ID";tput sgr0 for region in `aws --profile $i ec2 describe-regions --output text | cut -f4` do tput setaf 1;echo "Listing Instances in region $region";tput sgr0 aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value , InstanceId]' --profile $i --region $region --output text done & done wait
Screenshot:

- 912
- 12
- 23
Not sure how long this option's been here, but you can see a global view of everything by searching for EC2 Global View

- 776
- 9
- 16
Based on @hansaplast code I created Windows friendly version that supports multiple profiles as an argument. Just save that file as cmd or bat file. You also need to have jq
command.
@echo off
setlocal enableDelayedExpansion
set PROFILE=%1
IF "%1"=="" (SET PROFILE=default)
echo checkin instances in all regions for %PROFILE% account
FOR /F "tokens=* USEBACKQ" %%F IN (`aws ec2 describe-regions --query Regions[*].[RegionName] --output text --profile %PROFILE%`) DO (
echo === region: %%F
aws ec2 describe-instances --region %%F --profile %PROFILE%| jq ".Reservations[].Instances[] | {type: .InstanceType, state: .State.Name, tags: .Tags, zone: .Placement.AvailabilityZone}"
)

- 3,558
- 1
- 25
- 24
You may use cli tool designed for enumerating cloud resources (cross-region and cross-accounts scan) - https://github.com/scopely-devops/skew
After short configuration you may use the following code for list all instances in all US AWS regions (assuming 123456789012 is your AWS account number).
from skew import scan
arn = scan('arn:aws:ec2:us-*:123456789012:instance/*')
for resource in arn:
print(resource.data)

- 171
- 1
- 7
Good tool to CRUD AWS resources. Find [EC2|RDS|IAM..] in all regions. There can do operations (stop|run|terminate) on filters results.
python3 awsconsole.py ec2 all // return list of all instances
python3 awsconsole.py ec2 all -r eu-west-1
python3 awsconsole.py ec2 find -i i-0552e09b7a54fa2cf --[terminate|start|stop]

- 573
- 5
- 11