Amazon S3在另一个帐户中触发另一个Lambda函数

san*_*eep 6 amazon-s3 amazon-web-services aws-lambda

当任何对象进入Account A S3存储桶时,我想在帐户B中运行lambda.

但我听说我们只能从同一个帐户S3访问Lambda,对于跨帐户S3 Lambda访问我必须在同一帐户中运行Lambda并再生成另一个运行另一个帐户Lambda的触发器:

  1. S3(账户A) - > Lambda(账户B) - 不可能
  2. S3(账户A) - > Lambda(账户A) - > Lambda(账户B) - 可能

有人可以帮我找哪个选项吗?如果是这样的话?

Vau*_*ein 9

@John的解决方案有效,但是我想在他的回答中添加一些步骤。

  • S3水桶和LAMBDA需要在同一区域。例如,两者都应在us-east-1区域中创建。不同区域将引发如下错误:

通知目标服务区域对于存储桶位置约束无效

以下是我创建触发器的步骤:

Account-A.S3-bucket -> Account-B.Lambda-function
Run Code Online (Sandbox Code Playgroud)
  1. 在终端上,切换到Lambda所在的Account-B的AWS配置文件
  2. 运行以下命令,为您的案例更改参数:

    aws lambda add-permission \ --region {Account-B.Lambda region Eg. us-east-1} \ --function-name {Account-B.Lambda name} \ --statement-id 1 \ --principal s3.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn arn:aws:s3:::{Account-A.S3 name} \ --source-account {Account-A.account-id} \ --profile {Account-B.profile-name}

在这种情况下,您可能会得到statement-id存在错误,再次增加statement-id并重新运行命令。

  1. Account-AS3桶和下属性的标签>下活动
  2. 选择添加通知
  3. 添加以下字段:

    Name: ObjectCreation Events: ObjectCreate (All) Send to: Lambda function Lambda: Add Lambda function ARN Lambda function ARN: your-lambda-arn

注意:Lambda函数可能仍然显示错误,但是在S3存储桶中添加的新对象会触发lambda,并且print(event)日志会出现在Cloudwatch日志中。


Joh*_*ein 8

我设法成功触发帐户B中的AWS Lambda函数,从上载到帐户A中的Amazon S3存储桶.

Account-A.S3-bucket -> Account-B.Lambda-function
Run Code Online (Sandbox Code Playgroud)

这是我做的:

  • 在帐户A中创建了Amazon S3存储桶
  • 在帐户B中创建了Lambda函数
  • 通过AWS命令行界面(CLI)AWS Lambda 的基于资源的策略添加到Lambda函数,该命令允许S3存储桶调用lambda:InvokeFunctionLambda函数
  • 在S3存储桶中添加了一个存储桶策略,允许GetObject从任何地方进行访问(这应该进一步锁定,但对于实验来说已足够)
  • 在S3存储桶上配置了一个事件,ObjectCreate (All)通过其ARN引用Lambda函数
  • 上传文件到帐户,A.S3斗
  • Account-B.Lambda功能已成功触发

然后我在另一个区域重复实验,它失败了,说:

通知目标服务区域对于存储区位置约束无效


kri*_*004 0

在新的 S3 控制台中,转到 S3 控制台并打开您的存储桶。单击属性选项卡 -> 事件。您需要授予 S3 调用 Lambda 函数的权限。请参阅:配置 Amazon s3 存储桶以运行在另一个账户中创建的 Lambda 函数