我有一个AWS lambda函数,我通过apex创建 . 我还通过terraform创建了一个SNS主题和一个订阅 .
我的主题是: arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions
我有一个订阅: arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions:2da1d182-946d-4afd-91cb-1ed3453c5d86
,类型为 lambda
, endpoints 为: arn:aws:lambda:ap-southeast-1:178284945954:function:wowauctions_get_auction_data
我已经确认这是ARN的正确功能 . 一切似乎正确连线:
我手动触发SNS:
aws sns publish
--topic-arn arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions
--message '{"endpoint": "https://us.api.battle.net", "realm": "spinebreaker"}'
它返回消息ID但不会发生调用 . 为什么?
4 回答
我添加了一个内联策略来允许调用lambda:
它现在正在运作 .
正如Robo在评论中提到的,添加基于
Principal
的权限是最简单的方法:对我来说,问题是我在我的cloudformation模板中的
AWS::Lambda::Permission
中指定了SourceAccount
参数,documentation表示以下内容:我一删除
SourceAccount
,一切正常 .有相同的问题:1)创建和部署简单的lambda 2)从java sdk手动创建aws sns主题3)从java sdk创建sns订阅(sns主题和lambda之间的订阅)
然后我遇到了一个问题,当从控制台向主题推送一些消息时 - 它没有被lambda拦截 . 而且,sns触发器甚至没有在lambda中注册 .
所以我只使用这个命令解决了这个问题:https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html
运行
aws lambda add-permission ......
后,一切都被拿起并正常工作 .