在Amazon S3中使用Lambda函数

Amazon S3服务用于文件存储,您可以在其中上传或删除文件.当S3存储桶中存在任何文件上载时,我们可以在S3上触发AWS Lambda. AWS Lambda具有处理函数,该函数充当AWS Lambda函数的起点.处理程序具有事件的详细信息.在本章中,让我们看看当我们在S3存储桶中上传文件时如何使用AWS S3触发AWS Lambda函数.

在Amazon S3中使用AWS Lambda函数的步骤

要开始将AWS Lambda与Amazon S3一起使用,我们需要以下 :

  • 创建S3 Bucket

  • 创建有权使用s3和lambda的角色

  • 创建lambda函数并添加s3作为触发器.

示例

让我们借助一个示例来查看这些步骤,该示例显示了Amazon S3和AWS Lambda之间的基本交互.

  • 用户将在Amazon S3存储桶中上传文件

  • 文件一旦存档上传后,它将在后台触发AWS Lambda函数,该函数将以控制台消息的形式显示文件上传的输出.

  • 用户上传文件后,将能够在Cloudwatch日志中看到该消息.

此处显示了解释示例流程的框图 :

上传功能

创建S3存储桶

让我们先创建一个s3存储桶AWS控制台使用下面给出的步骤 :

步骤1

转到Amazon服务并单击存储部分中的 S3 如下面给出的图像中所突出显示的那样 :

S3 Storage

步骤2

点击S3存储和创建存储桶,它将存储上传的文件.

文件已上传

第3步

点击创建存储桶按钮后,可以看到如下屏幕的屏幕;

点击创建

第4步

输入详细信息存储桶名称,选择区域,然后单击左下方的创建按钮.因此,我们创建了名为: workingwithlambdaands3 的存储桶.

选择地区

步骤5

现在,点击存储桶名称,它会要求您上传文件,如下所示 :

Upload Bucket

因此,我们在S3中创建了桶.

创建适用于S3和Lambda的角色

要创建适用于S3和Lambda的角色,请按照下面给出的步骤&减去;

步骤1

转到AWS服务并选择IAM,如下所示 :

使用S3

步骤2

现在,点击 IAM  - >角色如下图所示 :

Iam Roles

步骤3

现在,单击创建角色,然后选择将使用此角色的服务.选择Lambda并单击权限按钮.

Permission Botton

步骤4

从下面添加权限,然后单击审核.

点击查看

第5步

注意我们选择了以下权限 :

以下许可

观察我们选择的政策 AmazonS3FullAccess, AWSLambdaFullAccess CloudWatchFullAccess .

步骤6

现在,输入角色名称,角色描述并单击底部的 创建角色 按钮.

创建角色

因此,我们创建了名为 lambdawiths3service 的角色.

创建Lambda函数和添加S3触发器

在本节中,让我们看看如何创建Lambda函数并为其添加S3触发器.为此,您必须遵循下面给出的步骤:

步骤1

转到AWS服务并选择Lambda,如下所示&减去;

选择Lambda

第2步

单击 Lambda 并按照添加名称的过程进行操作.选择运行时,角色等,然后创建该功能.我们创建的Lambda函数显示在下面的屏幕截图中;

选择运行时

第3步

现在让我们添加S3触发器.

步骤4

从上面选择触发器并添加详细信息,如下所示 :

选择触发器

步骤5

选择从桶下拉列表创建的桶.事件类型具有以下详细信息 :

Bucket Downdrop

选择对象创建(全部),因为我们在上传,删除文件时需要AWS Lambda触发器.

步骤6

您可以添加用于过滤添加的文件的前缀和文件模式.例如,仅为.jpg图像触发lambda.现在让我们保持空白,因为我们需要为所有上传的文件触发Lambda.点击添加按钮添加触发器.

文件模式

第7步

您可以找到Lambda函数的触发器显示,如下所示 :

触发器显示

让我们添加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);
};

请注意,事件参数包含S3event的详细信息.我们已经安装了在S3bucket上传图像时将记录的存储桶名称和文件名.

步骤9

现在,让我们保存使用S3upload更改并测试lambda函数.以下是AWS Lambda中添加的代码详细信息;

代码详细信息

步骤10

现在,让我们添加角色,内存和超时.

内存超时

步骤11

现在,保存Lambda函数.从亚马逊服务中打开S3并打开我们之前创建的存储桶,即 workingwithlambdaands3 .

上传图像,如下所示 :

上传图片

第12步

点击上传按钮添加文件如下所示 :

点击上传

步骤13

单击添加文件以添加文件.您也可以拖放文件.现在,点击上传按钮.

添加文件

因此,我们在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中观察到的输出如下所示;

观察Cloudwatch

在S3存储桶中上传文件时触发AWS Lambda函数,详细信息记录在Cloudwatch中,如下所示 :

S3 Bucket