我正在尝试触发Lambda函数以在更新到s3存储桶时运行。我试图触发Lambda的s3存储桶位于单独的AWS账户中。
我尝试过的方法是在s3存储桶中设置一个角色,该存储桶具有s3存储桶的所有权限。然后在Lambda的帐户中我有一个角色,在这个角色中扮演角色,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::..."
]
}
]
}
我无法在存储桶列表中看到s3存储桶来触发Lambda事件。
在单独的帐户中使用s3存储桶来触发Lambda可能吗?这是正确的解决方案吗?
答案 0 :(得分:10)
更新:似乎可以实现从S3实际的跨帐户触发Lambda函数。请参阅:Using Resource-Based Policies for AWS Lambda (Lambda Function Policies)
旧回答:
Amazon S3 可以在向存储桶添加或删除对象时触发 AWS Lambda 功能。
但是,此触发器必须在存储桶本身设置 。您将需要存储桶的所有者(或具有足够权限的人)来设置配置以触发Lambda。
此外,被调用的Lambda函数必须位于与Amazon S3存储桶相同的帐户中。您可以在一个帐户中创建一个Lambda函数,然后在另一个帐户中调用Lambda函数(给定足够的权限),但是对于帐户A中的存储桶,不可能直接触发帐户中的Lambda函数乙
答案 1 :(得分:3)
让我们假设您的存储桶位于Account-A中,而您的lambda位于Account-B中。您实际上可以通过以下方式执行此操作:
添加要从中调用的lambda函数的权限 帐户 - S3存储桶事件:
aws lambda add-permission \
--function-name MyFunction \
--region <your-region> \
--statement-id <whatever> \
--action "lambda:InvokeFunction" \
--principal s3.amazonaws.com \
--source-arn <source-bucket-arn> \
--source-account <Account-A-id> \
在触发S3的事件中,指定lambda函数的ARN