Добавьте имена экземпляров/название парка/имя ASG в соответствие с идентификаторами ресурсов в отчете о затратах и использовании AWS

#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)