Я часто переключаю экземпляры между разными регионами, и иногда забываю отключить мой исполняемый экземпляр из другого региона. Я не мог найти способ увидеть все запущенные экземпляры на консоли Amazon.
Есть ли способ показать все запущенные экземпляры независимо от региона?
Как просмотреть все запущенные экземпляры Amazon EC2 во всех регионах?
Ответ 1
Неочевидная опция графического интерфейса - Resource Groups > Tag Editor
. Здесь вы можете найти все экземпляры во всех регионах, даже если они не были помечены.
ОБНОВЛЕНИЕ: Этот экран был недавно переработан и теперь имеет новый внешний вид и возможность "Все регионы".
Ответ 2
Я не думаю, что вы можете сделать это в графическом интерфейсе AWS. Но вот способ перечислить все ваши экземпляры во всех регионах с помощью интерфейса командной строки AWS:
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
Взято из здесь (если вы хотите увидеть полное обсуждение)
Кроме того, если вы получаете
Вы должны указать регион. Вы также можете настроить свой регион, запустив "aws configure"
Вы можете сделать это с помощью aws configure set region us-east-1
, спасибо @Sabuncu за комментарий.
Обновление
Теперь (в 2019 году) команда cut должна быть применена к 4-му полю: cut -f4
Ответ 3
Решение @imTachu работает хорошо. Для этого через консоль AWS...
- Консоль AWS
- Сервисы
- Сеть и доставка контента
- VPC
- Ищите блок с именем "Running Instances", он покажет вам текущий регион
- Нажмите ссылку "Просмотреть все регионы" под
Ответ 4
Каждый раз, когда вы создаете ресурс, пометьте его именем, и теперь вы можете использовать группы ресурсов для поиска всех типов ресурсов с тегом имени во всех регионах.
Ответ 5
На основе ответа imTachus, но менее многословно, а также быстрее. Вам нужно установить jq и aws-cli.
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
Сценарий запускает aws ec2 describe-instances
параллельно для каждой области (теперь 15!) И извлекает только соответствующие биты (состояние, теги, зона доступности) из вывода json. set +m
необходим, чтобы фоновые процессы не сообщали при запуске/завершении.
Пример вывода:
{
"type": "t2.micro",
"state": "stopped",
"tags": [
{
"Key": "Name",
"Value": "MyEc2WebServer"
},
],
"zone": "eu-central-1b"
}
Ответ 6
Сначала перейдите в Консоль управления AWS и нажмите на группу ресурсов:
Затем найдите
Network and Content Delivery
и нажмитеVPC
:Затем найдите Запуск экземпляров и разверните список всех регионов. Здесь вы можете найти все запущенные экземпляры всего региона:
Ответ 7
Вы можете запустить DescribeInstances()
во всех регионах.
Кроме того, вы можете:
- Автоматизируйте его с помощью Lambda и Cloud watch.
- Создайте конечную точку API с помощью Lambda и API-шлюза и используйте ее в своем коде
Образец в NodeJS:
- Создать и массив регионов (конечных точек). [также можно использовать AWS descriptionRegions () ]
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); });
- Затем в функции
getInstances
можно вызватьDescribeInstances()
.
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 }); }
И конечно, не стесняйтесь использовать ES6 и выше.
Я написал лямбда-функцию, чтобы получить все экземпляры в любом состоянии [запущен, остановлен] и из любых регионов, а также даст подробную информацию о типе экземпляра и различных других параметрах.
Скрипт работает во всех регионах AWS и вызывает DescribeInstances()
, чтобы получить экземпляры.
Вам просто нужно создать лямбда-функцию с помощью nodejs
время nodejs
. Вы даже можете создать из него API и использовать его по мере необходимости.
Кроме того, вы можете просмотреть официальные документы AWS для DescribeInstances, чтобы узнать о многих других возможностях.
Ответ 8
Мой сценарий ниже, на основе различных советов из этого поста и в других местах. Сценарий легче следовать (по крайней мере для меня), чем длинные командные строки.
В сценарии предполагается, что учетные профили хранятся в файле ~/.aws/credentials
и выглядят примерно так:
[default]
aws_access_key_id = foobar
aws_secret_access_key = foobar
[work]
aws_access_key_id = foobar
aws_secret_access_key = foobar
Сценарий:
#!/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
Ответ 9
Я создал скрипт с открытым исходным кодом, который поможет вам составить список всех экземпляров AWS. https://github.com/Appnroll/aws-ec2-instances
Та часть скрипта, которая перечисляет экземпляры для одного профиля, записывает их в базу данных postgreSQL с использованием jq
для анализа json:
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
Ответ 10
В консоли
Перейдите на панель мониторинга VPC console.aws.amazon.com/vpc/home
и нажмите Running instances
→ See all regions
.
В CLI
Добавьте это, например, к .bashrc
. Перезагрузите его source ~/.bashrc
и запустите
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
}
Пример вывода:
$ 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'..
Ответ 11
На основе кода @hansaplast я создал дружественную для Windows версию, которая поддерживает несколько профилей в качестве аргумента. Просто сохраните этот файл как файл cmd или bat. Вы также должны иметь команду jq
.
@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}"
)
Ответ 12
Вы можете использовать инструмент cli, предназначенный для перечисления облачных ресурсов (межрегиональное сканирование и сканирование между учетными записями) - https://github.com/scopely-devops/skew
После непродолжительной настройки вы можете использовать следующий код для получения списка всех экземпляров во всех регионах США AWS (при условии, что 123456789012 - это номер вашей учетной записи AWS).
from skew import scan
arn = scan('arn:aws:ec2:us-*:123456789012:instance/*')
for resource in arn:
print(resource.data)
Ответ 13
Хороший инструмент для CRUD AWS ресурсов. Найти [EC2 | RDS | IAM..] во всех регионах. Там могут делать операции (остановить | запустить | завершить) с фильтрами результатов.
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]
Ответ 14
Для параллельного запуска заданий и использования нескольких профилей используйте этот скрипт.
#!/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: