Невозможно создать источник событий SNS для функции Lambda с помощью CloudFormation
Это код шаблона 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": [...]
Я вижу эту тему на панели SNS:
![введите описание изображения здесь]()
Но он не отображается в панели событий событий лямбды:
![введите описание изображения здесь]()
Странно, что если я создаю новую подписку с панели SNS для этой же лямбда-функции, новая подписка не будет создана, поскольку она будет точным дубликатом. Однако теперь, если я проверил панель "Источники событий" на панели "Лямбда", я могу увидеть новую запись для SNS: JumpboxPresenceTopic
:
![введите описание изображения здесь]()
Я чувствую, что это проблема на стороне Амазонки, но я могу ошибаться. Что-то не так с моим подходом или это ограничение AWS?
Ответы
Ответ 1
Вы должны предоставить разрешение SNS для первого вызова Lambda.
Вот пример из AWS. Пожалуйста, измените его с S3 на SNS и не забудьте установить SourceArn в качестве ARN темы SNS.
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html
Ответ 2
Добавление правильного имени функции и источника в разрешениях помогло решить проблему
"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" }
}
}
},