如何设置 Amazon S3 事件通知,以调用其他 AWS 账户中的 Lambda 函数?

2 分钟阅读
0

我希望我的 Amazon Simple Storage Service(Amazon S3)桶能够调用其他 AWS 账户中的 AWS Lambda 函数。

简短描述

要让您的 Amazon S3 存储桶调用其他 AWS 账户中的 Lambda 函数,请执行以下操作:

1.    更新 Lambda 函数的基于资源的权限策略以向 Amazon S3 授予调用权限

2.    创建一个调用 Lambda 函数的 Amazon S3 事件通知

重要提示:Lambda 函数必须与您的 S3 桶位于同一 AWS 区域中。有关迁移函数的信息,请参阅如何使用 Lambda 控制台将 Lambda 函数迁移到另一个 AWS 账户或区域?

解决方法

注意:您必须具备以下信息才能完成此过程:

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您运行的是最新版本的 AWS CLI

更新 Lambda 函数基于资源的权限策略,以向 Amazon S3 授予调用权限

AWS 管理控制台

1.    使用您的 Lambda 函数所在的 AWS 账户打开 Lambda 控制台上的函数页面

2.    选择 Amazon S3 要调用的 Lambda 函数的名称。

3.    在 Configuration(配置)选项卡中,选择 Permissions(权限)。

4.    在 Resource-based policy(基于资源的策略)窗格中,选择 Add permissions(添加权限)。

5.    在 Policy statement(策略声明)窗格中,选择 AWS service(AWS 服务)。此时将显示 Service(服务)下拉列表。

6.    在Service(服务)下拉列表中,选择 S3。这时将显示更多文本字段。

7.    对于 Source account(源账户),请输入托管 S3 桶的账户的 AWS 账户 ID。

8.    对于 Source ARN(源 ARN),请输入您的 S3 桶的 ARN。请使用以下格式:

**注意:**请将 bucket_name 替换为您的 S3 桶的名称。

arn:aws:s3:::bucket_name

9.    对于 Action(操作),从下拉列表中选择 lambda:InvokeFunction

10.    对于 Statement ID(语句 ID),输入唯一的语句 ID,以区分您在策略中创建的语句。

11.    选择 Save(保存)。

有关更多信息,请参阅使用 AWS Lambda 基于资源的策略

AWS CLI

更新 Lambda 函数基于资源的权限策略,以使用 add-permission API 向 Amazon S3 授予调用权限,如下所示:

aws lambda add-permission \
--function-name LambdaFunction_name \
--action lambda:InvokeFunction \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::bucket_name \
--statement-id "unique_statement_ID"

**注意:**请将 LambdaFunction_namebucket_nameunique_statement_ID 替换为您的变量。

创建一个调用 Lambda 函数的 Amazon S3 事件通知

AWS 管理控制台

按照说明,使用 Amazon S3 控制台来激活和配置事件通知

AWS CLI

使用 put-bucket-notification-configuration API 创建调用 Lambda 函数的 Amazon S3 事件通知,如下所示:

**注意:**请将 bucket_name 替换为您的 S3 桶的名称。

aws s3api put-bucket-notification-configuration \
--bucket bucket_name \
--notification-configuration file://notification.json

创建并保存 notification.json 文件,如下所示:

**注意:**请将 LambdaFunction_ARN 替换为您的 Lambda 函数 ARN。将前缀和后缀替换为筛选规则的变量。

{
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:*" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    }
  ]
}

测试 Lambda 函数

按照说明,使用 Lambda 控制台测试 Lambda 函数

如果事件通知未调用您的函数,请按照为什么我的 Amazon S3 事件通知没有调用我的 Lambda 函数?中的说明进行操作。


相关信息

如何允许我的 Lambda 执行角色访问我的 Amazon S3 存储桶?

AWS 官方
AWS 官方已更新 1 年前