在 AWS 成本和使用情况报告中根据资源 ID 添加实例名称/队列名称/ASG 名称

问题描述

我在 s3 存储桶中设置了成本和使用情况报告。我正在尝试从报告中获取 EC2 实例的不同成本,我需要添加一个自定义列,其中包含一个队列名称或 ASG 名称类型的实例 ID 详细信息。

我在字典中使用 EC2 API 获得了实例名称及其 ID,但我无法将自定义添加到报告中,因此我可以使用 groupBy 获取与实例相关的不同类型的成本。

解决方法

没有直接的方法可以做到这一点。我们必须向从 csv 文件(成本和使用报告)派生的数据帧中添加一个新列,然后使用使用 ec2 API 派生的实例信息(使用标签选项)。一旦我们填充了新列,我们就可以在新列上使用 groupby() 从数据框中获取我们想要的数据

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

for instance in running_instances:
    for tag in instance.tags:
        if 'Name'in tag['Key']:
            name = tag['Value']
    ec2info[instance.id] = {
            'Name': name,'Type': instance.instance_type
    }

df.insert(loc=17,column='Instance_Name',value='Other')
instance_id = []

def update_col(x):
    for key,val in ec2info.items():
        if x == key:
            if ('MyAgg' in val['Name']) | ('MyAgg-AutoScalingGroup' in val['Name']):
                return 'SharkAggregator'
            if ('MyColl AS Group' in val['Name']) | ('MyCollector-AutoScalingGroup' in val['Name']):
                return 'SharkCollector'
            if ('MyMetric AS Group' in val['Name']) | ('MyMetric-AutoScalingGroup' in val['Name']):
                return 'Metric'

df['Instance_Name'] = df.ResourceId.apply(update_col)
df.Instance_Name.fillna(value='Other',inplace=True)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...