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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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

 

AWS-EC2,如何仅使用一个实例设置多个公共站点?

【中文标题】AWS-EC2,如何仅使用一个实例设置多个公共站点?【英文标题】:AWS-EC2, how to set multiple public sites with just one instance? 【发布时间】:2013-06-08 14:36:26 【问题描述】:

我已经阅读了很多关于 SO 的文章和主题,但找不到任何进一步的帮助。

我有一个 AWS-EC2 实例,并希望在其中拥有几个公共站点。

我已经让我的第一个公共网站运行如下:http://ec2-50-xxx-214-xxx.us-west-2.compute.amazonaws.com/

我所做的只是在/etc/apache2/sites-available

下添加了一个名为manmu的文件
<VirtualHost *:80>
    ServerName ec2-50-xxx-214-xxx.us-west-2.compute.amazonaws.com
    DocumentRoot /home/ubuntu/manmu/YYYYY/web
    DirectoryIndex index.php
</VirtualHost>

然后ubuntu@ip-10-245-38-136:/etc/apache2/sites-enabled$ ln -s ../sites-available/manmu

但是我怎样才能让我的其他网站运行呢? 例如,我可能想要一些子域,例如:http://abc.ec2-50-xxx-214-xxx.us-west-2.compute.amazonaws.com/ 等等。

而且,我可以让我的本地机器运行多个站点(我的意思是 url),例如:http://abc.manmu.localhosthttp://def.manmu.localhost 我正在使用 /etc/hosts 和 /etc/apache2/site-availables(和 ../site-enabled)。 但我真的不知道如何配置 AWS 以公开访问多个 url。

我刚刚听到类似 Elastic IP 之类的东西,这对实际域名有帮助吗?

谢谢。 最好的问候, tech_me

【问题讨论】:

【参考方案1】:

您可以将多个辅助 IP 地址添加到 VPC 内的 EC2 实例 - 请参阅此处:http://aws.typepad.com/aws/2012/07/multiple-ip-addresses-for-ec2-instances-in-a-virtual-private-cloud.html

然后您可以将公共弹性 IP 地址附加到这些私有 IP。请参阅此处的说明:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-ip-addressing.html#WorkWithEIPs

然后您可以使用 Route 53(或其他 DNS 服务)将您的 URL 指向您网站的 IP。这是 Route 53 入门的链接:http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/GetStarted.html

更新: 拥有多个 IP 后,您需要将域 URL 指向不同的 IP。使用 Route 53 作为分布式且高度可用的 DNS 服务,您可以添加这些记录。具体说明见文档:http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingNewDNS.html

【讨论】:

谢谢你,@Guy。我稍后会看看。 嗨,@Guy。关于前两个步骤我已经阅读并做了一些事情,但不知道如何使用关于 Route 53 的最后一个步骤。请您提供更多提示吗? 您希望多个域指向一组 IP,这些 IP 都连接到单个实例。 嗨,@Guy。几个星期以来,我一直忙于工作。今天回来用AWS,发现我连云都用不同的端口给不同的站点,而不是不同的域——也许这只是网络工程的基础知识^^;。无论如何,谢谢。 谢谢,它是免费的吗? (只有少数用户会访问我的公共域。)

以上是关于基于python-统计所有AWS-EC2的Events-事件信息-并进行邮件通知的主要内容,如果未能解决你的问题,请参考以下文章

AWS-EC2域名映射

AWS-EC2自动挂载EBS卷或磁盘

AWS-EC2挂载EBS卷

aws-ec2-upload

用户消费数据分析,基于python

Codeforces 1291A - Even But Not Even