EventBridge调用Lambda目标:资源策略与Targets字段配置咨询
问题解答
1. 基于资源的策略配置位置
基于资源的策略是直接配置在目标Lambda函数上的,和EventBridge put_rule里的RoleArn字段无关。你需要给目标Lambda添加资源权限策略,允许EventBridge服务主体(events.amazonaws.com)调用它,这样就不用给EventBridge规则指定IAM角色了。
用boto3配置Lambda资源策略的示例代码:
lambda_client = boto3.client('lambda') response = lambda_client.add_permission( FunctionName='目标Lambda的函数名或ARN', StatementId='EventBridgeInvokePermission', Action='lambda:InvokeFunction', Principal='events.amazonaws.com', SourceArn='你的EventBridge规则ARN' # 可选配置,限制仅该规则能调用,更安全 )
2. RoleArn字段的处理
当使用基于资源的策略时,EventBridge规则的RoleArn字段可以留空,不需要填写任何值。因为调用权限已经通过目标Lambda的资源策略授予,规则无需额外IAM角色就能执行调用。
3. Targets部分必填字段
在put_targets的Targets列表中,每个目标对象至少需要以下字段:
Id: 目标的唯一标识符(比如"NotificationLambdaTarget"),用于区分多个目标Arn: 目标Lambda函数的完整ARN
可选但常用的字段:
Input: 传递给Lambda的自定义输入数据(JSON字符串格式)InputPath: 提取事件中的特定路径作为Lambda输入(比如"$.detail")
完整的put_targets示例代码:
response = eventclient.put_targets( Rule='notificationScheduler', Targets=[ { 'Id': 'NotificationTargetLambda', 'Arn': 'arn:aws:lambda:区域:账号ID:function:目标函数名' # 可选:'Input': '{"reminder": "即将到期"}' } ] )
内容的提问来源于stack exchange,提问作者Ahmed Youniss
相关产品推荐
相关产品推荐

