使用Python boto3上传Windows EC2实例中的文件至S3存储桶中
一、创建终端节点
为什么要创建终端节点,把VPC和S3管理起来呢?如果不将VPC和S3通过终端节点管理起来,那么VPC中EC2实例访问S3存储桶是通过公共网络的;一旦关联起来,那么VPC中EC2实例访问S3存储桶走的就是内部网络。好处有两个:1. 走内部网络就不会产生流量费用;2. 走内部网络速度快,不会因为网络原因导致我们的Python脚本产生异常。
VPC->终端节点->创建终端节点->将VPC和S3关联->关联子网
二、在Windows中安装Python3编译器以及boto3库
1. 下载地址:https://www.python.org/
2. 双击安装,默认安装路径“C:\Users\用户\AppData\Local\Programs\Python\Python36”
3. 配置环境变量
4. 安装boto3开发库(环境变量配好即可使用pip命令)
三、生成AWS IAM用户密钥并配置
1. IAM->用户->选择具有访问S3权限的用户->安全证书->创建访问安全密钥->下载密钥文件到本地
2. 在Windows实例上配置AWS密钥认证
a) 创建~/.aws/credentials 文件,文件内容如下: [default] aws_access_key_id = xxxxxx aws_secret_access_key = xxxxxx b) 创建~/.aws/config 文件,文件内容如下: [default] region=cn-north-1
三、编辑Python3脚本,脚本名为“s3_upload.py”
import os import datetime import boto3 import logging from boto3.s3.transfer import TransferConfig logging.basicConfig(level=logging.INFO, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='E:\\xxx\\xxx\\xxx\\aws_upload.log', filemode='a') delta = datetime.timedelta(days=2) now = datetime.datetime.now() s3 = boto3.client('s3') bucket_name = 'daily-backup' file_dir='E:\\xxx\\xxx\\xxx' GB = 1024 ** 3 # 单个文件大于10GB,需要设置此值 config = TransferConfig(multipart_threshold=5 * GB) os.chdir(file_dir) file_list = os.listdir() for file in file_list: # 只上传zip文件 if file.endswith('.zip'): # 上传两天前生成的文件 ctime = datetime.datetime.fromtimestamp(os.path.getctime(file)) if ctime < (now-delta): try: s3.upload_file(file, bucket_name, file, Config=config) except Exception as e: logging.error(e) logging.error("%s upload failed." % file) else: # 上传成功则删除本地文件 logging.info("%s upload successful." % file) os.remove(file)
四、测试并安排定时任务
1. 在Windows CMD命令行中手动运行刚刚编辑的python脚本
2. 如果成功,则编辑Windows定时任务,每天定时上传本地目录下的文件至S3存储桶中
五、设置S3存储桶生命周期
对于上传到S3存储桶中的文件,我们想定期删除30天以前的文件,我们可以设置存储桶的生命周期,自动删除过期文件。
添加生命周期规则
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python实现腾讯云CDB备份文件自动上传到COS
一、背景 需求:目前遇到的客户需求为将腾讯云CDB备份文件自动上传到腾讯云COS内,在此抛砖引玉,还有很多类似的需求均可以采用此类方法解决,线下IDC数据文件备份至云端COS内,或根据文件下载地址url将文件上传至COS内。 思路:首先获取到CDB的备份下载url,通过COS的API上传文件,大佬如有更好的方法欢迎一块讨论。 二、技术细节 COS:COS有API同时有SDK,这就很方便我们来通过Python对COS进行各类操作,COS SDK for Python CDB:CDB有API但是CDB的查询备份下载没有对应的SDK,此时只能通过API来进行获取,腾讯云API的签名很复杂,要进行:构造参数字典->对dict排序->拼接sign->对sign编码->拼接完成最终url->完成调用,签名方法,查询备份API requirements: cos-python-sdk-v5==1.5.2 requests==2.19.1 tencentcloud-sdk-python==3.0.15 urllib3==1.23 文件目录结构 三、代码 github地址 ...
- 下一篇
从构建分布式秒杀系统聊聊WebSocket推送通知
前言 秒杀架构到后期,我们采用了消息队列的形式实现抢购逻辑,那么之前抛出过这样一个问题:消息队列异步处理完每个用户请求后,如何通知给相应用户秒杀成功? 场景映射 首先,我们举一个生活中比较常见的例子:我们去银行办理业务,一般会选择相关业务打印一个排号纸,然后就可以坐在小板凳上玩着手机,等待被小喇叭报号。当小喇叭喊到你所持有的号码,就可以拿着排号纸去柜台办理自己的业务。 这里,假设当我们取排号纸的时候,银行根据时间段内的排队情况,比较人性化的提示用户:排队人数较多,您是否继续等待?否的话我们可以换个时间段再来办理。 由此我们把生活场景映射到真实的秒杀业务逻辑中来: 我们可以把柜台比喻成商品下单处理逻辑单元 拿到排号纸说明你进入相应商品处理队列 拿到排号纸的请求直接返回前台,提示用户抢购进行中 排号纸进入队列后,等待商品业务处理逻辑 小喇叭叫到自己的排号相当于服务端通知用户秒杀成功,这时候可以进行支付逻辑 那些拿不到票号的同学,相当于队列已满直接返回秒杀失败 解决方案 通过上面的场景,我们很容易能够想到一种方案就是服务端通知,那么如何做到服务端异步通知的呢?下面,主角开始登场了,就是我们的...
相关文章
文章评论
共有0条评论来说两句吧...