amazon web services - sqs - No se puede crear un origen de evento SNS en una función Lambda usando CloudFormation
costo sms aws (2)
Este es el código de la plantilla de Cloudformation relacionado con mi problema:
"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": [...]
Puedo ver el tema en el panel de control de SNS :
Pero no se muestra en el panel de orígenes de eventos de la función lambda:
Lo extraño de esto, es que si creo una nueva suscripción desde el panel de control de SNS para esa misma función lambda, no se creará una nueva suscripción ya que sería un duplicado exacto. Sin embargo, ahora si reviso el panel Orígenes de eventos en el panel de control de Lambda , puedo ver una nueva entrada para el SNS: JumpboxPresenceTopic
:
Siento que es un problema del lado de Amazon pero podría estar equivocado. ¿Hay algún problema con mi enfoque o es una limitación de AWS?
Agregar el nombre de la función adecuada y la fuente en los permisos ayudó a resolver el problema
"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" }
}
}
},
Debe otorgar permiso SNS para invocar Lambda primero. Aquí hay un ejemplo de AWS. Cámbielo de S3 a SNS y no olvide configurar SourceArn como el ARN de SNS Topic.
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html