环境需求

单位现在每隔一段时间需要核对一下 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]#



转自cdops运维博客

Python脚本导出AWS EC2资源清单的更多相关文章

  1. 【原创】导出aws ec2为csv

    1.安装 pip  install boto3 csv 2.使用脚本更新秘钥和地区 # 导出aws ec2列表为cvs import boto3 import csv   ec2 = boto3.cl ...

  2. 如何把Python脚本导出为exe程序

    一.pyinstaller简介 pyinstaller将Python脚本打包成可执行程序,使在没有Python环境的机器上运行 最新版是pyinstaller 3.1.1.支持python2.7和py ...

  3. (转)Python_如何把Python脚本导出为exe程序

    原文地址:https://www.cnblogs.com/robinunix/p/8426832.html 一.pyinstaller简介 Python是一个脚本语言,被解释器解释执行.它的发布方式: ...

  4. <小白学技术>将python脚本导出为exe可执行程序

    1.简介(为啥需要导出为exe可执行程序) python写完的程序靠命令来执行,显得太专业,不符合python简单的特点(好吧,主要是太low) 代码给别人执行,别人没有你的python库也没法用(双 ...

  5. 使用 bash 脚本把 AWS EC2 数据备份到 S3

    目录 一.IAM 秘钥授权方式(普通) 1.1.打开 IAM 1.2.添加用户 1.3.安装和配置 AWS CLI 1.4.配置授权 二.IAM 角色授权方式(安全) 2.1.创建一个 EC2 访问 ...

  6. postman---postman导出python脚本

    前面一直写关于postman的一些文章,大家现在都应该简单了解,其实postman还有许多的功能,这个要大家一点点的挖掘出来了,安静在给大家分享一个关于postman导出python脚本 Postma ...

  7. 十二、导出python脚本

    一.为什么要导出? 导出成多语言脚本,方便二次开发 使用其他语言的test runner 使用自己最熟悉的语言做接口自动化测试 二.导出成python脚本 演示 导出成python的requesy脚本 ...

  8. 使用python脚本从数据库导出数据到excel

    python从数据库导出数据到excel 最近需要从数据库里导出一些数据到excel,刚开始我是使用下面的命令 select * from xxx where xxx into outfile 'xx ...

  9. 10、 导出python脚本进行数据驱动的接口测试

    postman自带脚本导出功能,对于代码小白来说,可以不错的学习代码级接口测试 第一步:输入接口地址,点击send 第二步:点击code,导出脚本文件,为python脚本 第三步:安装python3以 ...

随机推荐

  1. 比POSTMAN更好用!在国产接口调试工具APIPOST中使用Mock

    APIPOST可以让你在没有后端程序的情况下能真实地返回接口数据,你可以用APIPOST实现项目初期纯前端的效果演示,也可以用APIPOST实现开发中的数据模拟从而实现前后端分离.在使用APIPOST ...

  2. 迈入 8K 时代,AI 驱动超高清 “视” 界到来

    2021 年,超高清迈入 "8K" 时代.超高清视频将带来全新视听体验,但超高清生产在内容生产层面也面临着超高清存量少.生产设备更新换代慢.制作周期成倍增加的困境.在 7 月 10 ...

  3. NAR | 张勇洪/周超/刘小云团队合作揭示2-羟基异丁酰化修饰调控光暗适应性反应机制

    景杰生物 | 报道 ​ 组蛋白赖氨酸的翻译后修饰是表观遗传学密码的重要组成部分,它们动态地调节染色质的结构和功能,影响基因表达活性,参与生物体的环境适应性调控.赖氨酸酰化修饰家族(Acylation) ...

  4. Vue-Router学习第二弹动态路由\懒加载\嵌套路由

    在我们做项目时肯定会有出现动态路由: 举个栗子: 一个品种的商品页面会有同类不同样的商品就要在路由的后面加一个id: Vue的路由id是这样添加的: 两种动态路由 一种是params参数添加: 首先现 ...

  5. VNC远程重装CentOS7

    适用于云服务器,远程安装纯净版的CentOS7.9 脚本执行完成后使用VNC客户端连接 一键重装脚本 #!/bin/bash #Net Reinstall Centos System red='\03 ...

  6. 关于表单重复提交之验证码 和谷歌Kaptcha图片验证码的使用

    表单重复提交之-----验证码 表单重复提交有三种常见的情况: 一:提交完表单.服务器使用请求转来进行页面跳转.这个时候,用户按下功能键 F5,就会发起最后一次的请求. 造成表单重复提交问题.解决方法 ...

  7. Spring Boot自动配置原理与实践(二)

    前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...

  8. canvas也能实现事件系统????

    前言 大家好! 我是热爱图形的fly, 之前在群里和粉丝讨论canvas 如何事件系统, 然后呢? 我自己其实也对这个比较感兴趣, 我看过很多canvas 实现的项目, 比如canvas 实现思维导图 ...

  9. 面对对象4 Mixins机制 内置方法 反射 异常

    Mixins机制 为什么要有:子类继承父类的时候,可能会碰到需要继承多个父类的情况,那么继承关系也分主类和辅类,既保持主类的功能,也有辅类的功能. 命名方式,我们需要将主类和辅类区分开来,python ...

  10. 我的微服务之路,看我搭建dapr趟过的坑

    前言 自从上周看了一个Dapr的视频,知道原来自己离微服务很近,简直触手可及. 心痒痒好久了,不动手实践验证一下简直是寝食难安.先是看官网的文档,可能是因为被墙了,有些网址是不能访问的,那安装搭建环境 ...