san*_*eep 6 amazon-s3 amazon-web-services aws-lambda
当任何对象进入Account A S3存储桶时,我想在帐户B中运行lambda.
但我听说我们只能从同一个帐户S3访问Lambda,对于跨帐户S3 Lambda访问我必须在同一帐户中运行Lambda并再生成另一个运行另一个帐户Lambda的触发器:
有人可以帮我找哪个选项吗?如果是这样的话?
@John的解决方案有效,但是我想在他的回答中添加一些步骤。
us-east-1区域中创建。不同区域将引发如下错误:通知目标服务区域对于存储桶位置约束无效
以下是我创建触发器的步骤:
Account-A.S3-bucket -> Account-B.Lambda-function
Run Code Online (Sandbox Code Playgroud)
运行以下命令,为您的案例更改参数:
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并重新运行命令。
Account-A的S3桶和下属性的标签>下活动添加以下字段:
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日志中。
我设法成功触发帐户B中的AWS Lambda函数,从上载到帐户A中的Amazon S3存储桶.
Account-A.S3-bucket -> Account-B.Lambda-function
Run Code Online (Sandbox Code Playgroud)
这是我做的:
lambda:InvokeFunctionLambda函数GetObject从任何地方进行访问(这应该进一步锁定,但对于实验来说已足够)ObjectCreate (All)通过其ARN引用Lambda函数然后我在另一个区域用桶重复实验,它失败了,说:
通知目标服务区域对于存储区位置约束无效
在新的 S3 控制台中,转到 S3 控制台并打开您的存储桶。单击属性选项卡 -> 事件。您需要授予 S3 调用 Lambda 函数的权限。请参阅:配置 Amazon s3 存储桶以运行在另一个账户中创建的 Lambda 函数