Создайте лямбда-функцию AWS для отключения экземпляров на основе низкой загрузки ЦП - PullRequest
0 голосов
/ 26 февраля 2019

Итак, я уже дошел до того, что ниже, я пытаюсь сделать так, чтобы лямбда-функция применялась к определенному VPC (все экземпляры в этом VPC).В AWS есть определенный способ сделать это, но заставить клиентов платить дополнительные $ 2,20 за экземпляр для детального мониторинга трудно оправдать.Основываясь на том, что я прочитал до сих пор, до смешного легко написать функцию для каждого экземпляра, опять же, это можно сделать почти нажатием следующего следующего финиша в AWS, но мы не хотим определять отдельные экземпляры на основе того, какнаши клиенты растут так быстро.

import boto3


def put_cpu_alarm(instance_id): 
    cloudWatch = boto3.client('cloudwatch') 
    cloudWatch.put_metric_alarm( 
    AlarmName = f'CPU_ALARM_{instance_id}'
    AlarmDescription = 'Alarm when server CPU does not exceed 10%'
    AlarmActions = ['arn:aws:automate:eu-west-1:ec2:stop'] 
    MetricName = 'CPUUtilization'
    Namespace = 'AWS/EC2' 
    Statistic = 'Average'
    Dimensions = [{'Name': 'InstanceId', 'Value': instance_id}]
    Period = 300
    EvaluationPeriods = 12
    Threshold = 10
    ComparisonOperator = 'LessThanOrEqualToThreshold'
    TreatMissingData = 'notBreaching' 
    )

def lambda_handler(event, context): 
    instance_id = event['detail']['instance-id'] 
    ec2 = boto3.resource('ec2') 
    instance = ec2.Instance(instance_id)  
    if instance.instance_type.endswith('xlarge'): put_cpu_alarm(instance_id)

Я надеялся, что небольшой оператор if в последней строке мог бы быть обновлен для работы с конкретным VPC, но не особо задумывался над поиском правильной строки для ссылки на отдельный VPC или систему безопасности.группа, которая может помочь.

Любой совет высоко ценится.

1 Ответ

0 голосов
/ 26 февраля 2019

Похоже, что вы должны проверять все экземпляры Amazon EC2 в данном VPC каждые n минут на предмет низкой загрузки ЦП.Если оно падает ниже заданного порогового значения, такие экземпляры должны быть остановлены.

Во-первых, обратите внимание, что загрузка ЦП может не быть хорошей мерой «использования».Вы упоминаете студентов, которые предполагают, что может быть много интерактивной командной строки, которая не использует много ЦП.Вам нужно будет поэкспериментировать, чтобы найти хороший «триггер», который указывает на неиспользование.

Вместо создания отдельных аварийных сигналов Amazon CloudWatch, я бы порекомендовал:

  • Создать Правило Amazon CloudWatch Events , которое запускает функцию AWS Lambda каждые n минуты
  • Функция Lambda:
    • вызов DescribeInstances() на получение спискаэкземпляров EC2 (либо фильтрация до VPC в вызове API, либо фильтрация после получения ответа)
    • Для каждого экземпляра, если экземпляр выполняется, получить использование CPU CloudWatch Metrics CPU для экземпляра (который захватывается по умолчанию каждые 5 минут) в течение требуемого периода времени (например, в течение последних 15 минут)
    • Если экземпляр находится ниже желаемого порога, вызовите EC2 на Остановите экземпляр

Этот метод автоматически обрабатывает любой экземпляр в VPC без необходимости создавать / удалять аварийные сигналы, специфичные для каждого instance.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...