python - BOTO3:打印特定区域的实例信息

标签 python amazon-web-services boto3

我正在尝试编写一个 Python/BOTO3 脚本来获取 us-east-1、us-west-1、ap-southeast-1 区域中的所有实例。

我试图收集的信息是:

  • 实例 ID
  • 实例类型
  • 附加到实例的 IAM 角色
  • 列出所有警报的项目状态

我的目标是将其输出到 CSV 文件。

目前我已经走了这么远,我有点卡住了,非常感谢一些帮助:

import boto3
from collections import defaultdict

regions = [
    'ap-southeast-1',
    'us-west-1',
    'us-east-1',
]

ec2 = boto3.resource('ec2',  region_name="us-east-2")

running_instances = ec2.instances.filter(Filters=[{
    'Name': 'instance-state-name',
    'Values': ['running']}])

ec2info = defaultdict()
for instance in running_instances:
    ec2info[instance.id] = {
        'Instance ID': instance.id,
        'State': instance.state['Name'],
        'Instance Type': instance.instance_type,

        }

attributes = ['Instance ID', 'State', "Instance Type"]
for instance_id, instance in ec2info.items():
    for key in attributes:
        print("{0}: {1}".format(key, instance[key]))
    print("------")```


Thanks in advance :-)
    

最佳答案

获取所有警报是一个棘手的部分,因为除非您预先了解有关它们的信息,否则很难找到所有警报。尽管如此,我还是为 CPUUtilization 开发了演示代码作为示例:

import boto3

regions = [
    'ap-southeast-1',
    'us-west-1',
    'us-east-1',
]

for region in regions:
    
    ec2 = boto3.resource('ec2', region_name=region)
      
    running_instances = ec2.instances.filter(Filters=[{
        'Name': 'instance-state-name',
        'Values': ['running']}])
    
    cw = boto3.client('cloudwatch', region_name=region)    
    
    for instance in running_instances:
                
        instance_profile = 'N/A';
        
        if instance.iam_instance_profile:
            instance_profile = instance.iam_instance_profile['Arn']
        
        print(region, 
              instance.id, 
              instance.instance_type,
              instance_profile)
            
        alarms = cw.describe_alarms_for_metric(
                    Namespace='AWS/EC2',
                    MetricName='CPUUtilization',
                    Dimensions=[
                            {
                                'Name': 'InstanceId',
                                'Value': instance.id
                            }]
                    )                        
        
        if 'MetricAlarms' in alarms:
            for alarm in alarms['MetricAlarms']:
                print(f" - {alarm['AlarmName']}, {alarm['StateValue']}")

示例输出:

us-west-1 i-0d45a86caf2ee0e71 t2.micro arn:aws:iam::353693526480:instance-profile/InstanceRole
 - awsec2-i-0d45a86caf2ee0e71-CPU-Utilization, OK
us-east-1 i-0f7cd6d6123e6c47e t2.micro N/A

关于python - BOTO3:打印特定区域的实例信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63571591/

相关文章:

python - sqlalchemy 如何与 automap_base 生成(多对多)关系

python - 如何找到在python中从yolo检测到的对象的像素值?

python - Pyserial 没有从 Arduino 获得新的值(value)

Python 日期解析

node.js - 使用 chef 在 aws 上安装 node.js 的正确方法

json - 如何将 shell 脚本 (json) 输出发送到 aws sns 主题?

amazon-web-services - 无法通过 AWS Session Manager 工作获得 SSH 连接

python-3.x - 如何使用 boto3(或其他 Python)列出 _RequesterPays_ S3 存储桶的内容?

python - 有没有更高效的方法来排序这个数组?

django - 如何使用 NGINX 为 Django 应用程序的用户 www-data 设置 AWS 凭证