我希望我的 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_name、bucket_name 和 unique_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 存储桶?