
- AWS Lambda教程
- AWS Lambda - 首页
- AWS Lambda - 概述
- AWS Lambda - 环境设置
- AWS Lambda - 简介
- 构建Lambda函数
- Node.js函数
- 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函数与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日志的存储桶名称,如下所示:

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

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

从左侧单击跟踪,如下所示:


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

对于读/写事件,选择全部。添加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中根据您的需要处理日志。