最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

基于python-统计所有AWS-EC2的Events-事件信息-并进行邮件通知

来源:博客园


(资料图)

关于AWS的EC2,我们可以有时间会收到一些官方邮件,提示让在指定的时间之前在console界面stop一次,或者重启一次,完成底层维护

其实这些Events事件,在Console的EC2服务界面左侧菜单的Events下也可以看到的,如下图所示

其中Event status 为Completed 就是我们已经完成了的,Scheduled的为计划中,如果在Start time时间之前,我们没有完成要求的操作,则aws会自动强制进行事件操作

如果到了时间,aws强性执行stop或者reboot等其他操作、那也就是在我们的预期之外,必然就有可能影响到业务的正常运行,造成业务中断

因此可以知道,这种Events事件的重要性,如果对于公司有多个aws账号时,我们就更有必须去主动发现收集所有aws账号EC2的Events事件,最好能通过邮件通告

于是笔者基于这种需求,使用AWS SDK for Python (Boto3) 的方式进行了编程实现,核心代码如下(需要使用到ec2的describe_instance_status):

for Ec2ResponsePage in Ec2Response:    for Ec2 in Ec2ResponsePage["InstanceStatuses"]:        InstanceId=Ec2["InstanceId"]        AvailabilityZone=Ec2["AvailabilityZone"]                HasEvent=Ec2.get("Events")        if HasEvent:            InstanceEventId=HasEvent[0]["InstanceEventId"]            Code=HasEvent[0]["Code"]            Description=HasEvent[0]["Description"]            # 关于状态,是需要进行推断的,如果Descriptionp字符串以[Completed]开头,则代表Completed完成            if Description.startswith("[Completed]"):                EventStatus="Completed"            else:                EventStatus="Scheduled"            NotBefore=(HasEvent[0]["NotBefore"]+datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S")            NotAfter=""                                # Console上有、有持续时间、的才会有NotAfter字段,其实严谨来说应该是有NotAfter字段的才会有持续时间,Duration需要自己计算            try:                NotAfter=(HasEvent[0]["NotAfter"]+datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S")                Duration_a=((HasEvent[0]["NotAfter"]-HasEvent[0]["NotBefore"]).seconds)/3600                Duration=round(Duration_a,1)            except:                Duration=""

最后,将HasEvent下的进行整理输出到Excel表格中,以邮件发送给相关的人员,表格如下:

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17471064.html

关键词: