我正试图通过帐户'A'中的Kinesis流在帐号'B'中触发lambda。这类似于所描述的here,除了示例使用S3而不是Kinesis。
要做到这一点,我正在尝试设置正确的权限,但遇到了困难。
首先我添加此权限:
aws lambda add-permission \
--function-name "$function_name" \
--statement-id 'Id-123' \
--action "lambda:InvokeFunction" \
--principal $source_account \
--source-arn "$stream_arn" \
--source-account $source_account \
--region us-east-1 \
--profile "$profile"
$source_account
是“A”的帐户ID。
然后我尝试创建源映射:
aws lambda create-event-source-mapping \
--event-source-arn "$stream_arn" \
--function-name "$function_name" \
--starting-position TRIM_HORIZON \
--region us-east-1 \
--profile "$profile"
我收到以下错误:
调用CreateEventSourceMapping操作时发生客户端错误(InvalidParameterValueException):角色和事件源必须与云函数位于同一帐户中
我不明白这个错误。它说我想做的事是不可能的吗?但是后来如何用S3完成here,这本质上是相同的机制?
答案 0 :(得分:0)
不支持在AWS Kinesis和Lambda之间创建跨账户事件源映射。 Kinesis事件源映射使用轮询,而不是S3的推送模型。
答案 1 :(得分:0)
Amazon Kinesis流的AWS Lambda函数仅在两者都在同一帐户中时有效。
如果您要调用帐户B中的函数,则可以将部署在帐户A中的扇出功能钩接到帐户A中的流中,并要求它以交叉帐户角色调用帐户B中的函数。目标类型为Lambda并指定帐户B中的角色。