17

Jest to kod Cloudformation szablon związany z moim problemem:Nie można utworzyć źródło SNS wydarzenie w funkcji lambda stosując 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": [...] 

Widzę temat w SNS desce rozdzielczej: enter image description here

Ale to nie są wyświetlane w funkcji lambda źródeł zdarzeń panel: enter image description here

Dziwne jest to, że jeśli utworzę nowy subskrypcję z pulpitu nawigacyjnego SNS dla tej samej funkcji lambda, nie zostanie utworzona żadna nowa subskrypcja, ponieważ będzie to dokładny duplikat. Jednakże, jeśli mogę sprawdzić źródeł zdarzeń panel w desce rozdzielczej Lambda teraz, widzę nowy wpis na SNS: JumpboxPresenceTopic: enter image description here

czuję, że jest to problem na stronie Amazona, ale mogę się mylić. Czy jest coś nie tak z moim podejściem, czy też jest to ograniczenie AWS?

Odpowiedz

13

Musisz najpierw zezwolić SNS na wywołanie Lambdy. Oto przykład z AWS. Zmień go z S3 na SNS i nie zapomnij ustawić SourceArn jako tematu SNS ARN.

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html

+1

mam przeżywa podobny problem, a gdy ta odpowiedź nie pomaga uzyskać konfigurację uprawnień źródłowe w lambda, powiadomienie sns go nie wywołuje, inne pomysły dlaczego? – Onema

+5

@Narzędzie miałem podobny problem, wsparcie AWS powiedział mi, aby usunąć "SourceAccount" i dodać "SourceArn" wskazał na temat SNS w zasobach Permission, mam nadzieję, że pomaga! – deviavir

+0

@deviavir, Yes! to także rozwiązało mój problem. Skończyło się na użyciu tylko "SourceArn". – Onema

0

Dodawanie właściwą nazwę funkcji i sourcearn w uprawnieniach pomogły rozwiązać problemu

"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" } 
      } 
     } 
    },