AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

步骤 3:添加事件源(配置 Amazon S3 以发布事件)

在本节中,您将添加剩余的配置,以便 Amazon S3 能够向 AWS Lambda 发布对象创建事件并调用 Lambda 函数。您将执行以下操作:

  • 向 Lambda 函数的访问策略添加权限以允许 Amazon S3 调用该函数。

  • 向源存储桶添加通知配置。在通知配置中,您需要提供以下内容:

    • 需要 Amazon S3 发布的事件的事件类型。对于本教程,您将指定 s3:ObjectCreated:* 事件类型。

    • 要调用的 Lambda 函数。

步骤 3.1:向 Lambda 函数的访问权限策略添加权限

  1. 运行下面的 Lambda CLI add-permission 命令以向 Amazon S3 服务委托人 (s3.amazonaws.com) 授予执行 lambda:InvokeFunction 操作的权限。请注意,向 Amazon S3 授予权限,使其只能在满足以下条件时调用该函数:

    • 在特定的存储桶上检测到对象创建事件。

    • 存储桶归特定的 AWS 账户所有。如果存储桶拥有者删除了某个存储桶,则其他 AWS 账户可以创建使用该名称的存储桶。该条件确保只有特定的 AWS 账户能调用您的 Lambda 函数。

    Copy
    $ aws lambda add-permission \ --function-name CloudTrailEventProcessing \ --region us-west-2 \ --statement-id Id-1 \ --action "lambda:InvokeFunction" \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::examplebucket \ --source-account examplebucket-owner-account-id \ --profile adminuser
  2. 通过运行 AWS CLI get-policy 命令验证函数的访问策略。

    Copy
    $ aws lambda get-policy \ --function-name function-name \ --profile adminuser

步骤 3.2:在存储桶上配置通知

examplebucket 上添加通知配置,以请求 Amazon S3 向 Lambda 发布对象创建事件。在配置中,指定以下内容:

  • 事件类型 - 对于本教程,可以是创建对象的任意事件类型。

  • Lambda 函数 ARN - 这是您希望 Amazon S3 调用的 Lambda 函数。ARN 的格式如下:

    Copy
    arn:aws:lambda:aws-region:account-id:function:function-name

    例如,在 us-west-2 区域中创建的函数 CloudTrailEventProcessing 的 ARN 为:

    Copy
    arn:aws:lambda:us-west-2:account-id:function:CloudTrailEventProcessing

有关向存储桶添加通知配置的说明,请参阅 Amazon Simple Storage Service 控制台用户指南 中的启用事件通知

步骤 3.3:测试设置

全部完成!现在,可以按以下方式测试设置:

  1. 在您的 AWS 账户上执行一些操作。例如,在 Amazon SNS 控制台中添加另一个主题。

  2. 您会收到关于该事件的电子邮件通知。

  3. AWS CloudTrail 在存储桶中创建日志对象。

  4. 如果您打开该日志对象(.gz 文件),日志会显示 CreateTopic SNS 事件。

  5. 对于 AWS CloudTrail 创建的每个对象,Amazon S3 会通过将该日志对象作为事件数据传递来调用 Lambda 函数。

  6. Lambda 执行您的函数。该函数分析日志,发现 CreateTopic SNS 事件,随后您会收到电子邮件通知。

    您可以借助 CloudWatch 指标和日志监控 Lambda 函数的活动。有关 CloudWatch 监控的更多信息,请参阅使用 Amazon CloudWatch 诊断和监控 AWS Lambda 函数