it-swarm.com.ru

Как просмотреть все запущенные экземпляры Amazon EC2 во всех регионах?

Я часто переключаю экземпляры между разными регионами и иногда забываю отключить запущенный экземпляр из другого региона. Я не мог найти способ увидеть все запущенные экземпляры на консоли Amazon.
Есть ли способ отобразить все запущенные экземпляры независимо от региона?

45
JerryGoyal

Я не думаю, что вы можете сделать это в графическом интерфейсе AWS. Но вот способ перечислить все ваши экземпляры во всех регионах с помощью интерфейса командной строки AWS:

for region in `aws ec2 describe-regions --output text | cut -f3`
do
     echo -e "\nListing Instances in region:'$region'..."
     aws ec2 describe-instances --region $region
done

Взято из здесь (если вы хотите увидеть полное обсуждение)

42
imTachu

Правка: Как @breakpoint указывает в комментариях, похоже, что редактор тегов был обновлен и функция поиска по регионам была удалена: - /

Я обновлю это, если найду альтернативу.


Неочевидная опция графического интерфейса - Resource Groups > Tag Editor. Здесь вы можете найти все экземпляры во всех регионах, даже если этот экземпляр не был помечен . enter image description here

38
Heinrich Filter

Каждый раз, когда вы создаете ресурс, пометьте его именем, и теперь вы можете использовать Группы ресурсов , чтобы найти все типы ресурсов с тегом имени во всех регионах.

7
Mallikarjuna Reddy

На основе ответа 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"
}
7
hansaplast

Решение @imTachu работает хорошо. Для этого через консоль AWS ...

  • Консоль AWS
  • Сервисы
  • Сеть и доставка контента
  • VPC
  • Ищите блок с именем «Running Instances», он покажет вам текущий регион
  • Нажмите ссылку "Просмотреть все регионы" под
6
Carlton

Вы можете запустить 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 (функция (регион) {
 getInstances (регион); 
}); 

  • Затем в функции getInstances можно вызвать DescribeInstances()
функция getInstances (регион) {
 EC2.describeInstances (params, function (err, data) {
 If (err) return console.log ("Ошибка подключения к AWS, такой экземпляр не найден!"); 
 Data.Reservations.forEach (function ( резервирование) {
 // выполнить любую операцию, предназначенную 
}); 
} 

И конечно, не стесняйтесь использовать ES6 и выше.

Я написал лямбда-функцию, чтобы получить все экземпляры в любом состоянии [запущен, остановлен] и из любых регионов, а также даст подробную информацию о типе экземпляра и различных других параметрах.

Скрипт работает во всех регионах AWS и вызывает DescribeInstances(), чтобы получить экземпляры.

Вам просто нужно создать лямбда-функцию с исполняемой переменной nodejs. Вы даже можете создать API из нее и использовать ее по мере необходимости.

Кроме того, вы можете просмотреть официальные документы AWS для DescribeInstances , чтобы узнать о многих других возможностях.

2
J. Parashar
  1. Сначала перейдите в Консоль управления AWS и нажмите на группу ресурсов:

     enter image description here

  2. Затем найдите Network and Content Delivery и нажмите на VPC:

     enter image description here

  3. Затем найдите Запуск экземпляров и разверните список всех регионов. Здесь вы можете найти все запущенные экземпляры всего региона:

     enter image description here

0
rdhawladar

Вы можете использовать инструмент 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)
0
Dmytro

На основе кода @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}"
)
0
Pawel

Мой сценарий ниже, на основе различных советов из этого поста и в других местах. Сценарий легче следовать (по крайней мере для меня), чем длинные командные строки.

Сценарий предполагает, что учетные данные профиля хранятся в файле ~/.aws/credentials, выглядящем примерно так:

[default]
aws_access_key_id = ODJFDOIOIJIJFJDIOFHJ
aws_secret_access_key = spdofksdpfok345opdfkgfdpogkdsfjsd

[work]
aws_access_key_id = GF6TPDWBZMZWCZ8P1002
aws_secret_access_key = fpoksdfopdskf4350sdfsjdfkosdfjlfs

Автор сценария:

#!/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 -f3 | 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
0
Eduard Rozenberg

Хороший инструмент для ресурсы 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]
0
Rafal

Я создал скрипт с открытым исходным кодом, который поможет вам составить список всех экземпляров 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
0
tuhaj