如何使用 Python 上傳和下載 AWS S3 檔案?
Amazon Web Services (AWS) 提供各種服務,例如 EC2、S3、AWS Lambda 和 Amazon SageMaker。公司使用這些 Amazon 服務來儲存其資料庫並部署其模型。在本文中,我們將討論簡單儲存服務 (S3) 並解釋如何從 Amazon S3 上傳和下載檔案。
AWS S3
簡單儲存服務 (S3) 用於在雲中儲存各種檔案。它安全、簡單且經濟高效。在 S3 中,有儲存檔案的儲存桶,例如影像、資料夾、影片和音訊檔案。我們可以在 S3 上以不同的方式儲存、下載和上傳檔案。
- AWS SDK - 它是一個標準開發工具包。它是以程式設計方式控制 AWS 的一種方法。
- AWS CLI - 它是控制 AWS 的命令列介面。我們將其用於客戶端-伺服器通訊。
- AWS 控制檯 - 它是一個圖形使用者介面。我們使用它來使用按鈕進行上傳和下載。非常簡單。
我們可以透過不同的方式在 AWS S3 上下載和上傳檔案,但本文將討論使用 Python 程式碼的最簡單方法。以下是一些在此小型專案中工作的先決條件。如果您不瞭解這些工具和技術,可以在 TutorialsPoint 上閱讀相關內容。您的系統上應該安裝了 Python 3 和 VS Code。
您還需要一個 AWS 賬戶。請注意,AWS 提供付費服務,但在某些條件下,您可以註冊並免費使用這些服務。如果您沒有 AWS 賬戶,您可以使用 此連結 (https://aws.amazon.com/free) 註冊並登入。請注意,即使免費使用 AWS 服務,您也需要輸入您的信用卡或簽帳金融卡資訊。使用 AWS 服務時應謹慎,因為在不滿足某些條件時可能會產生費用。
建立並登入您的 AWS 賬戶後,搜尋並點選 S3。
然後,在 S3 內建立一個儲存桶。
現在,選擇儲存桶的名稱。在本教程中,我們已選擇“tutorialspoint-bucket”作為儲存桶的名稱。
現在,如果您希望備份此儲存桶,請點選儲存桶版本控制下的啟用複選框。否則,將其保留為預設設定。我們選擇了停用選項,因為我們只希望在本教程中備份此儲存桶。我們將在教程結束後刪除此“tutorialspoint-bucket”。
點選建立儲存桶按鈕以建立此儲存桶。
您的儲存桶將被建立並在那裡列出。我們將使用此儲存桶來儲存我們的檔案或資料,我們可以使用 Python 程式碼從那裡下載或上傳資料。最初,您的儲存桶將為空。
使用 Python 將檔案上傳到 AWS S3
我們將使用 VS Code 來編寫我們的 Python 程式碼。我們將使用 Boto3 包來連線 AWS 和本地 Python 程式碼。Boto3 是 Python 中用於直接與 AWS 服務互動的 SDK。首先,我們將為此專案在 VS Code 中建立一個環境。使用以下命令建立環境
python -m venv venv
這將建立一個 venv 資料夾。使用以下命令啟用此環境
venv\Scripts\activate
現在,安裝 boto3 以直接與 AWS 服務互動。使用以下 pip 命令在此環境中安裝它
pip install boto3
現在,您可以在 Python 程式碼中匯入並使用它。
生成訪問金鑰和金鑰
如果您想授予其他人許可權,則需要使用 IAM(身份和訪問管理)建立金鑰和訪問金鑰。由於我們想允許此 Python 程式碼訪問此儲存桶以上傳和下載檔案,因此我們將在 IAM 儀表板下建立一個使用者以生成訪問金鑰和金鑰。
搜尋 IAM 並點選它。
點選 IAM 儀表板左側的使用者。
點選建立使用者按鈕以建立使用者。
為您的使用者命名。我們已選擇“tutorialspoint-user”。然後點選下一步。
點選“直接附加策略”。然後在給定的搜尋框中搜索“S3”,並點選“AmazonS3FullAccess”複選框以授予您的 Python 程式碼完全許可權。
點選下一步。
點選建立使用者按鈕。
您的使用者“tutorialspoint-user”將被建立並在使用者下列出。
點選此使用者以建立其訪問金鑰,然後點選建立訪問金鑰。
點選“原生代碼”,因為我們的程式碼是本地的(系統)。請注意,如果您的程式碼位於另一臺伺服器上,則需要點選命令列介面 (CLI)。但在這裡,我們將點選原生代碼,然後點選“確認”複選框以接受它,然後點選下一步。
提供您的描述標籤值。我們已選擇“tutorialspoint”作為其描述標籤值。然後點選建立訪問金鑰。
它將為此使用者(即 tutorialspoint-user)建立訪問金鑰和金鑰。請注意,您不應與任何人共享這些值,因為這些是金鑰。否則,其他人可能會濫用它,並且亞馬遜會向您收取鉅額費用,因此請謹慎使用。我們將在 Python 程式碼中使用這些金鑰在 AWS S3 上上傳和下載檔案。我們將在本教程結束後從 AWS 中刪除這些金鑰 -
現在在上面的搜尋中搜索 S3 並點選它,然後點選您的儲存桶。此儲存桶中不存在任何檔案和資料夾 -
現在,您可以使用以下程式碼檢查此儲存桶中是否存在任何檔案和資料夾 -
import boto3 # Create S3 resource s3 = boto3.resource( service_name='s3', region_name='ap-south-1', aws_access_key_id='your-created-access-key', aws_secret_access_key='your-created-secret-access-key' ) # Specify the bucket name bucket_name = 'tutorialspoint-bucket' # Access the bucket bucket = s3.Bucket(bucket_name) # Print all files and folders print(f"Files and folders in the bucket '{bucket_name}':") for obj in bucket.objects.all(): print(obj.key)
由於最初不存在任何檔案,因此輸出將為空 -
現在,將您的影像或檔案放在程式碼資料夾中,以便上傳到 AWS S3。我們將使用“tutorialspoint-logo.png”影像上傳到我們的“tutorialspoint-bucket”儲存桶中 -
您可以使用以下程式碼將您的檔案上傳到您的 AWS S3 儲存桶中 -
import boto3 # Create S3 resource s3 = boto3.resource( service_name='s3', region_name='ap-south-1', aws_access_key_id='your-created-access-key', aws_secret_access_key='your-created-secret-access-key' ) # Specify the bucket name and file details bucket_name = 'tutorialspoint-bucket' file_name = 'tutorialspoint-logo.png' # Local file to upload s3_key = 'tutorialspoint-logo.png' # S3 object key (path in the bucket) # Upload the file try: s3.Bucket(bucket_name).upload_file(Filename=file_name, Key=s3_key) print(f"'{file_name}' has been uploaded to bucket '{bucket_name}' as '{s3_key}'.") except Exception as e: print(f"Error uploading file: {e}")
我們已將 tutorialspoint-logo.png 影像上傳到我們的“tutorialspoint-bucket”儲存桶中 -
您可以進入 AWS S3 中的儲存桶,並檢查您的檔案是否已成功上傳 -
使用 Python 從 AWS S3 下載檔案
現在,我們將使用 Python 程式碼將此相同的上載檔案下載到我們的本地機器上 -
import boto3 # Create S3 resource s3 = boto3.resource( service_name='s3', region_name='ap-south-1', aws_access_key_id='your-created-access-key', aws_secret_access_key='your-created-secret-access-key' ) # Specify the bucket name and file details bucket_name = 'tutorialspoint-bucket' s3_key = 'tutorialspoint-logo.png' # S3 object key (path in the bucket) download_path = 'downloaded-tutorialspoint-logo.png' # Local path to save the file # Download the file try: s3.Bucket(bucket_name).download_file(Key=s3_key, Filename=download_path) print(f"File '{s3_key}' has been downloaded from bucket '{bucket_name}' to local path '{download_path}'.") except Exception as e: print(f"Error downloading file: {e}")此程式碼將從您的 AWS S3 儲存桶(即 tutorialspoint-bucket)下載您的檔案(即 tutorialspoint-logo.png)到您的本地 -
它將在本地下載檔案,如您所見,程式碼資料夾中存在“downloaded-tutorialspoint-logo.png”。
結論
在本文中,我們討論瞭如何使用 Python 程式碼和 VS code 將檔案從 AWS S3 上傳和下載到本地。我們使用了 boto3 來連線 AWS S3 和本地 Python 程式碼。我們已經逐步進行了討論,以便任何人都可以輕鬆理解。
常見問題解答(常見問題)
簡單儲存服務 (S3) 是 Amazon AWS 基於雲的儲存平臺,我們可以在 AWS S3 雲平臺上上傳和下載我們的檔案和資料。我們使用 AWS S3 內部的儲存桶來上傳和下載檔案和資料。
答:是的,AWS 在其條件下也為您提供免費套餐。您可以使用此連結建立和使用其免費套餐 - https://aws.amazon.com/free
有多種方法可以從 AWS S3 上傳和下載。您可以在 Python 程式碼中使用 boto3 庫,並在程式碼中提供訪問金鑰和金鑰。這是使用 Python 從 AWS S3 上傳和下載檔案的一種簡單方法。