使用 Lambda 函式與 Amazon S3



Amazon S3 服務用於檔案儲存,您可以在其中上傳或刪除檔案。當 S3 儲存桶中出現任何檔案上傳時,我們可以觸發 AWS Lambda。AWS Lambda 具有一個處理程式函式,該函式充當 AWS Lambda 函式的起點。處理程式包含事件的詳細資訊。在本章中,讓我們瞭解如何在上傳 S3 儲存桶中的檔案時使用 AWS S3 觸發 AWS Lambda 函式。

使用 Amazon S3 的 AWS Lambda 函式的步驟

要開始使用 Amazon S3 與 AWS Lambda,我們需要以下內容:

  • 建立 S3 儲存桶
  • 建立具有使用 s3 和 lambda 許可權的角色
  • 建立 lambda 函式並將 s3 新增為觸發器。

示例

讓我們透過一個示例來了解這些步驟,該示例顯示了 Amazon S3 和 AWS Lambda 之間的基本互動。

  • 使用者將檔案上傳到 Amazon S3 儲存桶

  • 檔案上傳後,它將在後臺觸發 AWS Lambda 函式,該函式將以控制檯訊息的形式顯示檔案已上傳的輸出。

  • 檔案上傳後,使用者將能夠在 CloudWatch 日誌中看到該訊息。

解釋示例流程的框圖如下所示:

Upload Function

建立 S3 儲存桶

讓我們首先按照以下步驟在 AWS 控制檯中建立一個 s3 儲存桶:

步驟 1

轉到 Amazon 服務,然後點選儲存部分中的**S3**,如下圖所示:

S3 Storage

步驟 2

點選 S3 儲存,然後點選**建立儲存桶**,該儲存桶將儲存上傳的檔案。

File Uploaded

步驟 3

點選**建立儲存桶**按鈕後,您將看到如下所示的螢幕:

Click Create

步驟 4

輸入詳細資訊**儲存桶名稱、選擇區域**,然後點選左下角的**建立**按鈕。因此,我們建立了名為:**workingwithlambdaands3** 的儲存桶。

Select Region

步驟 5

現在,點選儲存桶名稱,它將要求您上傳檔案,如下所示:

Upload Bucket

因此,我們完成了在 S3 中建立儲存桶。

建立與 S3 和 Lambda 協同工作的角色

要建立與 S3 和 Lambda 協同工作的角色,請按照以下步驟操作:

步驟 1

轉到 AWS 服務並選擇 IAM,如下圖所示:

Work With S3

步驟 2

現在,點選**IAM -> 角色**,如下圖所示:

Iam Roles

步驟 3

現在,點選**建立角色**並選擇將使用此角色的服務。選擇 Lambda 並點選**許可權**按鈕。

Permission Botton

步驟 4

新增以下許可權,然後點選**檢視**。

Click Review

步驟 5

觀察到我們選擇了以下許可權:

Following Permission

觀察到我們選擇的策略是**AmazonS3FullAccess、AWSLambdaFullAccess** 和 **CloudWatchFullAccess**。

步驟 6

現在,輸入角色名稱、角色描述,然後點選底部的**建立角色**按鈕。

Create The Role

因此,我們建立了名為**lambdawiths3service** 的角色。

建立 Lambda 函式並新增 S3 觸發器

在本節中,讓我們瞭解如何建立 Lambda 函式併為其新增 S3 觸發器。為此,您必須按照以下步驟操作:

步驟 1

轉到 AWS 服務並選擇 Lambda,如下圖所示:

Select Lambda

步驟 2

點選**Lambda** 並按照新增**名稱**的過程進行操作。選擇**執行時、角色**等,然後建立函式。我們在下面的螢幕截圖中建立的 Lambda 函式。

Choose Runtime

步驟 3

現在讓我們新增 S3 觸發器。

Add S3

步驟 4

從上方選擇觸發器並新增如下所示的詳細資訊:

Choose Trigger

步驟 5

從儲存桶下拉列表中選擇建立的儲存桶。事件型別具有以下詳細資訊:

Bucket Downdrop

選擇**物件建立(全部)**,因為我們需要在上傳、刪除等檔案時觸發 AWS Lambda。

步驟 6

您可以新增用於過濾新增的檔案的字首和檔案模式。例如,僅針對 .jpg 影像觸發 lambda。現在讓我們將其保留為空白,因為我們需要為上傳的所有檔案觸發 Lambda。點選**新增**按鈕新增觸發器。

File Pattern

步驟 7

您可以找到 Lambda 函式的觸發器顯示,如下所示:

Trigger Display

讓我們新增 aws lambda 函式的詳細資訊。在這裡,我們將使用線上編輯器新增我們的程式碼並使用 nodejs 作為執行時環境。

步驟 8

要使用 AWS Lambda 觸發 S3,我們必須在程式碼中使用 S3 事件,如下所示:

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

請注意,event 引數包含 S3event 的詳細資訊。我們已經記錄了儲存桶名稱和檔名,這些名稱將在您將影像上傳到 S3bucket 時記錄。

步驟 9

現在,讓我們儲存更改並使用 S3upload 測試 lambda 函式。以下是在 AWS Lambda 中新增的程式碼詳細資訊:

Code Details

步驟 10

現在,讓我們新增角色、記憶體和超時。

Memory Timeout

步驟 11

現在,儲存 Lambda 函式。從 Amazon 服務中開啟 S3 並開啟我們之前建立的名為**workingwithlambdaands3** 的儲存桶。

將影像上傳到其中,如下所示:

Upload Image

步驟 12

點選**上傳**按鈕新增檔案,如下所示:

Click Upload

步驟 13

點選**新增檔案**新增檔案。您也可以拖放檔案。現在,點選**上傳**按鈕。

Add Files

因此,我們已將一個影像上傳到我們的 S3 儲存桶中。

步驟 14

要檢視觸發器詳細資訊,請轉到 AWS 服務並選擇**CloudWatch**。開啟 Lambda 函式的日誌並使用以下程式碼:

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

您可以在 CloudWatch 中觀察到的輸出如下所示:

Observe Cloudwatch

當檔案上傳到 S3 儲存桶時,AWS Lambda 函式被觸發,詳細資訊記錄在 CloudWatch 中,如下所示:

S3 Bucket
廣告