如何通过Boto3 put_targets正确配置EventBridge规则的Target Input
解决EventBridge Target常量输入无法生效的问题
核心解决方案:不要使用带缩进格式的JSON字符串作为EventBridge Target的Input值,改用无多余空白的紧凑JSON格式即可解决部署后无需手动干预的问题。
问题原因
EventBridge的Target Input字段要求传入严格符合JSON规范的字符串,带缩进(indent=2)的JSON虽然语法合法,但多余的换行、缩进空格可能导致EventBridge内部解析异常。而控制台的「Prettify」按钮本质是重新格式化JSON字符串,去除了可能干扰解析的格式冗余,因此手动操作后输入恢复正常。
修改后的代码
将json.dumps的参数调整为生成紧凑JSON:
state_machine_input = { 'STATE_MACHINE_DEFINITION_NAME': event_dict.get('workflowToBeTriggered'), 'LDAP_USER': event_dict.get('updatedBy') } eventbridge_client = boto3.client('events') response = eventbridge_client.put_targets( Rule=f"{EVENT_NAMING_SUFFIX}{event_dict.get('name')}", Targets=[ { 'Id': SM_INITIATION_LAMBDA_FUNCTION_NAME, 'Arn': SM_INITIATION_LAMBDA_FUNCTION_ARN, 'Input': json.dumps(state_machine_input, separators=(',', ':')) } ] )
补充说明
separators=(',', ':')参数会生成无空格的紧凑JSON(例如{"key":"value","key2":"value2"}),完全符合EventBridge的解析要求。- 若你的输入包含非ASCII字符,可追加
ensure_ascii=False参数,但需确保Lambda能正确处理UTF-8编码的输入。 - 无需保留
indent参数,它是导致格式冗余的核心原因。
内容的提问来源于stack exchange,提问作者Mondy
相关产品推荐
相关产品推荐

