AWS Lambda & SNS:跨区域调用Lambda
AWS Lambda & SNS: Invoke Lambda cross-region
我将 Lambda 函数部署到多个区域。我想向将调用这些函数的 SNS 发布一条消息。
我使用 aws-cli 创建了主题,授予 Lambda 与 SNS 对话的权限,并创建了订阅。订阅似乎已成功创建,我可以在 AWS 控制台中看到它。但是,它不起作用。 lambda 函数不会被调用。
这是基于 CloudFormation
的示例。您必须将 SNS
的调用权限添加到 Lambda
函数:
{
"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
将不会调用。以上信息来源为官方博文Invoking Lambda functions via SNS.
我将 Lambda 函数部署到多个区域。我想向将调用这些函数的 SNS 发布一条消息。
我使用 aws-cli 创建了主题,授予 Lambda 与 SNS 对话的权限,并创建了订阅。订阅似乎已成功创建,我可以在 AWS 控制台中看到它。但是,它不起作用。 lambda 函数不会被调用。
这是基于 CloudFormation
的示例。您必须将 SNS
的调用权限添加到 Lambda
函数:
{
"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
将不会调用。以上信息来源为官方博文Invoking Lambda functions via SNS.