View a markdown version of this page

Automatisieren Sie das Messaging von Amazon SNS zu Amazon SQS mit AWS CloudFormation - Amazon Simple Notification Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Automatisieren Sie das Messaging von Amazon SNS zu Amazon SQS mit AWS CloudFormation

CloudFormation ermöglicht es Ihnen, eine Vorlagendatei zu verwenden, um eine Sammlung von AWS Ressourcen zusammen als eine Einheit zu erstellen und zu konfigurieren. Dieser Abschnitt enthält eine Beispielvorlage, die das Bereitstellen von Themen, die für Warteschlangen veröffentlicht werden, vereinfacht. Die Vorlagen übernehmen für Sie die Einrichtung und führen folgende Schritte aus: Erstellen von zwei Warteschlangen, Erstellen eines Themas mit Abonnements für die Warteschlangen, Hinzufügen einer Richtlinie zu den Warteschlangen, sodass das Thema Nachrichten an die Warteschlangen senden kann, und Erstellen von IAM-Benutzern und -Gruppen, um den Zugriff auf diese Ressourcen zu steuern.

Weitere Informationen zur Bereitstellung von AWS Ressourcen mithilfe einer CloudFormation Vorlage finden Sie im CloudFormation Benutzerhandbuch unter Erste Schritte.

Unter Verwendung einer CloudFormation Vorlage zum Einrichten von Themen und Warteschlangen innerhalb einer AWS-Konto

Die Beispielvorlage erstellt ein Amazon-SNS-Thema, das Nachrichten an zwei Amazon-SQS-Warteschlanges senden kann, mit den entsprechenden Berechtigungen für die Mitglieder einer IAM-Gruppe für die Veröffentlichung zum Thema und einer weiteren zum Lesen von Nachrichten aus den Warteschlangen. Die Vorlage erstellt außerdem IAM-Benutzer, die jeder Gruppe hinzugefügt werden.

Sie kopieren den Inhalt der Vorlage in eine Datei. Sie können die Vorlage auch von der AWS CloudFormation Vorlagenseite herunterladen. Wählen Sie auf der Vorlagenseite die Option Beispielvorlagen nach AWS Service durchsuchen und wählen Sie dann Amazon Simple Queue Service aus.

MySNSTopic ist so eingerichtet, dass es auf zwei abonnierten Endpunkten veröffentlicht, bei denen es sich um zwei Amazon SQS-Warteschlangen (1 und 2) handelt. MyQueue MyQueue MyPublishTopicGroup ist eine IAM-Gruppe, deren Mitglieder berechtigt sind, mithilfe der API-Aktion Publish oder des Befehls sns-publish auf mySNSTopic zu veröffentlichen. https://docs.aws.amazon.com/sns/latest/api/API_Publish.html https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html Die Vorlage erstellt die IAM-Benutzer MyPublishUser und gibt ihnen Anmeldeprofile MyQueueUser und Zugriffsschlüssel. Der Benutzer, der einen Stack mit dieser Vorlage erstellt, gibt die Passwörter für die Anmeldeprofile als Eingabeparameter an. Die Vorlage erstellt Zugriffsschlüssel für die beiden IAM-Benutzer mit MyPublishUserKey und. MyQueueUserKey AddUserToMyPublishTopicGroup fügt dem MyPublishUser hinzu, MyPublishTopicGroup sodass dem Benutzer die Berechtigungen zugewiesen werden, die der Gruppe zugewiesen werden.

MyRDMessageQueueGroup ist eine IAM-Gruppe, deren Mitglieder die Berechtigung haben, mithilfe der API-Aktionen und Nachrichten aus den beiden Amazon SQS-Warteschlangen zu lesen ReceiveMessage und DeleteMessage zu löschen. AddUserToMyQueueGroup fügt MyQueueUser hinzu, MyRDMessageQueueGroup sodass dem Benutzer die Berechtigungen zugewiesen werden, die der Gruppe zugewiesen werden. MyQueuePolicy erteilt mySNSTopic die Erlaubnis, seine Benachrichtigungen in den beiden Warteschlangen zu veröffentlichen.

Die folgende Liste zeigt den Inhalt der Vorlage. CloudFormation

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "AWS CloudFormation Sample Template SNSToSQS: This Template creates an SNS topic that can send messages to two SQS queues with appropriate permissions for one IAM user to publish to the topic and another to read messages from the queues. MySNSTopic is set up to publish to two subscribed endpoints, which are two SQS queues (MyQueue1 and MyQueue2). MyPublishUser is an IAM user that can publish to MySNSTopic using the Publish API. MyTopicPolicy assigns that permission to MyPublishUser. MyQueueUser is an IAM user that can read messages from the two SQS queues. MyQueuePolicy assigns those permissions to MyQueueUser. It also assigns permission for MySNSTopic to publish its notifications to the two queues. The template creates access keys for the two IAM users with MyPublishUserKey and MyQueueUserKey. ***Warning*** you will be billed for the AWS resources used if you create a stack from this template.", "Parameters": { "MyPublishUserPassword": { "NoEcho": "true", "Type": "String", "Description": "Password for the IAM user MyPublishUser", "MinLength": "1", "MaxLength": "41", "AllowedPattern": "[a-zA-Z0-9]*", "ConstraintDescription": "must contain only alphanumeric characters." }, "MyQueueUserPassword": { "NoEcho": "true", "Type": "String", "Description": "Password for the IAM user MyQueueUser", "MinLength": "1", "MaxLength": "41", "AllowedPattern": "[a-zA-Z0-9]*", "ConstraintDescription": "must contain only alphanumeric characters." } }, "Resources": { "MySNSTopic": { "Type": "AWS::SNS::Topic", "Properties": { "Subscription": [{ "Endpoint": { "Fn::GetAtt": ["MyQueue1", "Arn"] }, "Protocol": "sqs" }, { "Endpoint": { "Fn::GetAtt": ["MyQueue2", "Arn"] }, "Protocol": "sqs" } ] } }, "MyQueue1": { "Type": "AWS::SQS::Queue" }, "MyQueue2": { "Type": "AWS::SQS::Queue" }, "MyPublishUser": { "Type": "AWS::IAM::User", "Properties": { "LoginProfile": { "Password": { "Ref": "MyPublishUserPassword" } } } }, "MyPublishUserKey": { "Type": "AWS::IAM::AccessKey", "Properties": { "UserName": { "Ref": "MyPublishUser" } } }, "MyPublishTopicGroup": { "Type": "AWS::IAM::Group", "Properties": { "Policies": [{ "PolicyName": "MyTopicGroupPolicy", "PolicyDocument": { "Statement": [{ "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": { "Ref": "MySNSTopic" } }] } }] } }, "AddUserToMyPublishTopicGroup": { "Type": "AWS::IAM::UserToGroupAddition", "Properties": { "GroupName": { "Ref": "MyPublishTopicGroup" }, "Users": [{ "Ref": "MyPublishUser" }] } }, "MyQueueUser": { "Type": "AWS::IAM::User", "Properties": { "LoginProfile": { "Password": { "Ref": "MyQueueUserPassword" } } } }, "MyQueueUserKey": { "Type": "AWS::IAM::AccessKey", "Properties": { "UserName": { "Ref": "MyQueueUser" } } }, "MyRDMessageQueueGroup": { "Type": "AWS::IAM::Group", "Properties": { "Policies": [{ "PolicyName": "MyQueueGroupPolicy", "PolicyDocument": { "Statement": [{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": [{ "Fn::GetAtt": ["MyQueue1", "Arn"] }, { "Fn::GetAtt": ["MyQueue2", "Arn"] } ] }] } }] } }, "AddUserToMyQueueGroup": { "Type": "AWS::IAM::UserToGroupAddition", "Properties": { "GroupName": { "Ref": "MyRDMessageQueueGroup" }, "Users": [{ "Ref": "MyQueueUser" }] } }, "MyQueuePolicy": { "Type": "AWS::SQS::QueuePolicy", "Properties": { "PolicyDocument": { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": ["sqs:SendMessage"], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": { "Ref": "MySNSTopic" } } } }] }, "Queues": [{ "Ref": "MyQueue1" }, { "Ref": "MyQueue2" }] } } }, "Outputs": { "MySNSTopicTopicARN": { "Value": { "Ref": "MySNSTopic" } }, "MyQueue1Info": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyQueue1", "Arn"] }, "URL:", { "Ref": "MyQueue1" } ] ] } }, "MyQueue2Info": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyQueue2", "Arn"] }, "URL:", { "Ref": "MyQueue2" } ] ] } }, "MyPublishUserInfo": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyPublishUser", "Arn"] }, "Access Key:", { "Ref": "MyPublishUserKey" }, "Secret Key:", { "Fn::GetAtt": ["MyPublishUserKey", "SecretAccessKey"] } ] ] } }, "MyQueueUserInfo": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyQueueUser", "Arn"] }, "Access Key:", { "Ref": "MyQueueUserKey" }, "Secret Key:", { "Fn::GetAtt": ["MyQueueUserKey", "SecretAccessKey"] } ] ] } } } }