모든 리전에서 실행중인 모든 Amazon EC2 인스턴스를 보려면 어떻게해야합니까?


112

다른 지역간에 인스턴스를 자주 전환하고 때로는 다른 지역에서 실행중인 인스턴스를 끄는 것을 잊었습니다. Amazon 콘솔에서 실행중인 모든 인스턴스를 볼 수있는 방법을 찾을 수 없었습니다.
지역에 관계없이 실행중인 모든 인스턴스를 표시하는 방법이 있습니까?


47
AWS GUI가 모든 인스턴스를 나열 할 수 있도록 허용하지 않는다는 사실은 정말 멍청합니다.
Dan Dascalescu

4
이상적이지 않고 분명하지 않지만 Resource Groups > Tag EditorGUI 옵션으로 사용할 수 있습니다 . 아래 내 대답을 참조하십시오.
Heinrich Filter

3
@DanDascalescu 확실합니까? AWS가 실행중인 인스턴스를 끄는 것을 잊은 OP와 같은 사람들로부터 얼마나 많은 돈을 벌었다고 생각하십니까?
smartcaveman

2
@DanDascalescu as smartcaveman은 인스턴스가 여러 지역에 흩어져 있고 $ 티커 틱이 Bezos에 대해 틱을 틱하는 동안 잊혀지면 멍청하다고 말합니다.
Eduard Rozenberg

2
@DanDascalescu 실행중인 것을 보여 주면 인스턴스를 잊은 사람들에게 어떻게 비용을 청구할까요 ..?
EralpB

답변:


122

명확하지 않은 GUI 옵션은 Resource Groups > Tag Editor입니다. 여기에서 인스턴스에 태그가 지정되지 않은 경우에도 모든 지역의 모든 인스턴스를 찾을 수 있습니다. 화면 캡처


편집 :이 화면은 최근에 재 설계되었으며 이제 새로운 모양과 "모든 지역"옵션이 있습니다.


2
감사합니다, 훌륭한 해킹!
Rob MacDonald

1
이것은 다시 변경되었습니다. 이 도구에서 "지역"블록이 더 이상 표시되지 않습니다. 대신 "현재 지역"의 모든 것을 표시합니다. 신은 그게 어디에서 설정되는지 아실뿐입니다. 기계 직원이 20 ~ 500 명이라고 가정 할 때이 바보들에게 지겨워지고 있습니다.
중단 점

1
@breakpoint는 이제 다중 지역 검색을 지원하는 이전 태그 편집기에 대한 링크를 다시 추가 한 것처럼 보입니다.
Heinrich Filter

1
이건 생명의 은인이야! 공유해 주셔서 감사합니다! :-D
Lawrence

1
AWS는 '모든 지역'또는에 대한 드롭 다운에 내장 더라면 좋을 것 유사
stevec

62

현재 AWS GUI에서는이 작업을 수행 할 수 없다고 생각합니다. 하지만 다음은 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

여기 에서 가져옴 (전체 토론을 보려면)

또한, 만약 당신이

지역을 지정해야합니다. "aws configure"를 실행하여 지역을 구성 할 수도 있습니다.

으로 그렇게 할 수 있습니다 aws configure set region us-east-1. 댓글에 대해 @Sabuncu에게 감사드립니다.

최신 정보

이제 (2019 년) 4 번째 필드에 cut 명령을 적용해야합니다. cut -f4


13
피하려면 cut다음을 사용할 수 있습니다.aws ec2 describe-regions --query Regions[*].[RegionName] --output text
stefansundin

프로필을 사용하는 경우 aws ec2 명령 에 --profile profile-name을 추가 합니다.
Carlton

Windows 10 CMD에서이 명령을 사용할 수 있습니다. FOR /F %G IN ('aws ec2 describe-regions --query Regions[*].[RegionName] --output text') DO (aws ec2 describe-instances --region %G)
Manjula

이 지금은 작동하지 않는 것 - You must specify a region. You can also configure your region by running "aws configure".- 영역을 지정하는 것 같아 내가하고 싶은 것과 반대입니다
윌 셰퍼드

@WillSheppard 먼저 지역을 구성해야합니다. 예 : aws configure set region us-east-1. 그런 다음을 실행할 때 aws ec2 describe-regions문제가 없어야합니다. 답변 : stackoverflow.com/a/46577479/360840 및 관련 질문의 다른 답변을 참조하십시오 .
Sabuncu 2019

19

@imTachu 솔루션이 잘 작동합니다. AWS 콘솔을 통해이 작업을 수행하려면 ...

  • AWS 콘솔
  • 서비스
  • 네트워킹 및 콘텐츠 제공
  • VPC
  • "실행중인 인스턴스"라는 이름의 블록을 찾으면 현재 지역이 표시됩니다.
  • 아래의 "모든 지역보기"링크를 클릭합니다.

"서비스"아래에는 "네트워킹 및 콘텐츠 전송은"지금은 없다
윌 셰퍼드

2
AWS 콘솔에서 : '서비스'를 클릭하고 텍스트 상자에 'vpc'를 입력 한 다음 VPC 격리 클라우드 리소스를 선택합니다.
nir weiner

@Carlton 감사합니다
NuoYi

그들은 그것을 다시 업데이트했습니다. 이제 EC2 대시 보드에 바로 가기가 있습니다. 인스턴스 섹션으로 이동하여 "인스턴스"를 클릭하십시오. 선택 지역에서 실행중인 모든 인스턴스가 표시됩니다.
Mindfulgeek

17
  1. 먼저 AWS Management 콘솔 로 이동하여 리소스 그룹을 클릭합니다.

    여기에 이미지 설명 입력

  2. 그런 다음 다음을 찾아 Network and Content Delivery클릭하십시오 VPC.

    여기에 이미지 설명 입력

  3. 그런 다음 실행중인 인스턴스를 찾아 모든 지역보기를 확장합니다. 여기에서 모든 지역의 실행중인 모든 인스턴스를 찾을 수 있습니다.

    여기에 이미지 설명 입력


13

콘솔에서

VPC 대시 보드로 이동하여 ->를 https://console.aws.amazon.com/vpc/home클릭하십시오 .Running instancesSee all regions

여기에 이미지 설명 입력

CLI에서

예를 들어 이것을 .bashrc. 다시로드 source ~/.bashrc하고 실행하십시오.

참고 : aws CLI 를 제외하고 jq를 설치 해야합니다.

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'..

8

리소스를 생성 할 때마다 이름으로 태그를 지정하면 이제 리소스 그룹 을 사용 하여 모든 리전에서 이름 태그가있는 모든 유형의 리소스를 찾을 수 있습니다 .


수동 태깅에 지쳤다면 Terraform을 사용하십시오. :)
sobi3ch

7

imTachus 답변을 기반으로하지만 덜 장황하고 빠릅니다. 당신이 필요 JQAWS-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"
}

4

모든 솔루션을 읽고 많은 것을 시도한 후 저에게 효과가 있었던 것은-

  1. 목록 항목
  2. 리소스 그룹으로 이동
  3. 태그 편집기
  4. 모든 지역 선택
  5. 리소스 유형에서 EC2 인스턴스 선택
  6. 리소스 검색을 클릭하십시오.

솔루션 스냅 샷


3

DescribeInstances()모든 지역에서 실행할 수 있습니다 .

또한 다음을 수행 할 수 있습니다.

  • Lambda 및 Cloud watch를 통해 자동화하십시오.
  • Lambda 및 api 게이트웨이를 사용하여 api 엔드 포인트를 생성하고 코드에서 사용

NodeJS의 샘플 :

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 (지역);
    });

  • 그런 다음 getInstances함수에서 DescribeInstances()호출 할 수 있습니다.
function getInstances (region) {
            EC2.describeInstances (params, function (err, data) {
                if (err) return console.log ( "AWS에 연결하는 동안 오류가 발생했습니다. 해당 인스턴스를 찾을 수 없습니다!");
                data.Reservations.forEach (function (reservation) {
                // 의도 한 작업 수행
      });
    }

그리고 Off Course에서는 ES6 이상을 자유롭게 사용하십시오.

어떤 상태 (실행 중, 중지됨)의 모든 인스턴스를 가져오고 모든 리전에서 인스턴스 유형 및 기타 다양한 매개 변수에 대한 세부 정보를 제공하는 람다 함수를 작성했습니다.

스크립트 는 모든 AWS 리전에서 실행되고을 호출 DescribeInstances()하여 인스턴스를 가져옵니다.

run-time으로 람다 함수를 생성하기 만하면됩니다 nodejs. API를 만들어 필요할 때 사용할 수도 있습니다.

또한 AWS 공식 DescribeInstances 문서를 참조 하여 더 많은 옵션을 탐색 할 수 있습니다.


1

모든 AWS 인스턴스를 나열하는 데 도움이되는 오픈 소스 스크립트를 만들었습니다. https://github.com/Appnroll/aws-ec2-instances

이는 jqjson 구문 분석 을 사용하여 postgreSQL 데이터베이스에 기록하는 하나의 프로필에 대한 인스턴스를 나열하는 스크립트의 일부입니다 .

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

1

이 게시물 및 다른 곳의 다양한 팁을 기반으로 한 아래 내 스크립트. 스크립트는 긴 명령 줄보다 (적어도 나를 위해) 따라 가기가 더 쉽습니다.

스크립트는 자격 증명 프로필이 ~/.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

1
아직 수행하지 않은 경우 이러한 자격 증명을 무효화하는 것이 좋습니다.
Thiago

@Thiago 감사하지만 그 자격 증명은 어쨌든 가짜 자리 표시 자였습니다 :).
Eduard Rozenberg

1

작업을 병렬로 실행하고 여러 프로필을 사용하려면이 스크립트를 사용하십시오.

#! / bin / bash
나는 profile1 profile2에서
하다
    OWNER_ID =`aws iam get-user --profile $ i --output text | awk -F ':' '{print $ 5}'`
    tput setaf 2; echo "프로필 : $ i"; tput sgr0
    tput setaf 2; echo "OwnerID : $ OWNER_ID"; tput sgr0
    `aws --profile $ i ec2 describe-regions --output text | 컷 -f4`
    하다
        tput setaf 1; echo "$ region 지역의 인스턴스 나열"; tput sgr0
        aws ec2 describe-instances --query 'Reservations [*]. Instances [*]. [Tags [? Key ==`Name`] .Value, InstanceId]'--profile $ i --region $ region --output text
    완료 &
끝난
기다림

스크린 샷 :

스크린 샷


0

@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

당신은 클라우드 자원을 열거 위해 설계 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

CRUD AWS 리소스에 좋은 도구 입니다. 모든 지역에서 [EC2 | RDS | IAM ..]을 찾으십시오. 필터 결과에 대해 작업 (stop | run | terminate)을 수행 할 수 있습니다.

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]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.