当任何对象进入账户 A S3 存储桶时,我想在账户 B 中运行 lambda。
但是我听说我们只能从同一个账户 S3 访问 Lambda,对于跨账户 S3 Lambda 访问,我必须在同一个账户中运行 Lambda 并制作另一个运行另一个账户 Lambda 的触发器:
有人可以帮助我哪个选项是可能的吗?如果是这样怎么办?
最佳答案
@John 的解决方案有效,但我想在他的回答中添加某些步骤。
us-east-1
中创建地区。不同地区会抛出如下错误:The notification destination service region is not valid for the bucket location constraint
以下是我创建触发器的步骤:
Account-A.S3-bucket -> Account-B.Lambda-function
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 和打印(事件)日志出现在 Cloudwatch 日志中。
关于amazon-web-services - Amazon S3 在另一个账户中触发另一个 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445572/