zoukankan      html  css  js  c++  java
  • Python脚本导出AWS EC2资源清单

    环境需求

    单位现在每隔一段时间需要核对一下 AWS 正在运行的 EC2 资源清单,为了避免核对失误以及重复性的工作,打算用脚本来解决这一重复性的工作。大概思路为 通过 AWS AK、SK 来索取 AWS EC2 list 的权限,然后通过 Python 把正在运行的 EC2 实例筛选出来,然后提取出来想要的一些内容 写入到 CSV 表格中,通过附件的方式发送到邮箱中.

    运行脚本所需

    Python3、pip3

    Python3 所需模块

    boto3
    csv
    codecs
    smtplib

    脚本内容

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    import boto3
    import csv
    import codecs
    import smtplib
     
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from smtplib import SMTP
     
    ec2 = boto3.client(
        'ec2',
        aws_access_key_id="AKIAUO5xxxxxxxxxxxxxxxxxxx",
        aws_secret_access_key="0wcg69IbHT/5xxxxxxxxxxxxxxxxxxxxxx",
        region_name='cn-north-1',
        )
     
    response = ec2.describe_instances()
    with open("/home/bsh/scripts/running.csv""w", encoding="utf-8", newline="") as csvf:
        writer = csv.writer(csvf)
        csv_head = ["Up time""Project""Instance Name""Instance ID""Public IP""Privite IP""Key Name""State"]
        writer.writerow(csv_head)
     
        for i in response['Reservations']:
          if i['Instances'][0]['State']['Name'] == 'running':
            for j in i['Instances']:
                if 'PublicIpAddress' not in j:
                    j['PublicIpAddress'] = ""
                if 'Tags' not in j:
                    j['Tags'] = []
                if 'InstanceId' not in j:
                    j['InstanceId'] = []
                if 'KeyName' not in j:
                    j['KeyName'] = []
                print(j['Tags'])
                for dic in j['Tags']:
                    if dic['Key'] == 'Name':
                        print(dic['Value'])
                        v = dic['Value']
     
                for dic in j['Tags']:
                    if dic['Key'] == 'Project':
                        print(dic['Value'])
                        p = dic['Value']
     
                        row_cvs = [j['LaunchTime'], p, v, j['InstanceId'], j['PublicIpAddress'], j['PrivateIpAddress'], j['KeyName'], 'running']
                        writer.writerow(row_cvs)
                        print(j['LaunchTime'], p, v, j['InstanceId'], j['PublicIpAddress'], j['PrivateIpAddress'], j['KeyName'], 'running')
     
    mailto_list=['xuewenlong93@189.com']
    mail_host="smtp.189.cn" 
    mail_user="xuewenlong93@189.cn" 
    mail_pass="xxxx" 
     
    def make_mpa_msg():
        email = MIMEMultipart('alterbative'
        text = MIMEText(open('/home/bsh/scripts/running.csv''rb').read(), 'base64''utf-8'
        text["Content-Disposition"] = 'attachment; filename="running.csv"'
        email.attach(text)
        return email
     
    def send_mail(to_list,sub,content):
        me="awsEC2"+"<"+mail_user+">" 
        msg = make_mpa_msg()
        msg['Subject'] = sub 
        msg['From'] = me
        msg['To'] = ";".join(to_list) 
        try:
            server = smtplib.SMTP()
            server.connect(mail_host)
            server.login(mail_user,mail_pass) 
            server.sendmail(me, to_list, msg.as_string())
            server.close()
            return True
        except Exception as e:
            print (str(e))
            return False
    for i in range(1): #发送1封
        if send_mail(mailto_list,"awsec2list","msg.as_string()"): 
            print ('发送成功')
        else:
            print ('发送失败')
    [root@ip-10-0-10-243 scripts]# python awsout.py
    发送成功
    [root@ip-10-0-10-243 scripts]#


  • 相关阅读:
    vuex2 mapActions 报错 `unknown action type: xxxx`
    IE报vuex requires a Promise polyfill in this browser问题解决
    vue路由懒加载
    vue-router各个属性的作用及用法
    JS实现继承的几种方法
    ES6学习笔记--promise对象
    jQuery--data()方法
    原生js实现二级联动下拉列表菜单
    sql server中部分函数功能详解
    js中字符串转换为数值的两种方法的区别
  • 原文地址:https://www.cnblogs.com/xuewenlong/p/14037094.html
Copyright © 2011-2022 走看看