我在 s3 存储桶中设置了成本和使用情况报告。我正在尝试从报告中获取 EC2 实例的不同成本,并且我需要添加一个自定义列,该列具有针对实例 ID 的队列名称或 ASG 名称类型的详细信息。
我已经在字典中使用 EC2 API 获得了实例名称及其 ID,但我无法将我的自定义列添加到报告中,以便我可以使用 groupBy 来获取与实例相关的不同类型的成本。
我在 s3 存储桶中设置了成本和使用情况报告。我正在尝试从报告中获取 EC2 实例的不同成本,并且我需要添加一个自定义列,该列具有针对实例 ID 的队列名称或 ASG 名称类型的详细信息。
我已经在字典中使用 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)