设置RawMessageDelivery为false创建SNS-Lambda订阅遇AWS错误求助
Lambda订阅SNS时RawMessageDelivery属性报错的解决
你遇到的问题核心是:Lambda作为SNS订阅端点时,SNS API不允许在订阅属性中包含RawMessageDelivery键——不管你把它设为true还是false。AWS的校验逻辑是只要这个属性存在,就会判定你在尝试配置原始消息投递,而Lambda协议本身不支持这个功能,因此直接返回错误。
结合你引用的AWS文档:
当设置为true时,[RawMessageDelivery]将为Amazon SQS或HTTP/S端点启用原始消息投递。
明确可以看到,RawMessageDelivery仅针对SQS、HTTP/S端点生效,Lambda不在支持范围内。对于Lambda订阅,默认就是非原始消息投递的模式,完全不需要显式设置这个属性。
修正后的代码
直接移除包含RawMessageDelivery的属性配置即可:
sns_client = boto3.client('sns', region_name='us-east-2') topic_arn = 'arn:aws:sns:us-east-2:myacct:my-topic' protocol = 'lambda' endpoint = 'arn:aws:lambda:us-east-2:myacct:function:my-lambda-function' # 无需传递Attributes参数,默认行为即为非原始消息投递 sns_client.subscribe(TopicArn=topic_arn, Protocol=protocol, Endpoint=endpoint)
如果后续需要为Lambda订阅配置其他支持的属性(比如FilterPolicy),只需在Attributes字典中添加对应键值对,不要包含RawMessageDelivery即可。
内容的提问来源于stack exchange,提问作者lreeder
相关产品推荐
相关产品推荐

