这是与我的问题相关的 Cloudformation 模板代码:
"SNSTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"TopicName": "JumpboxPresenceTopic",
"DisplayName": "Jumpbox Presence Topic",
"Subscription": [
{
"Endpoint": {
"Fn::GetAtt": [
"Lambda",
"Arn"
]
},
"Protocol": "lambda"
}
]
}
},
"Lambda": {
"Type": "AWS::Lambda::Function",
"Properties": [...]
但它不会显示在lambda函数 Event Sources 面板中:
关于这一点的奇怪之处在于,如果我从 SNS 仪表板为同一个lambda函数创建一个新订阅,则不会创建新的订阅,因为它将完全相同。但是,现在,如果我检查 Lambda仪表板中的事件源面板,我可以看到SNS: JumpboxPresenceTopic
的新条目:
我觉得这在亚马逊方面是一个问题,但我可能错了。我的方法有问题还是AWS的限制?
答案 0 :(得分:14)
您必须先授予SNS权限才能调用Lambda。 以下是AWS的一个示例。请将其从S3更改为SNS,不要忘记将SourceArn设置为SNS主题ARN。
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html
答案 1 :(得分:1)
在权限中添加正确的函数名称和sourcearn有助于解决问题
"MySNSTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"TopicName": "MyTopic",
"DisplayName": "My Test Topic",
"Subscription": [
{
"Endpoint": { "Fn::GetAtt" : ["Lambda", "Arn"] },
"Protocol": "lambda"
}
]
}
},
"PermissionForEventsToInvokeLambda": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"FunctionName": { "Fn::GetAtt" : ["Lambda", "Arn"] },
"Action": "lambda:InvokeFunction",
"Principal": "sns.amazonaws.com",
"SourceArn": { "Ref": "MySNSTopic" }
}
}
},