
- AWS Lambda 教程
- AWS Lambda - 主页
- AWS Lambda - 概述
- AWS Lambda - 环境设置
- AWS Lambda - 简介
- 构建 Lambda 函数
- NODEJS 中的函数
- Java 中的函数
- Python 中的函数
- Go 中的函数
- C# 中的函数
- 配置 Lambda 函数
- 使用 AWS 控制台创建和部署
- 使用 AWS CLI 创建和部署
- 使用无服务器框架创建和部署
- AWS 执行和调用 Lambda 函数
- 删除 Lambda 函数
- 使用 Amazon API Gateway
- 使用 Amazon S3 的 Lambda 函数
- 使用 Amazon DynamoDB 的 Lambda 函数
- 具有预定事件的 Lambda 函数
- 带有 Amazon SNS 的 Lambda 函数
- 带有 CloudTrail 的 Lambda 函数
- 使用 Amazon Kinesis 的 Lambda 函数
- 具有自定义用户应用程序的 Lambda 函数
- AWS Lambda@Edge 与 CloudFront
- 使用 Cloudwatch 进行监控和故障排除
- AWS Lambda - 其他示例
- AWS Lambda 有用资源
- AWS Lambda - 快速指南
- AWS Lambda - 有用的资源
- AWS Lambda - 讨论
将 Lambda 函数与 CloudTrail 结合使用
AWS CloudTrail是 Amazon 提供的一项服务,有助于记录在 AWS 控制台内完成的所有活动。它记录所有 API 调用并存储历史记录,供以后用于调试目的。请注意,我们无法从 CloudTrail 触发 Lambda。相反,CloudTrail 将所有历史记录以日志的形式存储在 S3 存储桶中,我们可以从 S3 触发 AWS Lambda。一旦要处理任何日志,只要将任何日志添加到 S3 存储桶,AWS Lambda 就会被触发。
必备条件
在开始使用 AWS CloudTrail、S3 和 AWS Lambda 之前,您需要执行以下操作 -
- 创建S3存储桶来存储CloudTrail日志
- 创建SNS服务
- 在 CloudTrail 中创建跟踪并分配 S3 存储桶和 SNS 服务
- 创建具有权限的 IAM 角色。
- 创建aws lambda函数
- AWS Lambda 配置
例子
让我们考虑一个显示 AWS CloudTrail、S3 和 AWS Lambda 工作原理的示例。在这里,我们将在 S3 中创建一个存储桶,用于存储在 AWS 控制台中完成的任何交互的所有日志。让我们创建 SNS 主题并发布它。对于此操作,日志将作为文件输入到 S3 中。AWS lambda 将被触发,它将使用 Amazon SES 服务发送邮件。
解释此过程的框图如下所示 -

创建 S3 存储桶来存储 CloudTrail 日志
转到 AWS 控制台并单击 S3 服务。单击创建存储桶并输入要存储 cloudtrail 日志的存储桶的名称,如下所示 -

请注意,这里我们创建了一个 S3 存储桶cloudtraillogsaws用于存储日志。
创建SNS服务
转到 AWS 控制台并单击简单通知服务。从左侧选择主题,然后单击创建新主题按钮。

我们创建了名为displaytrail的主题来发布主题。其详细信息将存储在上面创建的 S3bucket 中。
在 Cloudtrail 中创建跟踪并分配 S3 存储桶和 SNS 服务
转到 AWS 控制台并从管理工具中单击CloudTrail服务,如下所示 -

单击左侧的“Trails” ,如下所示 -


单击创建轨迹按钮。输入跟踪名称,将跟踪应用于所有区域,然后选择是。那么日志将应用于所有区域。

对于读/写事件,选择全部。添加S3 存储桶和SNS 主题详细信息,如下所示。您可以在此处创建新的或添加现有的。

请注意,有一些选项可用于加密日志文件、启用日志文件验证、为每个日志文件传送发送 sns 通知等。我在这里使用了默认值。您可以允许文件加密,它会要求提供加密密钥。添加详细信息后,单击“创建轨迹”按钮。

创建具有权限的 IAM 角色
转到 AWS 控制台并选择 IAM。创建具有 S3、Lambda、CloudTrail 和 SES 发送电子邮件权限的角色。创建的角色如下所示 -

创建 AWS Lambda 函数
转到 AWS 服务并单击Lambda服务。添加函数名称,选择运行时为nodejs,然后选择为 lambda 函数创建的角色。以下是创建的 lambda 函数。

AWS Lambda 配置
接下来,我们需要添加 S3 作为创建的 AWS lambda 的触发器。

添加 S3 存储桶详细信息以添加触发器并添加以下 AWS Lambda 代码 -
const aws = require("aws-sdk"); const sns = new aws.SNS({ region:'us-east-1' }); var ses = new aws.SES({ region: 'us-east-1' }); exports.handler = function(event, context, callback) { console.log("AWS lambda and SNS trigger "); console.log(event); const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key; console.log(s3message); var eParams = { Destination: { ToAddresses: ["xxxxxxxxx12@gmail.com"] }, Message: { Body: { Text: { Data:s3message } }, Subject: { Data: "cloudtrail logs" } }, Source: "coxxxxxx@gmail.com" }; var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); };
请注意,我们从事件中获取 S3 存储桶和日志详细信息,并使用 SES 服务发送邮件,如上所示。
每当AWS控制台中发生任何活动时,日志将被发送到S3存储桶,同时AWS lambda将被触发,邮件将被发送到代码中提到的电子邮件ID。

请注意,您可以根据需要在 AWS Lambda 中处理日志。