1. 程式人生 > >使用Python boto3上傳Windows EC2實例中的文件至S3存儲桶中

使用Python boto3上傳Windows EC2實例中的文件至S3存儲桶中

節點管理 ctime fault def part () oca pan tdi

一、創建終端節點

為什麽要創建終端節點,把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天以前的文件,我們可以設置存儲桶的生命周期,自動刪除過期文件。

技術分享圖片

添加生命周期規則

技術分享圖片

技術分享圖片

技術分享圖片

使用Python boto3上傳Windows EC2實例中的文件至S3存儲桶中