- AWS Lambda 教程
- AWS Lambda - 首页
- AWS Lambda - 概述
- AWS Lambda - 环境设置
- AWS Lambda - 简介
- 构建 Lambda 函数
- NODEJS 函数
- Java 函数
- Python 函数
- Go 函数
- C# 函数
- 配置 Lambda 函数
- 使用 AWS 控制台创建和部署
- 使用 AWS CLI 创建和部署
- 使用 Serverless Framework 创建和部署
- AWS 执行和调用 Lambda 函数
- 删除 Lambda 函数
- 使用 Amazon API Gateway
- Lambda 函数与 Amazon S3
- Lambda 函数与 Amazon DynamoDB
- Lambda 函数与计划事件
- Lambda 函数与 Amazon SNS
- Lambda 函数与 CloudTrail
- Lambda 函数与 Amazon Kinesis
- Lambda 函数与自定义用户应用程序
- AWS Lambda@Edge 与 CloudFront
- 使用 CloudWatch 进行监控和故障排除
- AWS Lambda - 附加示例
- AWS Lambda 有用资源
- AWS Lambda - 快速指南
- AWS Lambda - 有用资源
- AWS Lambda - 讨论
使用 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 日志中看到该消息。
解释示例流程的框图如下所示:
创建 S3 存储桶
让我们首先按照以下步骤在 AWS 控制台中创建一个 s3 存储桶:
步骤 1
转到 Amazon 服务,然后点击存储部分中的**S3**,如下图所示:
步骤 2
点击 S3 存储,然后点击**创建存储桶**,该存储桶将存储上传的文件。
步骤 3
点击**创建存储桶**按钮后,您将看到如下所示的屏幕:
步骤 4
输入详细信息**存储桶名称、选择区域**,然后点击左下角的**创建**按钮。因此,我们创建了名为:**workingwithlambdaands3** 的存储桶。
步骤 5
现在,点击存储桶名称,它将要求您上传文件,如下所示:
因此,我们完成了在 S3 中创建存储桶。
创建与 S3 和 Lambda 协同工作的角色
要创建与 S3 和 Lambda 协同工作的角色,请按照以下步骤操作:
步骤 1
转到 AWS 服务并选择 IAM,如下图所示:
步骤 2
现在,点击**IAM -> 角色**,如下图所示:
步骤 3
现在,点击**创建角色**并选择将使用此角色的服务。选择 Lambda 并点击**权限**按钮。
步骤 4
添加以下权限,然后点击**查看**。
步骤 5
观察到我们选择了以下权限:
观察到我们选择的策略是**AmazonS3FullAccess、AWSLambdaFullAccess** 和 **CloudWatchFullAccess**。
步骤 6
现在,输入角色名称、角色描述,然后点击底部的**创建角色**按钮。
因此,我们创建了名为**lambdawiths3service** 的角色。
创建 Lambda 函数并添加 S3 触发器
在本节中,让我们了解如何创建 Lambda 函数并为其添加 S3 触发器。为此,您必须按照以下步骤操作:
步骤 1
转到 AWS 服务并选择 Lambda,如下图所示:
步骤 2
点击**Lambda** 并按照添加**名称**的过程进行操作。选择**运行时、角色**等,然后创建函数。我们在下面的屏幕截图中创建的 Lambda 函数。
步骤 3
现在让我们添加 S3 触发器。
步骤 4
从上方选择触发器并添加如下所示的详细信息:
步骤 5
从存储桶下拉列表中选择创建的存储桶。事件类型具有以下详细信息:
选择**对象创建(全部)**,因为我们需要在上传、删除等文件时触发 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); };
请注意,event 参数包含 S3event 的详细信息。我们已经记录了存储桶名称和文件名,这些名称将在您将图像上传到 S3bucket 时记录。
步骤 9
现在,让我们保存更改并使用 S3upload 测试 lambda 函数。以下是在 AWS Lambda 中添加的代码详细信息:
步骤 10
现在,让我们添加角色、内存和超时。
步骤 11
现在,保存 Lambda 函数。从 Amazon 服务中打开 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 中观察到的输出如下所示:
当文件上传到 S3 存储桶时,AWS Lambda 函数被触发,详细信息记录在 CloudWatch 中,如下所示: