以编程方式将SNS触发器添加(并启用)到AWS中的Lambda函数

时间:2016-10-03 18:39:14

标签: aws-lambda

是否有人以编程方式将SNS主题添加为AWS中的Lambda函数的触发器并以编程方式启用它?我正在使用Powershell AWS SDK尝试以下操作,并且可以执行所有操作,但启用它。

首先,我找到了我的一个主题(myTopic):

$snsTopicArn = (Get-SNSTopic | {$_.TopicArn -match "myTopic"}).TopicArn

准备订阅lambda端点($ lambdaARN)

Connect-SNSNotification -TopicArn $snsTopicArn -Protocol lambda -Endpoint $lambdaArn `
                        -Confirm:$FALSE | Out-Null

由于此函数返回订阅arn而不是令牌,因此文档告诉我假设订阅已经自动确认,并且不需要" ConfirmSubscription" (确认-SNSSubscription)电话。

接下来,我添加Lambda的资源策略权限,以便运行Lambda。

Add-LMPermission -FunctionName $lambdaName -Action "lambda:Invoke" `
                 -Principal sns.amazonaws.com -SourceArn $snsTopicArn `
                 -StatementId (Get-Random) | Out-Null

此时主题出现在主题的触发器列表中,但未启用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对于任何有兴趣的人,我找到了答案。结果输入有效的lambda动作很重要。 :)

在与AWS支持聊天约一小时后,我发现我没有在"添加权限"中指定有效的lambda操作。拨打:

lambda:Invoke

实际应该是这样的:

lambda:InvokeFunction

或此通配符表达式:

lambda:Invoke*

"调用"是函数名称,而不是操作(权限)名称。他们的关系在这里提到: http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html

如有疑问,AWS有一个策略模拟器,列出其服务的所有AWS操作: https://policysim.aws.amazon.com/