为了账号安全,请及时绑定邮箱和手机立即绑定

BOTO3:在特定区域打印实例信息

BOTO3:在特定区域打印实例信息

暮色呼如 2023-06-20 15:46:21
我正在尝试编写一个 Python/BOTO3 脚本来获取 us-east-1、us-west-1、ap-southeast-1 区域中的所有实例。我试图收集的信息是:实例编号实例类型附加到实例的 IAM 角色列表项 所有告警的状态我的目标是将其输出到 CSV 文件。目前我已经走了这么远,我有点卡住了,一些帮助将不胜感激:import boto3from collections import defaultdictregions = [    '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 :-)
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

获取所有警报是一个棘手的部分,因为除非您预先了解它们,否则很难找到所有警报。尽管如此,我还是以开发演示代码为例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


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信