使用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天以前的文件,我们可以设置存储桶的生命周期,自动删除过期文件。

添加生命周期规则

原文地址:http://blog.51cto.com/daibaiyang119/2146091

时间: 2024-10-20 20:40:37

使用Python boto3上传Windows EC2实例中的文件至S3存储桶中的相关文章

JavaWeb实现文件上传下载功能实例解析

转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件

web service上传参数代码实例

web service上传参数代码实例 这次做的项目用到webservice比较多,最开始在网上看的参考dome,发现都不行,后来发现安卓4.0以后有很大的不同,在做传参时,有些东西需要注意: 第一,命名空间:与服务器一致,命名空间后缀千万不要加“/”: 第二,方法名:与服务器一致: 第三,url:就是服务器地址不加后面的?=...: 代码如下: package com.example.web; import java.util.ArrayList; import org.ksoap2.Soap

JavaWeb实现文件上传下载功能实例解析 (好用)

转: 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上

python +selenium上传文件

python +selenium上传文件 分为2部分 1.是input标签 driver.find_element_by_name("upload").send_keys('C:\\test.txt') 2.非input标签 https://blog.csdn.net/weixin_42024694/article/details/80080629 原文地址:https://www.cnblogs.com/ljf520hj/p/12181098.html

上传 Zip 压缩档并即时解压缩文件保存到 Blob

Upload Zip file and unpack on the fly to Windows Azure Blob Upload Zip file and unpack on the fly to Windows Azure Blob 为求方便(懒惰的做法XD),我直接借用小朱在 边做边学 Windows Azure 应用程序开发基础 Part 2:开发 BLOB.Table 与 Queue 应用程序 一文中的例子来改写. 如图中红色框框:其中最大的不同是使用 DotNetZip 这个组件以

linux常见上传下载,以及跨机器文件传输命令总结。

linux常见上传下载,以及跨机器文件传输命令总结. 近来项目完成了,搭建测试环境时,需要下载一些软件,还有由于堡垒机的存在,多个服务器之间文件的相互拷贝,十分麻烦,特来总结了一下,加深印象. 最简单的君子善假于物也.如果你有SecureCRT.exe 软件最好了 直接在Secure上 1:一般用sz rz 即可,带有控制 编码的加-e 上传rz 下载sz . 这个需要仿shell终端如secure, linux需安装lrz lse(一般都有,没有和只好yum了) 2 :走ftp协议. 使用Se

如何清空文件上传控件里的选定文件(路径)

我又来扯鸡毛蒜皮了.有名言曰人生短得不够扯鸡毛蒜皮,但我的工作就是由无数的鸡毛蒜皮组成,如之奈何? 今天的鸡毛和蒜皮是:如何清空文件上传控件里的选定文件(路径)? 场景是酱紫的: 有一个上传控件和一个按钮,其中上传控件隐藏.点击按钮,触发上传控件点击事件,于是弹出文件选择对话框:选好文件后,于是触发了上传控件的onchange事件.在这个事件里,将文件上传. 有点装逼,就是隐藏了上传控件.这可能是出于界面简约的考虑.问题是,同一个文件不能连续上传2次,因为路径不变,没有触发onchange事件.

asp.net 上传XML,txt 直接读取文件内容

if (GetUploadFileContent.PostedFile.InputStream.Length < 1) { Msg.Text = "请选择文件";return; } string FileName = GetUploadFileContent.FileName;//上传文件文件名 string FilePath = GetUploadFileContent.PostedFile.FileName;//上传文件完整路径+文件名string fileExtName =

Struts2文件上传(基于表单的文件上传)

•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-FileUpload组件特点 –使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能 –能够全程控制上传内容 –能够对上传文件的大小.类型进行控制 •需要下载Common-FileUplaod框架地址(当然MyEclipce中Struts2支持里自带有这两个包): –http://jak