繁体   English   中英

创建一个AWS Lambda函数以基于低CPU使用率关闭实例

[英]Create an AWS lambda function to shut down instances based on low CPUUtilisation

因此,我已经深入了解以下内容,我正在尝试使lambda函数适用于特定的VPC(该VPC中的所有实例)。 在AWS内有一种成本很高的方法,但是要让客户为每个实例额外支付2.2美元以进行详细监控,这是很难证明的。 根据我到目前为止所读的内容,为每个实例编写函数非常容易,同样,几乎可以通过单击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或安全组可能没有帮助,但并没有太多希望。

任何建议大为赞赏。

看来您的要求是每n分钟检查给定VPC内的所有Amazon EC2实例,以降低CPU使用率。 如果它低于给定的阈值,则应停止此类实例。

首先,请注意,CPU利用率可能不是衡量“使用情况”的好方法。 您提到了学生,这表明可能有很多交互式命令行工作,它们并没有占用太多CPU。 您将需要进行实验以找到表明未使用的良好“触发器”。

我建议不要创建单个的Amazon CloudWatch警报,而是:

  • 创建一个每隔n分钟触发一次AWS Lambda函数的Amazon CloudWatch Events规则
  • Lambda函数将:
    • 调用DescribeInstances()获取EC2实例的列表 (在API调用中过滤到VPC,或在收到响应后过滤)
    • 对于每个实例,如果该实例正在运行,请在所需的时间段内(例如最近15分钟) 获取该实例的CloudWatch Metrics CPU利用率 (默认情况下每5分钟捕获一次)
    • 如果实例低于所需的阈值,请致电EC2以停止实例

此方法将自动处理VPC中的任何实例,而不必创建/删除特定于每个实例的警报。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM