AWS api数据信息获取(boto3)

news2024/12/26 23:42:11

GitHub - starsliao/TenSunS: 🦄后羿 - TenSunS(原ConsulManager):基于Consul的运维平台:更优雅的Consul管理UI&多云与自建ECS/MySQL/Redis同步Prometheus/JumpServer&ECS/MySQL/Redis云监控指标采集&Blackbox站点监控维护&漏洞通知/资源到期余额告警&各类资源Grafana看板展示🦄后羿 - TenSunS(原ConsulManager):基于Consul的运维平台:更优雅的Consul管理UI&多云与自建ECS/MySQL/Redis同步Prometheus/JumpServer&ECS/MySQL/Redis云监控指标采集&Blackbox站点监控维护&漏洞通知/资源到期余额告警&各类资源Grafana看板展示 - starsliao/TenSunSicon-default.png?t=N7T8https://github.com/starsliao/TenSunS

所有依赖(包含无用的,懒得不分了)

Werkzeug==2.0.3
itsdangerous==2.0.1
flask==2.0.2
flask-restful==0.3.9
flask-cors==3.0.10
Flask-HTTPAuth==4.5.0
requests==2.27.1
Flask-APScheduler==1.12.3
xlrd==1.2.0
#pyDes==2.0.1
pycryptodome==3.14.1
beautifulsoup4==4.11.1
ldap3==2.9.1
loguru==0.6.0
huaweicloudsdkcore==3.1.11
huaweicloudsdkecs==3.1.11
huaweicloudsdkeps==3.1.11
huaweicloudsdkbss==3.1.11
huaweicloudsdkrds==3.1.11
huaweicloudsdkces==3.1.11
huaweicloudsdkdcs==3.1.11
alibabacloud_resourcemanager20200331==2.1.1
alibabacloud_ecs20140526==2.1.3
alibabacloud_rds20140815==2.1.2
alibabacloud_r_kvstore20150101==2.20.7
alibabacloud_bssopenapi20171214==2.0.6
aliyun-python-sdk-cms==7.0.32
tencentcloud-sdk-python-common==3.0.779
tencentcloud-sdk-python-cvm==3.0.779
tencentcloud-sdk-python-cdb==3.0.779
tencentcloud-sdk-python-dcdb==3.0.779
tencentcloud-sdk-python-billing==3.0.779
tencentcloud-sdk-python-monitor==3.0.779
tencentcloud-sdk-python-redis==3.0.779
boto3==1.23.10

源码 

from Tea.exceptions import TeaException
import boto3

import sys,datetime,hashlib,math,traceback
from units import consul_kv,consul_svc
from units.cloud import sync_ecs,sync_rds,sync_redis,notify
from units.config_log import *

def exp(account,collect_days,notify_days,notify_amount):
    pass

def group(account):
    try:
        now = datetime.datetime.now().strftime('%m.%d/%H:%M')
        group_dict = {"1": "1"} # AWS没有资产组概念
        consul_kv.put_kv(f'ConsulManager/assets/awscloud/group/{account}',group_dict)
        count = len(group_dict)
        data = {'count':count,'update':now,'status':20000,'msg':f'同步资源组成功!总数:{count}'}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/group', data)
        logger.info(f'【JOB】===>awscloud_group {account} {data}')
    except TeaException as e:
        emsg = e.message.split('. ',1)[0]
        logger.error(f"【code:】{e.code}\n【message:】{emsg}\n{traceback.format_exc()}")
        data = consul_kv.get_value(f'ConsulManager/record/jobs/awscloud/{account}/group')
        if data == {}:
            data = {'count':'无','update':f'失败{e.code}','status':50000,'msg':emsg}
        else:
            data['update'] = f'失败{e.code}'
            data['msg'] = emsg
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/group', data)
    except Exception as e:
        logger.error(f'{e}\n{traceback.format_exc()}')
        data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/group', data)

def ecs(account,region,isextip=False):
    ak,sk = consul_kv.get_aksk('awscloud',account)
    now = datetime.datetime.now().strftime('%m.%d/%H:%M')
    group_dict = consul_kv.get_value(f'ConsulManager/assets/awscloud/group/{account}')  # {"1":"1"}

    ecs_dict = {}
    try:
        ec2 = boto3.client(
            "ec2",
            aws_access_key_id=ak,
            aws_secret_access_key=sk,
            region_name=region,
        )
        response = ec2.describe_instances()

        for reservations in response['Reservations']:
            for instances in reservations['Instances']:
                InstanceId = instances["InstanceId"]
                ecs_dict_temp = {InstanceId: {}}
                for tag in instances["Tags"]:
                    if tag["Key"] == "Name":
                        ecs_dict_temp[InstanceId]["name"] = tag["Value"]
                ecs_dict_temp[InstanceId]["group"] = "无"
                ecs_dict_temp[InstanceId]["ostype"] = "windows" if "win" in instances["PlatformDetails"].lower() else "linux"
                ecs_dict_temp[InstanceId]["status"] = instances["State"]["Name"]
                ecs_dict_temp[InstanceId]["region"] = region
                ecs_dict_temp[InstanceId]["ip"] = instances["PrivateIpAddress"]
                ecs_dict_temp[InstanceId]["cpu"] = f'{instances["CpuOptions"]["CoreCount"]*instances["CpuOptions"]["ThreadsPerCore"]}核'
                ecs_dict_temp[InstanceId]["mem"] = "0"
                ecs_dict_temp[InstanceId]["exp"] = "按量" # AWS仅按量 
                if isextip:
                    ecs_dict_temp[InstanceId]["ip"] = instances["PublicIpAddress"]
                ecs_dict.update(ecs_dict_temp)

        count = len(ecs_dict)
        off,on = sync_ecs.w2consul('awscloud',account,region,ecs_dict)
        data = {'count':count,'update':now,'status':20000,'on':on,'off':off,'msg':f'ECS同步成功!总数:{count},开机:{on},关机:{off}'}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/ecs/{region}', data)
        logger.info(f'【JOB】===>awscloud_ecs {account} {region} {data}')
    except TeaException as e:
        emsg = e.message.split('. ',1)[0]
        logger.error(f"【code:】{e.code}\n【message:】{emsg}\n{traceback.format_exc()}")
        data = consul_kv.get_value(f'ConsulManager/record/jobs/awscloud/{account}/ecs/{region}')
        if data == {}:
            data = {'count':'无','update':f'失败{e.code}','status':50000,'msg':emsg}
        else:
            data['update'] = f'失败{e.code}'
            data['msg'] = emsg
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/ecs/{region}', data)
    except Exception as e:
        logger.error(f'{e}\n{traceback.format_exc()}')
        data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/ecs/{region}', data)

def redis(account,region):
    ak,sk = consul_kv.get_aksk('awscloud',account)
    now = datetime.datetime.now().strftime('%m.%d/%H:%M')
    group_dict = consul_kv.get_value(f'ConsulManager/assets/awscloud/group/{account}')

    redis_dict = {}
    try:
        elasticache = boto3.client(
            'elasticache',
            aws_access_key_id=ak,
            aws_secret_access_key=sk,
            region_name=region,
        )
        response = elasticache.describe_cache_clusters()

        for rdb in response["CacheClusters"]:
            CacheClusterId = rdb["CacheClusterId"]
            redis_dict_temp = {CacheClusterId: {}}
            redis_dict_temp[CacheClusterId]["name"] = rdb["CacheClusterId"]
            redis_dict_temp[CacheClusterId]["domain"] = rdb.get("PrivateIp","null")
            redis_dict_temp[CacheClusterId]["ip"] = rdb.get("PrivateIp","null")
            redis_dict_temp[CacheClusterId]["port"] = 6379
            redis_dict_temp[CacheClusterId]["region"] = region
            redis_dict_temp[CacheClusterId]["group"] = rdb["ReplicationGroupId"]
            redis_dict_temp[CacheClusterId]["status"] = rdb["CacheClusterStatus"]
            redis_dict_temp[CacheClusterId]["itype"] = rdb["Engine"]
            redis_dict_temp[CacheClusterId]["ver"] = rdb["EngineVersion"]
            redis_dict_temp[CacheClusterId]["mem"] = "0"
            redis_dict_temp[CacheClusterId]["exp"] = "按量"
            redis_dict.update(redis_dict_temp)

        count = len(redis_dict)
        off,on = sync_redis.w2consul('awscloud',account,region,redis_dict)
        data = {'count':count,'update':now,'status':20000,'on':on,'off':off,'msg':f'redis同步成功!总数:{count},开机:{on},关机:{off}'}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/redis/{region}', data)
        logger.info(f'【JOB】===>awscloud_redis {account} {region} {data}')
    except TeaException as e:
        emsg = e.message.split('. ',1)[0]
        logger.error(f"【code:】{e.code}\n【message:】{e.message}\n{traceback.format_exc()}")
        data = consul_kv.get_value(f'ConsulManager/record/jobs/awscloud/{account}/redis/{region}')
        if data == {}:
            data = {'count':'无','update':f'失败{e.code}','status':50000,'msg':emsg}
        else:
            data['update'] = f'失败{e.code}'
            data['msg'] = emsg
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/redis/{region}', data)
    except Exception as e:
        logger.error(f'{e}\n{traceback.format_exc()}')
        data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/redis/{region}', data)

def rds(account,region):
    ak,sk = consul_kv.get_aksk('awscloud',account)
    now = datetime.datetime.now().strftime('%m.%d/%H:%M')
    group_dict = consul_kv.get_value(f'ConsulManager/assets/awscloud/group/{account}')

    rds_dict = {}
    try:
        rds = boto3.client(
            "rds",
            aws_access_key_id=ak,
            aws_secret_access_key=sk,
            region_name=region,
        )
        response = rds.describe_db_instances()

        for db in response["DBInstances"]:
            DBInstanceId = db["DBInstanceIdentifier"]
            rds_dict_temp = {DBInstanceId: {}}
            rds_dict_temp[DBInstanceId]["name"] = db["DBInstanceIdentifier"]
            rds_dict_temp[DBInstanceId]["domain"] = db["Endpoint"]["Address"]
            rds_dict_temp[DBInstanceId]["ip"] = db["Endpoint"]["Address"]
            rds_dict_temp[DBInstanceId]["port"] = db["Endpoint"]["Port"]
            rds_dict_temp[DBInstanceId]["region"] = region
            rds_dict_temp[DBInstanceId]["group"] = db["DBClusterIdentifier"]
            rds_dict_temp[DBInstanceId]["status"] = db["DBInstanceStatus"]
            rds_dict_temp[DBInstanceId]["itype"] = db["Engine"]
            rds_dict_temp[DBInstanceId]["ver"] = db["EngineVersion"]
            rds_dict_temp[DBInstanceId]["exp"] = "按量"
            rds_dict_temp[DBInstanceId]["cpu"] = "0"
            rds_dict_temp[DBInstanceId]["mem"] = "0"
            rds_dict_temp[DBInstanceId]["disk"] = "0"
            rds_dict.update(rds_dict_temp)
 
        count = len(rds_dict)
        off,on = sync_rds.w2consul('awscloud',account,region,rds_dict)
        data = {'count':count,'update':now,'status':20000,'on':on,'off':off,'msg':f'rds同步成功!总数:{count},开机:{on},关机:{off}'}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/rds/{region}', data)
        logger.info(f'【JOB】===>awscloud_rds {account} {region} {data}')
    except TeaException as e:
        emsg = e.message.split('. ',1)[0]
        logger.error(f"【code:】{e.code}\n【message:】{e.message}\n{traceback.format_exc()}")
        data = consul_kv.get_value(f'ConsulManager/record/jobs/awscloud/{account}/rds/{region}')
        if data == {}:
            data = {'count':'无','update':f'失败{e.code}','status':50000,'msg':emsg}
        else:
            data['update'] = f'失败{e.code}'
            data['msg'] = emsg
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/rds/{region}', data)
    except Exception as e:
        logger.error(f'{e}\n{traceback.format_exc()}')
        data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
        consul_kv.put_kv(f'ConsulManager/record/jobs/awscloud/{account}/rds/{region}', data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4家国产数据库上市公司:最好的盈利1个亿,最惨亏8000w

目前国产数据库xc目录中大概有11家公司,其中多家公司已经上市了,且公布了最新的半年报! 这里尝试分析一下几家国产数据库上市公司的发展潜力和情况。 达梦数据库 达梦数据库作为国产数据库第一股,业绩增长还是一如既往的猛&…

【零知识证明】通读Tornado Cash白皮书(并演示)

1 Protocol description 协议描述有以下功能: 1.insert:向智能合约中存入资金,通过固定金额的单笔交易完成,金额由N表示(演示时用1 ETH) 2.remove:从智能合约中提取资金,交易由收…

ncnn之yolov5(7.0版本)目标检测pnnx部署

一、pnxx介绍与使用 pnnx安装与使用参考: https://github.com/pnnx/pnnxhttps://github.com/Tencent/ncnn/wiki/use-ncnn-with-pytorch-or-onnxhttps://github.com/Tencent/ncnn/tree/master/tools/pnnx 支持python的首选pip,否则就源码编译。 pip3 …

Webpack打包常见问题及优化策略

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介Webpack打包常见问题及优化策略1. 引言2. Webpack打包常见问题2.1 打包时间过长问题描述主要原因 2.2 打包体积过大问题描述主要原因 2.3 依赖包版本冲突问题描述主要原因 2.4 动态导入和代码拆分问题问题描述主要原因 2.5 文件路径…

C++系列-继承方式

继承方式 继承的语法继承方式:继承方式的特点继承方式的举例 继承可以减少重复的代码。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。基类父类,派生类子类,派生类是在继承了基类的部分成员基础…

编程效率进阶:打造你专属的 Git 别名与 PyCharm 完美结合

在日常开发中,Git 是我们不可或缺的工具。掌握常用 Git 命令可以帮助我们更高效地进行版本控制,但随着命令的复杂性增加,记住所有命令变得困难。这时,Git 别名的设置就显得尤为重要。此外,许多开发者使用 PyCharm 作为…

【Android自定义控件】Kotlin实现滚动效果的数字加减控件

前言 因业务上的需要,在APP中点餐时要有商品数目增减操作,数目增减的过程中有翻动的动画效果展现。在Android中有多种方式可以实现,本篇文章记录通过自定义View结合控件的平移动画相结合来实现此需求。 需求分析 根据上图分析控件的实现过程以…

Pillow:一个强大的图像处理Python库

我是东哥,一个热衷于探索Python世界的自媒体人。今天,我要向大家介绍一个在Python图像处理领域中不可或缺的库——Pillow。如果你对图像处理感兴趣,或者正在寻找一个简单易用的库来处理图片,那么Pillow绝对是你的不二之选。 基本…

【前端】代码Git提交规范之限制非规范化提交信息

需求背景 在我们目前的前端项目中,我们采用 git 作为版本控制工具。使用 git 管理项目意味着我们经常需要提交代码。当我们执行 git commit -m "描述信息" 命令时,我们被要求提供一个描述信息。现在使用约定式规范提交,和Commitiz…

用纯 div 实现一个选中和未选中状态

在现代网页设计中&#xff0c;利用 div 元素自定义样式&#xff0c;可以让界面更具有吸引力。通过一些简单的 CSS 样式和布局技巧&#xff0c;可以轻松实现交互自然的选中和未选中效果&#xff0c;而不需要依赖传统的 input 元素。 举个 &#x1f330; HTML <body><…

金融POS三层密钥体系 银行卡网络安全系统

银行卡网络安全系统的三层密钥体系 银行卡网络安全系统的三层密钥体系为金融POS系统提供了高度安全的密钥管理。这个体系从上到下分为三层&#xff1a;系统密钥、主密钥、和工作密钥。每一层密钥都负责保护下一层密钥的安全性&#xff0c;确保系统整体的安全性。 三层密钥体系…

[图解]强化自测题解析-总纲(一)01 这属于什么工作流

1 00:00:00,680 --> 00:00:05,350 今天我们开始来解析一些强化自测题 1 00:00:01,100 --> 00:00:03,980 因为现在强化自测题本身 2 00:00:05,010 --> 00:00:06,720 我们出得已经比较多了 3 00:00:07,700 --> 00:00:12,570 自测题是用来测试我们的开发人员 4 00…

华为OD机试真题 - 字符串排序(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、…

QT教程-十六,QT中如何解析JSON

一&#xff0c;对json的初步认识 &#xff08;这里我们主要说明最常用的&#xff0c;以一个宏观的概念来说一下&#xff09;&#xff0c;json是一种数据格式&#xff0c;作用就是便于传递信息&#xff0c;我们可以按其结构和对应关系&#xff0c;拿到我们想要的数据。其主要结构…

【专题】2024全球电商消费电子市场研究报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37552 在如今数字经济蓬勃发展的大环境下&#xff0c;电商行业正以前所未有的迅猛之势&#xff0c;对全球商业版图进行着深刻的重塑。据 Stocklytics 发布的有关全球电商市场价值及未来增长趋势的专项调查报告显示&#xff0c;2024…

团队比赛时如何给小组记分?

在团队比赛中&#xff0c;确保每个小组的成绩和排名准确无误是组织者的重要任务。云分组小程序提供了一个便捷的“项目记分”功能&#xff0c;帮助您轻松管理比赛记分过程。以下是如何使用该功能进行团队比赛记分的详细步骤。一、准备工作 1. 打开云分组小程序。 2. 点击“我的…

SQLi-LABS靶场51-55通过攻略

less-51 1.判断注入点 ?sort1 加上单引号会引起报错 2.判断闭合方式 ?sort1-- 可以闭合成功 3.查询数据库名 使用报错注入查询 ?sort1 and updatexml(1,concat(1,database()),1)-- 4.查询数据库的所有表 ?sort1 and updatexml(1,concat(1,(select group_concat(tab…

中锂天源:卡车锂电池的领跑者

随着新能源产业的飞速发展&#xff0c;卡车锂电池市场也呈现出旺盛的生命力。在我国锂电池产业中&#xff0c;中锂天源作为一家专注于新能源锂电池研发与制造的企业&#xff0c;成为了卡车锂电池领域的佼佼者。 中锂天源卡车锂电池采用先进的锂电池技术&#xff0c;具有安全性…

Linux:网络编程之TCP/IP模型,UDP协议

一、OSI模型七层结构 OSI&#xff08;Open Systems Interconnection&#xff09;模型&#xff0c;即开放系统互连参考模型&#xff0c;是一个概念性框架&#xff0c;用于促进全球通信。它定义了网络通信的七层结构&#xff0c;每一层都执行特定的功能&#xff0c;并且每一层都使…

25考研人数预计下降?这一届考研有哪些新趋势?

2025年考研时间线&#xff1a; 2024年9月&#xff1a;公共课及各院校考试大纲公布&#xff1b; 2024年9月下旬&#xff1a;预报名&#xff1b; 2024年10月&#xff1a;正式报名&#xff1b; 2024年11月&#xff1a;线上/线下确认&#xff1b; 2024年12月中下旬&#xff1a…