我经常在不同的区域之间切换实例,有时我忘记从不同的区域关闭正在运行的实例。我找不到任何方法来查看Amazon主机上所有正在运行的实例。 是否有任何方法可以显示所有正在运行的实例而不考虑区域?
当前回答
基于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
该脚本为每个区域(现在是15个!)并行运行aws ec2 description -instances,并仅从json输出中提取相关的位(状态、标签、可用分区)。需要set +m,以便后台进程在启动/结束时不报告。
示例输出:
{
"type": "t2.micro",
"state": "stopped",
"tags": [
{
"Key": "Name",
"Value": "MyEc2WebServer"
},
],
"zone": "eu-central-1b"
}
其他回答
CRUD AWS资源的好工具。找到(EC2 | RDS |我. .]在所有地区。可以对过滤结果执行操作(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]
我认为目前在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配置set region us-east-1来实现,谢谢@Sabuncu的评论。
更新
现在(2019年)cut命令应该应用在第4个字段:cut -f4
不知道这个选项已经存在多久了,但是你可以通过搜索EC2全局视图来查看所有内容的全局视图
https://console.aws.amazon.com/ec2globalview/home#
要并行运行作业并使用多个概要文件,请使用此脚本。
#!/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
截图:
您可以跨所有区域运行descripbeinstances()。
此外,你可以:
通过Lambda和Cloud watch实现自动化。 使用Lambda和api网关创建api端点,并在代码中使用它
NodeJS中的示例:
创建一个区域(端点)数组。[也可以使用AWS描述区域()]
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函数中,descripbeinstances()可以是 调用。
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及以上版本。
我写了一个lambda函数来获得任何状态[正在运行,停止]和任何区域的所有实例,还将给出关于实例类型和各种其他参数的详细信息。
脚本在所有AWS区域运行,并调用descripbeinstances()来获取实例。
你只需要用运行时的nodejs创建一个lambda函数。 您甚至可以从中创建API,并在需要时使用它。
此外,您可以查看AWS官方文档用于描述实例,以探索更多选项。
推荐文章
- 如何查看所有地区所有正在运行的Amazon EC2实例?
- 如何从命令行使用多个AWS帐户?
- 如何搜索亚马逊s3桶?
- 拒绝访问;您需要(至少一个)SUPER特权来执行此操作
- 我如何使用通配符“cp”一组文件与AWS CLI
- 我如何获得亚马逊的AWS_ACCESS_KEY_ID ?
- 如何使所有对象在AWS S3桶公共默认?
- 为什么我应该使用亚马逊Kinesis而不是SNS-SQS?
- 如何重命名AWS S3 Bucket
- AWS ECS中的任务和服务之间有什么区别?
- 亚马逊SimpleDB vs亚马逊DynamoDB
- 亚马逊ECS和亚马逊EC2有什么区别?
- 我如何知道我在S3桶中存储了多少对象?
- S3 Bucket操作不应用于任何资源
- 将AWS凭证传递给Docker容器的最佳方法是什么?