Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS Lambda & SNS: Invoke Lambda cross-region

I have a Lambda function deployed to several regions. I would like to publish a message to SNS that will invoke these functions.

Using aws-cli I've created the topics, given Lambda permission to talk to SNS, and create the subscriptions. The subscription appears to be created successfully, and I can see it in the AWS console. But, it doesn't work. The lambda function does not get invoked.

like image 907
Shane H Avatar asked Jan 26 '16 03:01

Shane H


1 Answers

This is CloudFormation based example. You have to add invoke permission for SNS to the Lambda functions:

{
    "Type" : "AWS::Lambda::Permission",
    "Properties" : {
        "FunctionName" : { "Fn::GetAtt" : [ "YourLambda", "Arn" ] },
        "Action" : "lambda:InvokeFunction",
        "Principal" : "sns.amazonaws.com",
        "SourceArn" : { "Ref" : "YourSNSTopicArn" }
    }
}

Then you need to subscribe your Lambdas to your SNS topic. This can be done via API call or through CloudFormation.

{
    "Type" : "AWS::SNS::Topic",
    "Properties" : {
        "TopicName" : "YourTopicName",
        "Subscription" : [ {
            "Endpoint" : { "Fn::GetAtt" : [ "YourLambda", "Arn" ] },
            "Protocol": "lambda"
        } ]
    }
}

If you're missing any of this, your Lambdas won't invoke. Source for the above information is the official blog article Invoking Lambda functions via SNS.

like image 80
adamkonrad Avatar answered Sep 22 '22 18:09

adamkonrad