AWS Lambda
开发人员指南

教程:将 AWS Lambda 与 AWS CloudTrail 结合使用

假定您已对自己的 AWS 账户启用 AWS CloudTrail 以保留对您的账户进行的 AWS API 调用的记录(日志),并希望在每次发生用于创建 SNS 主题的 API 调用时收到通知。由于 API 是在您的账户中调用的,CloudTrail 会将日志写入到您配置的 Amazon S3 存储桶中。在这种情况下,您希望 Amazon S3 在 CloudTrail 创建日志对象时将对象创建事件发布到 AWS Lambda 并调用您的 Lambda 函数。

当 Amazon S3 调用 Lambda 函数时,它会传递标识存储桶名称和 CloudTrail 创建的对象的键名称等的 S3 事件。Lambda 函数可读取该日志对象,并了解日志中报告的 API 调用。

CloudTrail 在 S3 存储桶中创建的每个对象都是包含一个或多个事件记录的 JSON 对象。此外,每条记录提供的内容都包括 eventSourceeventName

{ "Records":[ { "eventVersion":"1.02", "userIdentity":{ ... }, "eventTime":"2014-12-16T19:17:43Z", "eventSource":"sns.amazonaws.com", "eventName":"CreateTopic", "awsRegion":"us-west-2", "sourceIPAddress":"72.21.198.64", ... }, { ... }, ... }

为了展示这个过程,如果日志中报告了用于创建 Amazon SNS 主题的 API 调用,Lambda 函数会通过电子邮件向您发送通知。也就是说,Lambda 函数在分析日志时会查找包含以下内容的记录:

  • eventSource = "sns.amazonaws.com"

  • eventName = "CreateTopic"

如果找到,该函数会将该事件发布到 Amazon SNS 主题(您配置此主题以通过电子邮件向您发送通知)。

实现摘要

完成本教程后,您的账户中会有 Amazon S3、AWS Lambda、Amazon SNS 和 AWS Identity and Access Management (IAM) 资源:

注意

本教程假定您在 us-west-2 区域中创建了这些资源。

在 Lambda 中:

  • Lambda 函数。

  • 与 Lambda 函数关联的访问策略 - 使用此权限策略向 Amazon S3 授予调用 Lambda 函数的权限。此外,您还将限制该权限,以使 Amazon S3 只能针对来自特定存储桶(归特定 AWS 账户所有)的对象创建事件调用 Lambda 函数。

    注意

    某个 AWS 账户删除存储桶后,其他 AWS 账户可以创建使用该相同名称的存储桶。额外的条件可确保:仅当 Amazon S3 检测到来自特定存储桶(归特定 AWS 账户所有)的对象创建事件时,Amazon S3 才能调用 Lambda 函数。

在 IAM 中:

  • IAM 角色(执行角色)- 通过与此角色关联的权限策略授予 Lambda 函数所需的权限。

在 Amazon S3 中:

  • 存储桶 - 在本教程中,存储桶名称为 examplebucket。在 CloudTrail 控制台中启用跟踪时,为 CloudTrail 指定该存储桶以保存日志。

  • examplebucket 上的通知配置 - 在该配置中,您通过调用 Lambda 函数指示 Amazon S3 将对象创建事件发布到 Lambda。有关 Amazon S3 通知功能的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的设置存储桶事件的通知

  • ExampleCloudTrailLog.jsonexamplebucket 存储桶中的示例 CloudTrail 日志对象 () - 在本练习的前半部分,您将使用示例 S3 事件手动调用 Lambda 函数,以便创建和测试该函数。此示例事件将 examplebucket 标识为存储桶名称和此示例对象键名称。Lambda 函数随后读取该对象并使用 SNS 主题向您发送电子邮件通知。

在 Amazon SNS 中:

  • SNS 主题 - 订阅该主题(协议指定为电子邮件)。

您现在可以开始教程。

下一步

步骤 1:准备

本页内容: