AWS-服务更新

一、背景

AWS上的服务如rds,redis等不定期会有服务更新操作,这种操作有些是强制的,不自己更新,到期后aws会自动更新,可能会影响业务,那么需要怎么看呢

二、查看

控制台-对应服务-服务更新-查看
在这里插入图片描述

官网相关:https://aws.amazon.com/cn/elasticache/elasticache-maintenance/?nc1=h_ls
更新影响:https://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/red-ug/CacheNodes.NodeReplacement.html#ReplaceShardNode

三、脚本检测

有些服务更新可能自己忘了,所以需要用脚本检测下

import os
import json
import sys
sys.path.append('/data/python_project/test')
import logger
from logger import Logger
log_new = Logger("aws_update_service").get_log()

def get_update(profile_name):
    get_need_update_str = '/usr/local/bin/aws elasticache describe-service-updates --profile %s --output=json --service-update-status=available  --query \'ServiceUpdates[?AutoUpdateAfterRecommendedApplyByDate==`true`].ServiceUpdateName\'' % profile_name
    service_need_update_all = os.popen(get_need_update_str)
    service_need_update_all = json.loads(service_need_update_all.read())
    get_service_update_str = '/usr/local/bin/aws elasticache describe-update-actions --profile %s --output=json --query  \'UpdateActions[?UpdateActionStatus==`not-applied`].{"ReplicationGroupId":ReplicationGroupId,"ServiceUpdateName":ServiceUpdateName}\'' % profile_name
    service_update_all = os.popen(get_service_update_str)
    service_update_all = json.loads(service_update_all.read())
    for service_update in service_update_all:
        if service_update["ServiceUpdateName"] in service_need_update_all:
            result_all.append(service_update)


result_all = []
profile_all = ["config1", "config2"]
for profile_name in profile_all:
    try:
        get_update(profile_name)
    except Exception as e:
        log_new.error(e)
        logger.send_email('获取更新服务失败,错误: %s' % e)
if len(result_all) == 0:
    log_new.info('没有需要更新的服务')
else:
    result_info = "\n".join([str(i) for i in result_all])
    log_new.info('需要更新的信息为%s' % result_info)
    logger.send_email(result_info, 'Redis服务更新')

logger.py

import time
import datetime
import os,sys
import logging
import json
import smtplib
from email.header import Header
from email.mime.text import MIMEText
log_path = '/data/python_project/logs/'

class Logger:
    def __init__(self, loggername):
        # 创建一个logger
        self.logger = logging.getLogger()
        self.logger_name = loggername

    def get_log(self):
        """定义一个函数,回调logger实例"""
        self.logger.setLevel(logging.INFO)  # Log等级总开关
        # 创建一个handler,用于写入日志文件
        log_name = log_path + self.logger_name + '.log'
        fh = logging.FileHandler(log_name, mode='a')
        fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
        # 创建一个handler,用于将日志输出到控制台
        #ch = logging.StreamHandler()
        #ch.setLevel(logging.DEBUG)
        # 定义handler的输出格式
        formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
        fh.setFormatter(formatter)
        #ch.setFormatter(formatter)
        # 给logger添加handler
        self.logger.addHandler(fh)
        #self.logger.addHandler(ch)
        return self.logger


def send_email(d_info_str,title):
    log_new = Logger("public_email")
    mail_res = True
    while mail_res:
        try:
            send_email_detail(d_info_str,title)
            log_new.get_log().info("mail has been send successfully")
            mail_res = False
        except Exception as e:
            log_new.get_log().error('邮件发送出现问题')
            time.sleep(2)



def send_email_detail(d_info_str,title):
    mail_host = "smtp.exmail.qq.com"  # SMTP服务器
    mail_user = "********"  # 用户名
    mail_pass = "*******"  # 密码(这里的密码不是登录邮箱密码,而是授权码)
    sender = '*******'  # 发件人邮箱
    receivers = ['*******', "**********"]  # 接收人邮箱
    body = d_info_str
    title = title  # 邮件主
    message = MIMEText(body, 'html', 'utf-8')  # 内容, 格式, 编码
    message['From'] = "{}".format(sender)
    message['To'] = ",".join(receivers)
    message['Subject'] = title
    smtpObj = smtplib.SMTP_SSL(mail_host, 465)  # 启用SSL发信, 端口一般是465
    smtpObj.login(mail_user, mail_pass)  # 登录验证
    smtpObj.sendmail(sender, receivers, message.as_string())  # 发送
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值