环境需求

单位现在每隔一段时间需要核对一下 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. 构建后端第2篇之---springb @ComponentScan注解使用

    张艳涛写于2021-2-8日 构建后端项目的时候遇到一个问题,在zyt-auth项目的依赖定义了@Component类,这个类在项目启动的时候提示没有找到bean Field tokenService ...

  2. LinkedHashMap 的实现原理

    LinkedHashMap 概述 HashMap 是无序的,HashMap 在 put 的时候是根据 key 的 hashcode 进行 hash 然后放入对应的地方.所以在按照一定顺序 put 进 ...

  3. frameset框架在.net网站中的小实现。

    一般我们生成网页,为减少代码的开发量,通常将不变的网页部分进行重用.通用为三种方法: 1.frameset框架 2.用户自定义控件 3.母版页(消耗资源大,不追叙) 通常1,2两种方法常用. 1.fr ...

  4. 如何获取SQL Server数据库连接字符串的某些部分

    有的时候需要获取SQL Server数据库连接字符串的某些部分.用正则表达式可能有点麻烦. 其实有一个比较简单的方法--使用SqlConnectionStringBuilder. var builde ...

  5. Typora PicGo Gitee博客写作好搭档

    利用Gitee仓库存放图片 1.首先在Gitee上创建一个公开的仓库,我这里创建了一个名叫resources的仓库: 2.在Gitee中获取私人令牌(个人设置界面中): 安装配置PicGo 1.下载自 ...

  6. php中英文字符串转字母转大小写

    <?php //转小写 function lowercase($a){ $b = str_split($a, 1); $r = ''; foreach($b as $v){ $v = ord($ ...

  7. 文件包含 & LFI-labs靶场

    文件包含漏洞学习 冲冲冲,好好学习 2020.1.30 认真对待自己做出的每一个决定 知识与实践 Q:什么是文件包含? A:简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含 ...

  8. awk文本

    目录 1.awk概念 2. 基本格式 3. 工作原理 4. 常见的内建变量(可直接用) 5. 按行输出文本 实例1:输出全部内容 实例2:输出第1到第3行的内容 实例3:输出第1行和第3行的内容,输出 ...

  9. GPB重磅!浙大李兰娟院士团队修饰多组学研究揭示炎症反应新机制

    炎症 (inflammation) 是机体对致炎因子的损伤所发生的一种以防御反应为主的基本病理过程.翻译后修饰(PTMs)在调节多种炎症信号通路中起着重要作用,如磷酸化(phosphorylation ...

  10. Jms - SSRF - 代码审计

    在先知上看见一人发的文章.. 一看ID这么熟悉 原来是一个群友 唉 自己审计这么垃圾 几百年没搞过了 然后玩玩吧 一打开源码 我吐了 ctrl+alt+l格式化下代码 顺眼多了 然后Seay走了一波 ...