Der Versuch, eine Cloud-Formationsvorlage mit SNS und SQS zu erstellen, funktioniert, aber es kommen nie Nachrichten an

StackOverflow https://stackoverflow.com//questions/25072902

Frage

Nachdem ich die Dokumente durchgesehen hatte, schrieb ich die folgende Cloud-Formationsvorlage, um ein SNS-Thema und ein SQS-Thema zu erstellen und das Thema in der SQS-Warteschlange zu abonnieren:

{
    "AWSTemplateFormatVersion": "2010-09-09",

    "Description": "Creates the SNS topic, SQS queue and instance that will service the custom resources queue",

    "Parameters": {
        "Environment": {
            "Description": "Environment in which to manage queues",
            "Type": "String",
            "Default": "qa",
            "AllowedValues": [ "development", "qa", "staging", "production"]
        },    
        "EmailAddress": {
            "Description": "Email to where notifications will be sent",
            "Type": "String",
            "Default": "example@email.com"
        }
    },

    "Resources": {
        "CustomResourcesQueue": {
            "Type": "AWS::SQS::Queue",
            "Properties": {
                "ReceiveMessageWaitTimeSeconds": 20,
                "VisibilityTimeout": 60,
                "QueueName": {
                    "Fn::Join": ["-", ["cloud_formation_custom_resources", {
                        "Ref": "Environment"
                    }]]
                }
            }
        },
        "CustomResourcesTopic": {
            "Type": "AWS::SNS::Topic",
            "Properties": {
                "Subscription": [
                    {
                        "Endpoint": {
                            "Ref": "EmailAddress"
                        },
                        "Protocol": "email"
                    },
                    {
                        "Endpoint": {
                            "Fn::GetAtt": ["CustomResourcesQueue", "Arn"]
                        },
                        "Protocol": "sqs"
                    }
                ]
            }
        },
        "SNSToSQSPolicy": {
            "Type": "AWS::SQS::QueuePolicy",
            "Properties": {
                "PolicyDocument": {
                    "Id": "PushMessageToSQSPolicy",
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Sid": "allow-sns-to-send-message-to-sqs",
                            "Effect": "Allow",
                            "Action": [ "sqs:*" ],
                            "Principal": {
                                "AWS": "*"
                            },
                            "Resource": {
                                "Ref": "CustomResourcesTopic"
                            },
                            "Condition": {
                                "StringEquals": {
                                    "aws:SourceArn": {
                                        "Ref": "CustomResourcesTopic"
                                    }
                                }
                            }
                        }
                    ]
                },
                "Queues": [
                    {
                        "Ref": "CustomResourcesQueue"
                    }
                ]
            }
        }
    }
}

Die Cloud-Formation wurde erfolgreich erstellt, aber wenn ich eine Nachricht im SNS-Thema veröffentliche, erhalte ich nur die E-Mail, die Nachricht kommt nie in der SQS-Warteschlange an.

Übersehe ich hier etwas in der Richtlinie?Gibt es eine andere Möglichkeit, Wolkenformationen zu nutzen, um SNS und SQS zu verbinden?

War es hilfreich?

Lösung

Ein paar Dinge, die helfen könnten:

  • Ich habe "Resource": "*" in meiner Warteschlangenrichtlinie.
  • Ich habe ArnEquals anstatt StringEquals auf der Condition (Aber ich denke, das spielt keine Rolle).
  • Sie sollten in der Lage sein, einfach damit durchzukommen "Action": ["sqs:SendMessage"].

Andere Tipps

generasacodicetagpre.

Es ist falsch, denn hier müssen Sie die Warteschlange ARN

verwenden generasacodicetagpre.

und dieser Code denke auch, dass es falsch ist

generasacodicetagpre.

Da Sie DE THOPIC ARN verwenden sollen, und verwenden Sie den "Ref": "CustomResourcesTopic", erhalten Sie de TopicName

Also, es wird

sein generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top