#amazon-web-services #amazon-s3 #amazon-ec2 #aws-billing
Вопрос:
Я настроил отчет о затратах и использовании в корзине s3. Я пытаюсь получить различную стоимость для экземпляров EC2 из отчета, и мне нужно добавить пользовательский столбец, в котором есть сведения о названии флота ИЛИ имени ASG в соответствии с идентификаторами экземпляров.
У меня есть имя экземпляра и их идентификаторы с помощью API EC2 в словаре, но я не могу добавить свой пользовательский столбец в отчет, чтобы использовать groupBy для получения различных типов затрат, связанных с экземплярами.
Ответ №1:
Прямого способа сделать это нет. Мы должны добавить новый столбец в фрейм данных, полученный из файла csv(отчет о затратах и использовании), затем использовать информацию об экземпляре, полученную с помощью API ec2(используйте опцию тега). Как только мы заполним новый столбец, мы сможем использовать 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)