[英]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警报,而是:
DescribeInstances()
以获取EC2实例的列表 (在API调用中过滤到VPC,或在收到响应后过滤) 此方法将自动处理VPC中的任何实例,而不必创建/删除特定于每个实例的警报。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.