教學課程:使用 S3 Object Lambda 轉換應用程式的資料 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:使用 S3 Object Lambda 轉換應用程式的資料

將資料存放至 Amazon S3 時,您可以輕鬆地進行共用,以供多個應用程式使用。不過,每個應用程式可能有唯一的資料格式需求,而且可能需要針對特定使用案例修改或處理您的資料。例如,電子商務應用程式建立的資料集可能會包含個人身分識別資訊 (PII)。當處理相同的資料以進行分析時,不需要此 PII,而且應該加以修訂。不過,如果同一個資料集用於行銷活動,您可能需要使用其他詳細資訊 (例如來自客戶忠誠度資料庫的資訊) 來豐富資料。

利用 S3 Object Lambda,您可以新增自己的程式碼,以處理從 S3 擷取的資料,然後再將其傳回應用程式。具體而言,您可以設定 AWS Lambda 函數並將其附加至 S3 物件 Lambda 存取點。當應用程式透過 S3 Object Lambda 存取點傳送標準 S3 GET 請求時,則會叫用指定的 Lambda 函數,以處理透過支援 S3 存取點從 S3 儲存貯體擷取的任何資料。然後,S3 Object Lambda 存取點會將轉換的結果傳回至應用程式。您可以編寫和執行自己的自訂 Lambda 函數,從而根據您的特定使用案例,量身定製 S3 Object Lambda 資料轉換,並且全程無需對應用程式進行任何變更。

這是 S3 Object Lambda 工作流程圖。
目標

在本教學課程中,您將學習如何將自訂程式碼新增至標準 S3 GET 請求,以修改從 S3 擷取的請求物件,如此一來,物件方能符合請求用戶端或應用程式的需求。具體而言,您將學習如何透過 S3 Object Lambda 將存放在 S3 中的原始物件中的所有文字轉換為大寫。

必要條件

在開始本教學課程之前,您必須擁 AWS 帳戶 有可以使用正確權限的 AWS Identity and Access Management (IAM) 使用者身分登入。您還必須安裝 Python 3.8 版或更新版本。

在您的 AWS 帳戶 (主控台) 建立一個擁有許可的 IAM 使用者

您可以為該教學課程建立 IAM 使用者。若要完成本教學課程,您的 IAM 使用者必須附加下列 IAM 政策,才能存取相關 AWS 資源並執行特定動作。如需如何建立 IAM 使用者的詳細資訊,請參閱《IAM 使用者指南》中的建立 IAM 政策 (主控台)

您的 IAM 使用者需要下列政策:

注意

為了簡單起見,本教學課程會建立和使用 IAM 使用者。完成本教學課程後,請記得 刪除 IAM 使用者。針對生產使用,我們建議您遵循《IAM 使用者指南》中的 IAM 中的安全最佳實務。其中一項最佳實務是,要求人類使用者搭配身分提供者使用聯合功能,以便使用暫時性憑證存取 AWS 。另一項最佳實務要求工作負載使用臨時性憑證和 IAM 角色來存取 AWS。若要瞭解如 AWS IAM Identity Center 何使用建立具有臨時登入資料的使用者,請參閱《使用AWS IAM Identity Center 者指南》中的入門

本教學課程也使用完整存取的 AWS 受管政策。為供生產使用,我們建議您改為僅授予使用案例所需的最低許可,以符合安全最佳實務

在您的本機機器上安裝 Python 3.8 或更新版本

使用以下程序在您的本機機器上安裝 Python 3.8 或更新版本。如需安裝說明的詳細資訊,請參閱《Python 入門指南》中的下載 Python

  1. 開啟您的本機終端機或 shell 並執行以下命令,以確定是否已經安裝 Python,如果是,那安裝的是哪個版本。

    python --version
  2. 如果您沒有 Python 3.8 或更新版本,請下載使用您的本機機器的 Python 3.8 的官方安裝程式

  3. 按兩下下載的檔案來執行安裝程式,然後依照步驟完成安裝。

    若為 Windows 使用者,利用安裝精靈選擇 Add Python 3.X to PATH (新增 Python 3.X 至 PATH),然後選擇 Install Now (立即安裝)。

  4. 透過關閉並重新開啟終端機來重新啟動。

  5. 執行以下命令,以驗證已正確安裝 Python 3.8 或更新版本。

    若為 macOS 使用者,請執行此命令:

    python3 --version

    若為 Windows 使用者,請執行此命令:

    python --version
  6. 執行下列命令,以來驗證已安裝 pip3 套件管理工具。如果您在命令回應中看到 pip 版本編號和 python 3.8 或更新版本,則意味著已成功安裝 pip3 套件管理工具。

    pip --version

步驟 1:建立 S3 儲存貯體

建立儲存貯體來存放您計劃要轉換的原始資料。

建立儲存貯體
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  3. 選擇 Create bucket (建立儲存貯體)。

    Create bucket (建立儲存貯體) 頁面隨即開啟。

  4. 針對 Bucket name (儲存貯體名稱),輸入儲存貯體的名稱 (例如 tutorial-bucket)。

    如需有關在 Amazon S3 中的命名儲存貯體的詳細資訊,請參閱 儲存貯體命名規則

  5. 在「區域」中,選擇您 AWS 區域 要儲存貯體的位置。

    如需有關儲存貯體區域的詳細資訊,請參閱 儲存貯體概觀

  6. 針對 Block Public Access settings for this bucket (此儲存貯體的封鎖公開存取設定),將保留預設設定 (已啟用封鎖所有公開存取)。

    除非您需要針對使用案例關閉一或多個設定,否則建議您將所有封鎖公開存取設定保持啟用狀態。如需封鎖公開存取的詳細資訊,請參閱 封鎖對 Amazon S3 儲存體的公開存取權

  7. 對於其他設定,請保留預設值。

    (選用) 如果您想要為您的特定使用案例設定其他儲存貯體設定,請參閱 建立儲存貯體

  8. 選擇建立儲存貯體

步驟 2:將檔案上傳至 S3 儲存貯體

上傳文字檔案至 S3 儲存貯體。此文字檔案包含您將在本教學課程稍後部分轉換為大寫的原始資料。

例如,您可以上傳 tutorial.txt 檔案,其中包含以下文字:

Amazon S3 Object Lambda Tutorial: You can add your own code to process data retrieved from S3 before returning it to an application.
上傳檔案至儲存貯體
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  3. Buckets (儲存貯體) 清單中,選擇您在步驟 1 中建立的且要將檔案上傳至的儲存貯體的名稱 (例如,tutorial-bucket)。

  4. 在儲存貯體的物件索引標籤上,選擇上傳

  5. Upload (上傳) 頁面上的 Files and folders (檔案和資料夾) 下,選擇 Add files (新增檔案)。

  6. 選擇要上傳的檔案,然後選擇 Open (開啟)。舉例而言,您可以上傳之前提及的 tutorial.txt 檔案範例。

  7. 選擇上傳

步驟 3:建立 S3 存取點

若要使用 S3 Object Lambda 存取點來存取和轉換原始資料,您必須建立 S3 存取點,並將其與您在步驟 1 中建立的 S3 儲存貯體建立關聯。存取點必須與您要轉換 AWS 區域 的物件位於相同的位置。

在本教學課程稍後的部分,您將使用此存取點做為您 Object Lambda 存取點的支援存取點。

建立存取點
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Access Points (存取點)。

  3. Access Points (存取點) 頁面上,選擇 Create access point (建立存取點)。

  4. Access point name (存取點名稱) 欄位中,輸入存取點的名稱 (例如,tutorial-access-point)。

    如需存取點命名的詳細資訊,請參閱「命名 Amazon S3 存取點的規則」。

  5. Bucket name (儲存貯體名稱) 欄位,輸入您在步驟 1 中建立的儲存貯體的名稱 (例如,tutorial-bucket)。S3 將存取點連接至此儲存貯體。

    (選用) 您可以選擇 Browse S3 (瀏覽 S3) 來瀏覽並搜尋您帳戶中的儲存貯體。如果您選擇 Browse S3 (瀏覽 S3),請先選擇所需的儲存貯體,然後選擇 Choose path (選擇路徑),系統即會在 Bucket name (儲存貯體名稱) 欄位中填入該儲存貯體的名稱。

  6. 針對 Network origin (網路來源),選擇 Internet (網際網路)。

    如需存取點網路來源的詳細資訊,請參閱「建立受限於 Virtual Private Cloud 的存取點」。

  7. 依預設,存取點的所有封鎖公開存取設定都會開啟。我們建議您將封鎖所有公開存取保持啟用的狀態。

    如需詳細資訊,請參閱 管理存取點的公開存取

  8. 對於所有其他存取點設定,保留預設設定。

    (選用) 您可以修改存取點設定,以支援您的使用案例。在本教學課程中,我們建議您保留預設設定。

    (選用) 如果您需要管理存取點的存取,您可以指定存取點政策。如需詳細資訊,請參閱 存取點政策範例

  9. 選擇 Create access point (建立新的存取點)

步驟 4:建立 Lambda 函數

若要轉換原始資料,請建立一個 Lambda 函數,以與您的 S3 Object Lambda 存取點搭配使用。

使用虛擬環境撰寫 Lambda 函數程式碼並建立部署套件

  1. 在本機機器上,為虛擬環境建立資料夾名稱為 object-lambda 的資料夾,以便用於本教學課程的稍後部分。

  2. object-lambda 資料夾中,建立具有 Lambda 函數的檔案,而該函數會將原始物件中的所有文字變更為大寫。例如,您可以使用以 Python 撰寫的下列函數。將此函數儲存在名為 transform.py 的檔案中。

    import boto3 import requests from botocore.config import Config # This function capitalizes all text in the original object def lambda_handler(event, context): object_context = event["getObjectContext"] # Get the presigned URL to fetch the requested original object # from S3 s3_url = object_context["inputS3Url"] # Extract the route and request token from the input context request_route = object_context["outputRoute"] request_token = object_context["outputToken"] # Get the original S3 object using the presigned URL response = requests.get(s3_url) original_object = response.content.decode("utf-8") # Transform all text in the original object to uppercase # You can replace it with your custom code based on your use case transformed_object = original_object.upper() # Write object back to S3 Object Lambda s3 = boto3.client('s3', config=Config(signature_version='s3v4')) # The WriteGetObjectResponse API sends the transformed data # back to S3 Object Lambda and then to the user s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token) # Exit the Lambda function: return the status code return {'status_code': 200}
    注意

    上述範例 Lambda 函數將整個請求的文件載入到記憶體中,然後予以轉換並將其傳回給用戶端。或者,您可以從 S3 串流對象,以避免將整個文件載入到記憶體中。處理大型物件時,此方法非常有用。如需使用 Object Lambda 存取點串流回應的詳細資訊,請參閱 使用 Lambda 中的 GetObject 請求 中的串流範例。

    當您撰寫與 S3 Object Lambda 存取點搭配使用的 Lambda 函數時,函數會以 S3 Object Lambda 提供給 Lambda 函數的輸入事件內容為基礎。事件內容提供了從 S3 Object Lambda 傳遞給 Lambda 事件中提出之請求的相關資訊。它會包含您用來建立 Lambda 函數的參數。

    用來建立前述 Lambda 函數的欄位如下所示:

    getObjectContext 的欄位意指連線至 Amazon S3 和 S3 Object Lambda 的輸入和輸出詳細資訊。其欄位如下:

    • inputS3Url – Lambda 函數可用來從支援存取點下載原始物件的預先簽章 URL。透過使用預先簽章 URL,Lambda 函數不需要擁有 Amazon S3 讀取許可即可擷取原始物件,而且只能存取每次叫用處理的物件。

    • outputRoute – 當 Lambda 函數呼叫 WriteGetObjectResponse 以傳回轉換的物件時,會新增至 S3 Object Lambda URL 的路由字符。

    • outputToken – 當傳回轉換的物件時,S3 Object Lambda 用來將 WriteGetObjectResponse 呼叫與原始呼叫者比對的字符。

    如需事件內容中的所有欄位的詳細資訊,請參閱 事件內容格式和用量撰寫 S3 Object Lambda 存取點的 Lambda 函數

  3. 在本機終端機中,輸入下列命令來安裝 virtualenv 套件:

    python -m pip install virtualenv
  4. 在您的本機終端機中,開啟您之前建立的 object-lambda 資料夾,然後輸入下列命令以建立並初始化稱為 venv 的虛擬環境。

    python -m virtualenv venv
  5. 如要啟用虛擬環境,請輸入下列命令來從環境的檔案局中執行 activate 檔案:

    若為 macOS 使用者,請執行此命令:

    source venv/bin/activate

    若為 Windows 使用者,請執行此命令:

    .\venv\Scripts\activate

    現在,您的命令提示字元會變更,以顯示 (venv),表示虛擬環境作用中。

  6. 若要安裝所需的程式庫,請在 venv 虛擬環境中逐行執行下列命令。

    這些命令會安裝 lambda_handler Lambda 函數相依性的更新版本。這些相依性是 AWS SDK for Python (Boto3) 和請求模組。

    pip3 install boto3
    pip3 install requests
  7. 若要停用虛擬環境,請執行下列命令:

    deactivate
  8. 若要在 object-lambda 目錄根中將含有已安裝程式庫的部署套件建立為名為 lambda.zip.zip 檔案,請在本機終端機中逐行執行以下命令。

    提示

    下列命令可能需要調整,才能在您的特定環境中運作。例如,程式庫可能會出現在 site-packagesdist-packages 中,並且第一個資料夾可能是 liblib64。此外,python 資料夾可能會使用不同的 Python 版本命名。若要尋找特定套件,使用 pip show 命令。

    若為 macOS 使用者,請執行這些命令:

    cd venv/lib/python3.8/site-packages
    zip -r ../../../../lambda.zip .

    若為 Windows 使用者,請執行這些命令:

    cd .\venv\Lib\site-packages\
    powershell Compress-Archive * ../../../lambda.zip

    最後一個命令會將部署套件儲存至 object-lambda 目錄的根目錄。

  9. 將函數程式碼檔案 transform.py 新增至部署套件的根目錄。

    若為 macOS 使用者,請執行這些命令:

    cd ../../../../
    zip -g lambda.zip transform.py

    若為 Windows 使用者,請執行這些命令:

    cd ..\..\..\
    powershell Compress-Archive -update transform.py lambda.zip

    完成此步驟後,您應具有下列目錄結構:

    lambda.zip$ │ transform.py │ __pycache__ | boto3/ │ certifi/ │ pip/ │ requests/ ...

使用執行角色建立 Lambda 函數 (主控台)

  1. 請登入 AWS Management Console 並開啟 AWS Lambda 主控台,網址為 https://console.aws.amazon.com/lambda/

  2. 在左側導覽窗格中,選擇 Functions (函數)。

  3. 選擇建立函數

  4. 選擇 Author from scratch (從頭開始撰寫)。

  5. 基本資訊下,請執行下列動作:

    1. 針對 函數名稱 ,請輸入 tutorial-object-lambda-function

    2. 針對 Runtime (執行時間),選擇 Python 3.8 或更新版本。

  6. 展開 Change default execution role (變更預設執行角色) 區段。在 Execution role (執行角色) 下,選擇 Create a new role with basic Lambda permissions (建立具備基本 Lambda 許可的新角色)。

    在本教學課程稍後的步驟 5 中,您將 AmazonS3 附加ObjectLambdaExecutionRolePolicy到此 Lambda 函數的執行角色。

  7. 將其餘設定保持為預設值。

  8. 選擇建立函數

使用 .zip 檔案封存部署 Lambda 函數程式碼,並設定 Lambda 函數 (主控台)

  1. https://console.aws.amazon.com/lambda/ 的 AWS Lambda 主控台中,選擇左側導覽窗格中的「函數」。

  2. 選擇您之前建立的 Lambda 函數 (例如,tutorial-object-lambda-function)。

  3. 在 Lambda 函數的詳細資訊頁面上,選擇 Code (程式碼) 標籤。在 Code Source (程式碼來源) 區段中,選擇 Upload from (上傳來源),然後選擇 .zip file (.zip 檔案)。

  4. 選擇 Upload (上傳) 以選取您的本機 .zip 檔案。

  5. 選擇您之前建立的 lambda.zip 檔案,然後選擇 Open (開啟)。

  6. 選擇儲存

  7. Runtime settings (執行時間設定) 區段中,選擇 Edit (編輯)。

  8. Edit runtime settings (編輯執行時間設定) 頁面上,確認 Runtime (執行時間) 已設定為 Python 3.8 或更新版本。

  9. 若要告知 Lambda 執行時間要叫用 Lambda 函數程式碼中的處理常式方法,請針對 Handler (處理常式) 輸入 transform.lambda_handler

    當您以 Python 設定函式時,處理常式的設定值就是檔案名稱,以及已匯出的處理常式模組名稱,並且以點分隔。例如,transform.lambda_handler 會呼叫 transform.py 檔案中定義的 lambda_handler 方法。

  10. 選擇儲存

  11. (選用) 在 Lambda 函數的詳細資訊頁面上,選擇 Configuration (組態) 標籤。在左側導覽窗格中,選擇 General configuration (一般組態),然後選擇 Edit (編輯)。在 Timeout (逾時) 欄位中,輸入 10 秒。將其餘設定設定為預設值,然後選擇 Save (儲存)。

    Timeout (逾時) 是 Lambda 在停用函數前允許函數執行叫用的時間。預設為 3 秒。S3 Object Lambda 使用的 Lambda 函數的持續時間上限為 60 秒。定價是根據設定的記憶體數量和程式碼執行的時間量而定。

步驟 5:為 Lambda 函數的執行角色設定 IAM 政策

若要啟用 Lambda 函數,將自訂資料和回應標頭提供給 GetObject 呼叫者,您 Lambda 函數的執行角色必須具有 IAM 許可,才能呼叫 WriteGetObjectResponse API。

若要將 IAM 政策連接到您的 Lambda 函數角色

  1. https://console.aws.amazon.com/lambda/ 的 AWS Lambda 主控台中,選擇左側導覽窗格中的「函數」。

  2. 選擇您在步驟 4 中建立的函數 (例如,tutorial-object-lambda-function)。

  3. 在 Lambda 函數的詳細資訊頁面上,選擇 Configuration (組態) 標籤,然後在左側導覽窗格選擇Permissions (許可)。

  4. Execution role (執行角色),選擇 Role name (角色名稱)。開啟 IAM 主控台。

  5. 在 IAM 主控台的 Summary (摘要) 頁面上,針對您 Lambda 函數的執行角色,選擇 Permissions (許可) 索引標籤。然後,從 Add Permissions (新增許可) 功能表中選擇 Attach policies (附加政策)。

  6. Attach permissions (連接許可) 頁面的搜尋方塊中,輸入 AmazonS3ObjectLambdaExecutionRolePolicy,以篩選政策清單。選取 AmazonS3 ObjectLambdaExecutionRolePolicy 政策名稱旁邊的核取方塊。

  7. 選擇連接政策

步驟 6:建立 S3 Object Lambda 存取點

S3 Object Lambda 存取點提供了直接從 S3 GET 請求叫用 Lambda 函數的靈活性,以便函數可以處理從 S3 存取點擷取的資料。建立及設定 S3 Object Lambda 存取點時,您必須指定要叫用的 Lambda 函數,並以 JSON 格式提供事件內容做為自訂參數以供 Lambda 使用。

建立 S3 Object Lambda 存取點
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側的導覽窗格中,選擇 Object Lambda Access Points (Object Lambda 存取點)。

  3. Object Lambda Access Points (Object Lambda 存取點) 頁面上,選擇 Create Object Lambda access point (建立 Object Lambda 存取點)。

  4. 對於 Object Lambda 存取點名稱,請輸入您要用於 Object Lambda 存取點的名稱 (例如,tutorial-object-lambda-accesspoint)。

  5. 針對 Supporting Access Point (支援存取點),輸入或瀏覽您在步驟 3 中建立的標準存取點 (例如,tutorial-access-point),然後選擇 Choose supporting Access Point (選擇支援存取點)。

  6. 對於 S3 API,若要從 S3 儲存貯體擷取物件以供 Lambda 函數處理,請選取GetObject

  7. 針對 Invoke Lambda function (叫用 Lambda 函數),您可以為本教學課程選擇以下兩個選項中的任意一個。

    • Lambda function (Lambda 函數) 下拉式清單,選擇 Choose from functions in your account (從您帳戶中的函數選擇),並選擇您在步驟 4 中建立的 Lambda 函數 (例如,tutorial-object-lambda-function)。

    • 選擇 Enter ARN (輸入 ARN),然後輸入您在步驟 4 中建立的 Lambda 函數的 Amazon 資源名稱 (ARN)。

  8. 針對 Lambda function version (Lambda 函數版本),選擇 $LATEST (您在步驟 4 中建立的 Lambda 函數的最新版本)。

  9. (選用) 如果您需要 Lambda 函數來識別和處理具有範圍和組件編號標頭的 GET 請求,請選取 Lambda function supports requests using range (Lambda 函數支援使用範圍的請求) 和 Lambda function supports requests using part numbers (Lambda 函數支援使用組件編號的請求)。否則,請清除這兩個核取方塊。

    如需如何藉助 S3 Object Lambda 使用範圍或組件編號的詳細資訊,請參閱「使用 Range 和 partNumber 標頭」。

  10. (選用) 在 Payload - optional (酬載 - 選用) 下,新增 JSON 文字,以提供 Lambda 函數的其他資訊。

    承載是可選的 JSON 文本,您可以將其做為來自特定 S3 Object Lambda 存取點的所有叫用的輸入來提供給您的 Lambda 函數。若要針對叫用相同 Lambda 函數的不同 Object Lambda 存取點自訂行為,您可以使用不同參數設定承載,藉此擴充 Lambda 函數的靈活性。

    如需承載的詳細資訊,請參閱「事件內容格式和用量」。

  11. (選用) 對於 請求指標 - 選用,請選擇停用啟用,將 Amazon S3 監控新增至您的 Object Lambda 存取點。請求指標以標準 Amazon 費 CloudWatch 率計費。如需詳細資訊,請參閱 CloudWatch 定價

  12. Object Lambda Access Point policy - optional (Object Lambda 存取點政策 - 選用) 下,請保留預設設定。

    (選用) 您可以設定資源政策。此資源政策會授予 GetObject API 許可 ,以使用指定的 Object Lambda 存取點。

  13. 將其餘設定保持為預設值,並選擇 Create Object Lambda Access Point (建立 Object Lambda 存取點)。

步驟 7:檢視轉換後的資料

現在,S3 Object Lambda 已經準備好為您的使用案例轉換資料。在本教學課程中,S3 Object Lambda 會將物件中的所有文字轉換為大寫。

在 S3 Object Lambda 存取點中檢視轉換後的資料

當您請求透過 S3 Object Lambda 存取點擷取檔案時,您要對 S3 Object Lambda 進行 GetObject API 呼叫。S3 Object Lambda 會叫用 Lambda 函數來轉換您的資料,然後傳回轉換後的資料,作為對標準 S3 GetObject API 呼叫的回應。

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側的導覽窗格中,選擇 Object Lambda Access Points (Object Lambda 存取點)。

  3. Object Lambda 存取點頁面上,選擇您在步驟 6 中建立的 S3 Object Lambda 存取點 (例如,tutorial-object-lambda-accesspoint)。

  4. 在您的 S3 Object Lambda 存取點的物件標籤上,選取與您在 步驟 2. 中上傳至 S3 儲存貯體的檔案同名的檔案 (例如,tutorial.txt)。

    此檔案應包含所有轉換的資料。

  5. 若要檢視轉換的資料,選擇 Open (開啟) 或 Download (下載)。

執行 Python 指令碼,以列印原始資料和轉換的資料

您可以將 S3 Object Lambda 與您現有的應用程式搭配使用。若要執行這項操作,請更新您的應用程式組態,以使用您在步驟 6 中建立的新的 S3 Object Lambda 存取點 ARN,進而從 S3 擷取資料。

下列範例 Python 指令碼會同時列印來自 S3 儲存貯體的原始資料,以及來自 S3 Object Lambda 存取點的轉換資料。

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側的導覽窗格中,選擇 Object Lambda Access Points (Object Lambda 存取點)。

  3. Object Lambda 存取點頁面上,選擇您在步驟 6 中建立的 S3 Object Lambda 存取點左側的選項按鈕 (例如,tutorial-object-lambda-accesspoint)。

  4. 選擇 Copy ARN (複製 ARN)。

  5. 儲存 ARN 以供稍後使用。

  6. 在本機機器上編寫 Python 指令碼,以列印來自 S3 儲存貯體的原始資料 (例如,tutorial.txt) 和來自 S3 Object Lambda 存取點的轉換後的資料 (例如,tutorial.txt)。您可使用下列範例指令碼。

    import boto3 from botocore.config import Config s3 = boto3.client('s3', config=Config(signature_version='s3v4')) def getObject(bucket, key): objectBody = s3.get_object(Bucket = bucket, Key = key) print(objectBody["Body"].read().decode("utf-8")) print("\n") print('Original object from the S3 bucket:') # Replace the two input parameters of getObject() below with # the S3 bucket name that you created in Step 1 and # the name of the file that you uploaded to the S3 bucket in Step 2 getObject("tutorial-bucket", "tutorial.txt") print('Object transformed by S3 Object Lambda:') # Replace the two input parameters of getObject() below with # the ARN of your S3 Object Lambda Access Point that you saved earlier and # the name of the file with the transformed data (which in this case is # the same as the name of the file that you uploaded to the S3 bucket # in Step 2) getObject("arn:aws:s3-object-lambda:us-west-2:111122223333:accesspoint/tutorial-object-lambda-accesspoint", "tutorial.txt")
  7. 在您本機機器上使用自訂名稱將您的 Python 指令碼 (例如,tutorial_print.py) 儲存至您在步驟 4 中建立的資料夾中 (例如,object-lambda)。

  8. 在本機終端機中,從您在步驟 4 中建立的目錄的根中執行下列命令 (例如,object-lambda)。

    python3 tutorial_print.py

    您應該透過終端機查看原始資料和轉換的資料 (所有文字均為大寫)。例如,您應該會看到類似下列文字的內容。

    Original object from the S3 bucket: Amazon S3 Object Lambda Tutorial: You can add your own code to process data retrieved from S3 before returning it to an application. Object transformed by S3 Object Lambda: AMAZON S3 OBJECT LAMBDA TUTORIAL: YOU CAN ADD YOUR OWN CODE TO PROCESS DATA RETRIEVED FROM S3 BEFORE RETURNING IT TO AN APPLICATION.

步驟 8:清除

如果透過 S3 Object Lambda 轉換的資料僅供學習練習之用,請先刪除已配置的 AWS 資源,如此即不會再產生費用。

刪除 Object Lambda 存取點

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側的導覽窗格中,選擇 Object Lambda Access Points (Object Lambda 存取點)。

  3. Object Lambda 存取點頁面上,選擇您在步驟 6 中建立的 S3 Object Lambda 存取點左側的選項按鈕 (例如,tutorial-object-lambda-accesspoint)。

  4. 選擇刪除

  5. 在出現的文字欄位中,輸入存取點名稱,以確認您要刪除 Object Lambda 存取點,然後選擇刪除

刪除 S3 存取點

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Access Points (存取點)。

  3. 導覽至您在步驟 3 中建立的存取點 (例如,tutorial-access-point),然後選擇存取點名稱旁的選項按鈕。

  4. 選擇刪除

  5. 在出現的文字欄位中,輸入存取點名稱,以確認您要刪除此存取點,然後選擇 Delete (刪除)。

為您的 Lambda 函數刪除執行角色

  1. 請登入 AWS Management Console 並開啟 AWS Lambda 主控台,網址為 https://console.aws.amazon.com/lambda/

  2. 在左側導覽窗格中,選擇 Functions (函數)。

  3. 選擇您在步驟 4 中建立的函數 (例如,tutorial-object-lambda-function)。

  4. 在 Lambda 函數的詳細資訊頁面上,選擇 Configuration (組態) 標籤,然後在左側導覽窗格選擇Permissions (許可)。

  5. Execution role (執行角色),選擇 Role name (角色名稱)。開啟 IAM 主控台。

  6. 在 IAM 主控台的 Lambda 函數的執行角色的 Summary (摘要) 頁面,選擇 Delete role (刪除角色)。

  7. Delete role (刪除角色) 對話方塊中,選擇 Yes, delete (是,刪除)。

刪除 Lambda 函數

  1. https://console.aws.amazon.com/lambda/ 的 AWS Lambda 主控台中,選擇左側導覽窗格中的「函數」。

  2. 選取您在步驟 4 中建立的函數名稱的左側的核取方塊 (例如,tutorial-object-lambda-function)。

  3. 選擇動作,然後選擇刪除

  4. Delete function (刪除函數) 對話方塊中,選擇 Delete (刪除)。

刪除記 CloudWatch 錄群組

  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

  2. 在左側導覽窗格中,選擇 Log groups (日誌群組)。

  3. 尋找您在步驟 4 中建立的且名稱以 Lambda 函數結尾的日誌群組 (例如,tutorial-object-lambda-function)。

  4. 選取日誌群組名稱左側的核取方塊。

  5. 選擇 Actions (動作),然後選擇 Delete log group(s) (刪除日誌群組)。

  6. 刪除日誌群組 對話方塊中,選擇 刪除

刪除 S3 來源儲存貯體中的原始檔案

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  3. Bucket name (儲存貯體名稱) 清單中,選擇您在步驟 2 中將原始檔案上傳到的儲存貯體的名稱 (例如,tutorial-bucket)。

  4. 選取要刪除之物件名稱左側的核取方塊 (例如,tutorial.txt)。

  5. 選擇刪除

  6. Delete objects (刪除物件) 頁面上的 Permanently delete objects? (永久刪除物件?) 區段中,在文字方塊中輸入 permanently delete,以確認您要刪除此物件。

  7. 選擇 Delete objects (刪除物件)。

刪除 S3 來源儲存貯體

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  3. Buckets (儲存貯體) 清單中,選擇您在步驟 1 中建立的儲存貯體名稱旁的選項按鈕 (例如,tutorial-bucket)。

  4. 選擇刪除

  5. Delete bucket (刪除儲存貯體) 頁面上,在文字欄位中輸入儲存貯體名稱以確認您要刪除該儲存貯體,然後選擇 Delete bucket (刪除儲存貯體)。

刪除 IAM 使用者

  1. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 在左側導覽窗格中,選擇 Users (使用者),然後選取您要刪除之使用者名稱旁的核取方塊。

  3. 在頁面頂端,選擇 Delete (刪除)。

  4. Delete user name? (刪除使用者名稱?) 對話方塊中,在文字輸入欄位中輸入使用者名稱以確認刪除使用者。選擇刪除

後續步驟

完成本教學課程後,您可以針對您的使用案例自訂 Lambda 函數,進而修改標準 S3 GET 請求傳回的資料。

以下是 S3 Object Lambda 的常用使用案例清單:

如需 S3 Object Lambda 的詳細資訊,請參閱 使用 S3 Object Lambda 轉換物件