我已经在几个区域部署了一个Lambda函数。我想发布一个消息到SNS,来调用这些函数。
使用aws-cli,我创建了主题,并给Lambda授予了与SNS通信的权限,并创建了订阅。订阅似乎成功创建了,并且我可以在AWS控制台中看到它。但是,它不起作用。Lambda函数没有被调用。
我已经在几个区域部署了一个Lambda函数。我想发布一个消息到SNS,来调用这些函数。
使用aws-cli,我创建了主题,并给Lambda授予了与SNS通信的权限,并创建了订阅。订阅似乎成功创建了,并且我可以在AWS控制台中看到它。但是,它不起作用。Lambda函数没有被调用。
这是基于CloudFormation
的示例。您需要为Lambda
函数添加对SNS
的调用权限:
{
"Type" : "AWS::Lambda::Permission",
"Properties" : {
"FunctionName" : { "Fn::GetAtt" : [ "YourLambda", "Arn" ] },
"Action" : "lambda:InvokeFunction",
"Principal" : "sns.amazonaws.com",
"SourceArn" : { "Ref" : "YourSNSTopicArn" }
}
}
然后,您需要订阅您的Lambdas
到您的SNS
主题。这可以通过API调用或通过CloudFormation
完成。
{
"Type" : "AWS::SNS::Topic",
"Properties" : {
"TopicName" : "YourTopicName",
"Subscription" : [ {
"Endpoint" : { "Fn::GetAtt" : [ "YourLambda", "Arn" ] },
"Protocol": "lambda"
} ]
}
}
如果您缺少以上任何内容,您的Lambdas
将无法调用。以上信息的来源是官方博客文章通过SNS调用Lambda函数。--region ${REGION} \
--function-name ${FUNCTION_ARN}:PROD \
--statement-id sns-invoke \
--action lambda:invokeFunction \
--principal sns.amazonaws.com \
--source-arn arn:aws:sns:us-west-2:${ACCT_NUM}:prod-reducer-us-west-2```
这将使生产主题能够调用lambda函数的PROD别名。
- Shane H