これは私の問題に関連するCloudformationテンプレートコードです:
"SNSTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"TopicName": "JumpboxPresenceTopic",
"DisplayName": "Jumpbox Presence Topic",
"Subscription": [
{
"Endpoint": {
"Fn::GetAtt": [
"Lambda",
"Arn"
]
},
"Protocol": "lambda"
}
]
}
},
"Lambda": {
"Type": "AWS::Lambda::Function",
"Properties": [...]
[〜#〜] sns [〜#〜]ダッシュボードでトピックを確認できます:
これについての奇妙なことは、同じラムダの[〜#〜] sns [〜#〜]ダッシュボードから新しいサブスクリプションを作成する場合です関数の場合、完全に重複するため、新しいサブスクリプションは作成されません。ただし、LambdaダッシュボードのEvent Sourcesパネルを確認すると、SNS: JumpboxPresenceTopic
の新しいエントリが表示されます:
アマゾン側の問題だと思いますが、間違っているかもしれません。私のアプローチに何か問題がありますか、それともAWSの制限ですか?
最初にLambdaを呼び出すには、SNS権限を付与する必要があります。これはAWSの例です。 S3からSNSに変更し、SourceArnをSNSトピックARNとして設定することを忘れないでください。
http://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html
パーミッションに適切な関数名とsourcearnを追加すると、問題の解決に役立ちました
"MySNSTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"TopicName": "MyTopic",
"DisplayName": "My Test Topic",
"Subscription": [
{
"Endpoint": { "Fn::GetAtt" : ["Lambda", "Arn"] },
"Protocol": "lambda"
}
]
}
},
"PermissionForEventsToInvokeLambda": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"FunctionName": { "Fn::GetAtt" : ["Lambda", "Arn"] },
"Action": "lambda:InvokeFunction",
"Principal": "sns.amazonaws.com",
"SourceArn": { "Ref": "MySNSTopic" }
}
}
},