是否有人以编程方式将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
此时主题出现在主题的触发器列表中,但未启用。
有什么想法吗?
答案 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/