使用Python boto3上傳Windows EC2實例中的文件至S3存儲桶中
阿新 • • 發佈:2018-07-18
節點管理 ctime fault def part () oca pan tdi 一、創建終端節點 用戶\AppData\Local\Programs\Python\Python36”
為什麽要創建終端節點,把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\
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天以前的文件,我們可以設置存儲桶的生命周期,自動刪除過期文件。
添加生命周期規則
使用Python boto3上傳Windows EC2實例中的文件至S3存儲桶中