如何使用 Lambda 函數將檔案從一個 Amazon S3 儲存貯體複製到另一個儲存貯體?
2 分的閱讀內容
0
我想使用 AWS Lambda 函數將檔案從一個 Amazon Simple Storage Service (Amazon S3) 儲存貯體複製到另一個儲存貯體。
解決方法
請依照下列步驟建立 Lambda 函數,以將檔案從來源 Amazon S3 儲存貯體複製到目的地 S3 儲存貯體。
建立來源和目的地 Amazon S3 儲存貯體
**注意:**如果您已建立來源和目的地 S3 儲存貯體,請略過此步驟。
請完成下列步驟:
- 開啟 Amazon S3 主控台。
- 選擇建立儲存貯體。
- 對於儲存貯體名稱,輸入來源儲存貯體的名稱。
- 從 AWS 區域下拉式清單中,選擇您的 AWS 區域。
- 選擇建立儲存貯體。
- 針對目的地儲存貯體重複步驟 1-4。
如需詳細資訊,請參閱建立儲存貯體。
建立 Lambda 函數
請完成下列步驟:
-
在 Lambda 主控台中開啟函數頁面。
-
選擇建立函數,然後選擇從頭開始撰寫。
-
針對函數名稱,輸入函數的名稱。
-
從執行時期下拉式清單中,選擇 Python 3.11。
-
展開變更預設執行角色,然後選擇建立具有基本許可的新角色。
-
選擇建立函數。
-
選擇程式碼標籤,然後貼上下列 Python 程式碼:
import boto3import botocore import json import os import logging logger = logging.getLogger() logger.setLevel(logging.INFO) s3 = boto3.resource('s3') def lambda_handler(event, context): logger.info("New files uploaded to the source bucket.") key = event['Records'][0]['s3']['object']['key'] source_bucket = event['Records'][0]['s3']['bucket']['name'] destination_bucket = os.environ['destination_bucket'] source = {'Bucket': source_bucket, 'Key': key} try: response = s3.meta.client.copy(source, destination_bucket, key) logger.info("File copied to the destination bucket successfully!") except botocore.exceptions.ClientError as error: logger.error("There was an error copying the file to the destination bucket") print('Error Message: {}'.format(error)) except botocore.exceptions.ParamValidationError as error: logger.error("Missing required parameters while calling the API.") print('Error Message: {}'.format(error))
**注意:**從 Lambda 函數接收的事件物件中尋找 source_bucket 名稱。您可以將 destination_bucket 名稱儲存為環境變數。
-
選擇部署。
Lambda 會建立一個執行角色,向函數授予將日誌上傳至 Amazon CloudWatch 的許可。如需詳細資訊,請參閱使用主控台建立 Lambda 函數。
為 Lambda 函數建立 Amazon S3 觸發條件
請完成下列步驟:
- 在 Lambda 主控台中開啟函數頁面。
- 在函數中,選擇 Lambda 函數。
- 在函數概觀中,選擇新增觸發條件。
- 從觸發條件組態下拉式清單中,選擇 S3。
- 在儲存貯體中,輸入來源儲存貯體的名稱。
- 從事件類型下拉式清單中,選擇所有物件建立事件。
**注意:**將此步驟設定為使用 POST、PUT 或分段上傳事件類型以上傳物件。 - 選取我確認不建議同時對輸入和輸出使用相同的 S3 儲存貯體協議,然後選擇新增。
如需詳細資訊,請參閱教學課程: 使用 Amazon S3 觸發條件調用 Lambda 函數。
為 Lambda 函數的執行角色提供 IAM 許可
若要將檔案複製到目的地 S3 儲存貯體,請為 Lambda 函數的執行角色新增 AWS Identity and Access Management (IAM) 許可。使用類似下列資源型政策的政策:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "putObject", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::destination-s3-bucket/*" ] }, { "Sid": "getObject", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::source-s3-bucket/*" ] } ] }
注意:
- 將 destination-s3-bucket 取代為您的 S3 目的地儲存貯體,並將 source-s3-bucket 取代為您的 S3 來源儲存貯體。
- 將資源 ARN 末尾的 /* 取代為您的環境所需的字首值以限制許可。
- 最佳實務是授予最低權限許可以執行任務。
- 若要複製具有物件標籤的物件,執行角色必須具有 s3:GetObjectTagging 和 s3:PutObjectTagging 許可。您必須對來源儲存貯體中的來源物件具有 s3:GetObjectTagging 許可,而對目的地儲存貯體中的物件具有 s3:PutObjectTagging 許可。
如需詳細資訊,請參閱授予 AWS 服務的函數存取權。
相關資訊
AWS 官方已更新 6 個月前
沒有評論
相關內容
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- 已提問 3 個月前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 6 個月前
- AWS 官方已更新 9 個月前