Làm cách nào để xem tất cả các phiên bản Amazon EC2 đang chạy trên tất cả các khu vực?


112

Tôi thường xuyên chuyển đổi phiên bản giữa các vùng khác nhau và đôi khi tôi quên tắt phiên bản đang chạy của mình từ một vùng khác. Tôi không thể tìm thấy bất kỳ cách nào để xem tất cả các phiên bản đang chạy trên bảng điều khiển Amazon.
Có cách nào để hiển thị tất cả các phiên bản đang chạy bất kể khu vực không?


47
Thực tế là AWS GUI không chỉ cho phép bạn liệt kê tất cả các trường hợp là thực sự, thực sự ngớ ngẩn.
Dan Dascalescu

4
Không lý tưởng và chắc chắn không rõ ràng nhưng bạn có thể sử dụng Resource Groups > Tag Editornhư một tùy chọn GUI. Xem câu trả lời của tôi dưới đây.
Bộ lọc Heinrich

3
@DanDascalescu bạn có chắc không? Bạn nghĩ AWS đã kiếm được bao nhiêu tiền từ những người như OP quên tắt phiên bản đang chạy?
smartcaveman 19/02/19

2
@DanDascalescu với tư cách là người thông minh cho biết sẽ thật ngớ ngẩn nếu các trường hợp được rải khắp nhiều khu vực và bị lãng quên trong khi dấu tích $ ticker đánh dấu cho Bezos.
Eduard Rozenberg

2
@DanDascalescu làm thế nào họ sẽ tính phí mọi người vì quên các phiên bản nếu họ chỉ hiển thị những gì đang chạy ..?
EralpB

Câu trả lời:


122

Một tùy chọn GUI không rõ ràng là Resource Groups > Tag Editor. Tại đây, bạn có thể tìm thấy tất cả các bản sao trên tất cả các khu vực, ngay cả khi các bản sao không được gắn thẻ. Chụp màn hình


CHỈNH SỬA: Màn hình này gần đây đã được thiết kế lại và hiện có giao diện mới và tùy chọn "Tất cả các khu vực".


2
Cảm ơn, hack tuyệt vời!
Rob MacDonald

1
Điều này đã thay đổi một lần nữa. Tôi không còn thấy khối "Khu vực" trong công cụ này. Thay vào đó, nó chỉ hiển thị mọi thứ trong "Khu vực hiện tại". Chỉ có Chúa mới biết điều đó được đặt ở đâu ... Tôi khá phát ngán với những kẻ ngốc này khi giả sử tôi có một nhân viên gồm 20 và 500 máy.
breakpoint

1
@breakpoint có vẻ như bây giờ họ đã thêm lại một liên kết vào Trình chỉnh sửa thẻ trước đó hỗ trợ tìm kiếm nhiều vùng.
Bộ lọc Heinrich

1
Người đàn ông đây là một cuộc sống tiết kiệm! Cám ơn vì đã chia sẻ! :-D
Lawrence

1
Sẽ thật tuyệt nếu aws có một trình đơn thả xuống được tích hợp sẵn cho 'tất cả các khu vực' hoặc tương tự
stevec

62

Tôi không nghĩ rằng bạn hiện có thể làm điều này trong AWS GUI. Nhưng đây là một cách để liệt kê tất cả các phiên bản của bạn trên tất cả các khu vực với 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

Lấy từ đây (Nếu bạn muốn xem toàn bộ cuộc thảo luận)

Ngoài ra, nếu bạn nhận được một

Bạn phải chỉ định một khu vực. Bạn cũng có thể định cấu hình khu vực của mình bằng cách chạy "aws config"

Bạn có thể làm như vậy với aws configure set region us-east-1, cảm ơn @Sabuncu đã nhận xét.

Cập nhật

Bây giờ (vào năm 2019) lệnh cắt sẽ được áp dụng trên trường thứ 4: cut -f4


13
Để tránh cut, bạn có thể sử dụng:aws ec2 describe-regions --query Regions[*].[RegionName] --output text
stefansundin

Nếu sử dụng cấu hình, hãy thêm - tên cấu hình tiểu sử vào cả hai lệnh aws ec2.
Carlton

Bạn có thể sử dụng lệnh này trên Windows 10 CMD, FOR /F %G IN ('aws ec2 describe-regions --query Regions[*].[RegionName] --output text') DO (aws ec2 describe-instances --region %G)
Manjula

Đây dường như không làm việc bây giờ - You must specify a region. You can also configure your region by running "aws configure".- có vẻ như chỉ định một khu vực là trái ngược với những gì tôi muốn làm
Will Sheppard

@WillSheppard Trước tiên, bạn phải định cấu hình khu vực của mình; vd aws configure set region us-east-1. Sau đó, khi bạn chạy aws ec2 describe-regions, bạn sẽ không gặp vấn đề gì. Vui lòng xem câu trả lời: stackoverflow.com/a/46577479/360840 cũng như các câu trả lời khác trong câu hỏi liên quan.
Sabuncu

18

Giải pháp @imTachu hoạt động tốt. Để thực hiện việc này thông qua bảng điều khiển AWS ...

  • Bảng điều khiển AWS
  • Dịch vụ
  • Kết nối mạng và cung cấp nội dung
  • VPC
  • Tìm một khối có tên "Phiên bản đang chạy", khối này sẽ hiển thị cho bạn khu vực hiện tại
  • Nhấp vào liên kết "Xem tất cả các khu vực" bên dưới

Hiện không có "Mạng và cung cấp nội dung" trong "Dịch vụ"
Will Sheppard vào

2
trong bảng điều khiển AWS: nhấp vào 'dịch vụ'> trong hộp văn bản, nhập 'vpc' và sau đó chọn VPC- tài nguyên đám mây bị cô lập
nir weiner

hoạt động tuyệt vời @Carlton cảm ơn
NuoYi

Họ đã cập nhật nó một lần nữa. Bây giờ có một phím tắt trong bảng điều khiển EC2. Chuyển đến phần phiên bản và nhấp vào "phiên bản". Nó sẽ hiển thị cho bạn tất cả các phiên bản đang chạy trong vùng đã chọn.
Mindfulgeek

17
  1. Đầu tiên, hãy truy cập Bảng điều khiển quản lý AWS và nhấp vào Nhóm tài nguyên:

    nhập mô tả hình ảnh ở đây

  2. Sau đó tìm Network and Content Deliveryvà nhấp vào VPC:

    nhập mô tả hình ảnh ở đây

  3. Sau đó, tìm Phiên bản đang chạy và mở rộng xem tất cả các khu vực. Tại đây, bạn có thể tìm thấy tất cả các phiên bản đang chạy của tất cả các khu vực:

    nhập mô tả hình ảnh ở đây


13

Trong bảng điều khiển

Đi tới bảng điều khiển VPC https://console.aws.amazon.com/vpc/homevà nhấp vào Running instances-> See all regions.

nhập mô tả hình ảnh ở đây

Trong CLI

Thêm ví dụ này vào .bashrc. Tải lại source ~/.bashrcvà chạy nó

Lưu ý: Ngoại trừ aws CLI, bạn cần phải cài đặt 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
}

Ví dụ đầu ra:

$ 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

Mỗi khi bạn tạo tài nguyên, hãy gắn thẻ tên cho tài nguyên đó và bây giờ bạn có thể sử dụng Nhóm tài nguyên để tìm tất cả các loại tài nguyên có thẻ tên trên tất cả các vùng.


Nếu bạn mệt mỏi khi gắn thẻ theo cách thủ công, hãy sử dụng Terraform :)
sobi3ch

7

Dựa trên câu trả lời imTachus nhưng ít dài dòng hơn, cộng với tốc độ nhanh hơn. Bạn cần cài đặt 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

Tập lệnh chạy aws ec2 describe-instancessong song cho từng vùng (bây giờ là 15!) Và chỉ trích xuất các bit liên quan (trạng thái, thẻ, vùng khả dụng) từ đầu ra json. Điều set +mnày là cần thiết để các quy trình nền không báo cáo khi bắt đầu / kết thúc.

Ví dụ đầu ra:

{
  "type": "t2.micro",
  "state": "stopped",
  "tags": [
    {
      "Key": "Name",
      "Value": "MyEc2WebServer"
    },
  ],
  "zone": "eu-central-1b"
}

4

Sau khi đọc qua tất cả các giải pháp và thử nhiều thứ, giải pháp phù hợp với tôi là-

  1. Liệt kê mục
  2. Đi tới Nhóm tài nguyên
  3. Trình chỉnh sửa thẻ
  4. Chọn tất cả các khu vực
  5. Chọn Phiên bản EC2 trong loại tài nguyên
  6. Nhấp vào Tìm kiếm Tài nguyên

Ảnh chụp giải pháp


3

Bạn có thể chạy DescribeInstances() trên tất cả các vùng.

Ngoài ra, bạn có thể:

  • Tự động hóa nó thông qua Lambda và Cloud watch.
  • Tạo điểm cuối api bằng Lambda và cổng api và sử dụng nó trong mã của bạn

Một mẫu trong NodeJS:

  • Tạo và mảng các vùng (điểm cuối). [cũng có thể sử dụng AWS descriptionRegions () ]
var regionNames = ['us-west-1', 'us-west-2', 'us-west-1', 'eu-west-1', 'eu-central-1', 'sa-west-1 ',' ap-Southeast-1 ',' ap-Southeast-2 ',' ap-Southeast-1 ',' ap-Southeast-2 '];

    regionNames.forEach (function (region) {
        getInstances (vùng);
    });

  • Sau đó, trong getInstanceschức năng, DescribeInstances()có thể được gọi.
hàm getInstances (vùng) {
            EC2.describeInstances (params, function (err, data) {
                if (err) return console.log ("Lỗi kết nối với AWS, Không tìm thấy trường hợp nào như vậy!");
                data.Reservations.forEach (function (đặt trước) {
                // thực hiện bất kỳ hoạt động nào dự định
      });
    }

Và Off Course, hãy thoải mái sử dụng ES6 trở lên.

Tôi đã viết một hàm lambda để cung cấp cho bạn tất cả các phiên bản ở bất kỳ trạng thái nào [đang chạy, đã dừng] và từ bất kỳ vùng nào, cũng sẽ cung cấp thông tin chi tiết về loại phiên bản và nhiều tham số khác.

Script chạy trên tất cả các vùng AWS và các cuộc gọi DescribeInstances(), để lấy các phiên bản.

Bạn chỉ cần tạo một hàm lambda với thời gian chạy nodejs. Bạn thậm chí có thể tạo API từ nó và sử dụng nó khi cần thiết.

Ngoài ra, Bạn có thể xem Docs For DescribeInstances chính thức của AWS để khám phá nhiều tùy chọn khác.


1

Tôi đã tạo một tập lệnh mã nguồn mở giúp bạn liệt kê tất cả các phiên bản AWS. https://github.com/Appnroll/aws-ec2-instances

Đó là một phần của tập lệnh liệt kê các trường hợp cho một hồ sơ ghi chúng vào cơ sở dữ liệu postgreSQL sử dụng jqđể phân tích cú pháp 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

1

Kịch bản của tôi bên dưới, dựa trên các mẹo khác nhau từ bài đăng này và các nơi khác. Tập lệnh dễ làm theo (ít nhất là đối với tôi) so với các dòng lệnh dài.

Tập lệnh giả định (các) hồ sơ thông tin xác thực được lưu trữ trong tệp ~/.aws/credentialsgiống như sau:

[default]
aws_access_key_id = foobar
aws_secret_access_key = foobar

[work]
aws_access_key_id = foobar
aws_secret_access_key = foobar

Kịch bản:

#!/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
Nếu bạn chưa làm điều đó, tôi khuyên bạn nên vô hiệu hóa những thông tin đăng nhập này.
Thiago

@Thiago cảm ơn nhưng những thông tin đăng nhập đó dù sao cũng là trình giữ chỗ không có thật :).
Eduard Rozenberg

1

Để chạy các công việc song song và sử dụng nhiều cấu hình, hãy sử dụng tập lệnh này.

#! / bin / bash
cho tôi trong profile1 profile2
làm
    OWNER_ID = `aws iam get-user --profile $ i --output text | awk -F ':' '{print $ 5}' '
    tput setaf 2; echo "Hồ sơ: $ i"; tput sgr0
    tput setaf 2; echo "OwnerID: $ OWNER_ID"; tput sgr0
    cho vùng trong `aws - tệp $ i ec2 mô tả-vùng - văn bản đầu ra | cắt -f4 '
    làm
        tput setaf 1; echo "Phiên bản danh sách trong vùng $ region"; tput sgr0
        aws ec2 description-instance --query 'Reservations [*]. Instances [*]. [Tags [? key == `Name`] .Value, InstanceId]' --profile $ i --region $ region --output text
    làm xong &
làm xong
chờ đợi

Ảnh chụp màn hình:

ảnh chụp màn hình


0

Dựa trên mã @hansaplast, tôi đã tạo phiên bản thân thiện với Windows hỗ trợ nhiều cấu hình như một đối số. Chỉ cần lưu tệp đó dưới dạng tệp cmd hoặc tệp bat. Bạn cũng cần phải có jqlệnh.

@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

Bạn có thể sử dụng công cụ cli được thiết kế để liệt kê tài nguyên đám mây (quét nhiều vùng và nhiều tài khoản) - https://github.com/scopely-devops/skew

Sau khi cấu hình ngắn, bạn có thể sử dụng mã sau để liệt kê tất cả các phiên bản trong tất cả các khu vực AWS của Hoa Kỳ (giả sử 123456789012 là số tài khoản AWS của bạn).

from skew import scan

arn = scan('arn:aws:ec2:us-*:123456789012:instance/*')
for resource in arn:
    print(resource.data)

0

Công cụ tốt để CRUD tài nguyên AWS . Tìm [EC2 | RDS | IAM ..] ở tất cả các khu vực. Có thể thực hiện các hoạt động (dừng | chạy | kết thúc) trên kết quả bộ lọc.

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]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.