Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Automatisez la messagerie Amazon SNS vers Amazon SQS avec AWS CloudFormation
AWS CloudFormation vous permet d'utiliser un fichier modèle pour créer et configurer un ensemble de AWS ressources en une seule unité. Cette section comporte un exemple de modèle qui simplifie le déploiement de rubriques qui effectuent des publications dans des files d'attente. Les modèles exécutent automatiquement les étapes de configuration en créant deux files d'attente et une rubrique avec des abonnements aux files d'attente, en ajoutant une politique aux files d'attente afin que la rubrique puisse leur envoyer des messages, et en créant des utilisateurs et des groupes IAM pour contrôler l'accès à ces ressources.
Pour plus d'informations sur le déploiement de AWS ressources à l'aide d'un AWS CloudFormation modèle, consultez la section Get Started du guide de AWS CloudFormation l'utilisateur.
Utilisation d'un AWS CloudFormation modèle pour configurer des sujets et des files d'attente dans un Compte AWS
L'exemple de modèle crée une rubrique Amazon SNS qui peut envoyer des messages à deux files d'attente Amazon SQS avec les autorisations appropriées pour permettre aux membres d'un groupe IAM d'effectuer une publication dans la rubrique et à un autre de lire les messages en attente. Le modèle crée également des utilisateurs IAM qui sont ajoutés à chaque groupe.
Vous copiez le contenu du modèle dans un fichier. Vous pouvez également télécharger le modèle depuis la page AWS
CloudFormation Modèles
My SNSTopic est configuré pour publier sur deux points de terminaison abonnés, à savoir deux files d'attente Amazon SQS MyQueue (1 MyQueue et 2). MyPublishTopicGroup est un groupe IAM dont les membres sont autorisés à publier sur My à l'SNSTopic aide de l'action API Publish ou de la commande sns-publish. Le modèle crée les utilisateurs IAM MyPublishUser MyQueueUser et leur fournit des profils de connexion et des clés d'accès. L'utilisateur qui crée une pile avec ce modèle spécifie les mots de passe des profils de connexion en tant que paramètres d'entrée. Le modèle crée des clés d'accès pour les deux utilisateurs IAM avec MyPublishUserKey et MyQueueUserKey. AddUserToMyPublishTopicGroup ajoute MyPublishUser au MyPublishTopicGroup afin que l'utilisateur dispose des autorisations attribuées au groupe.
Il RDMessage QueueGroup s'agit d'un groupe IAM dont les membres sont autorisés à lire et à supprimer les messages des deux files d'attente Amazon SQS à l'aide des actions et de ReceiveMessagel'DeleteMessageAPI. AddUserToMyQueueGroup MyQueueUser s'ajoute au My RDMessage QueueGroup afin que l'utilisateur dispose des autorisations attribuées au groupe. MyQueuePolicy autorise My à publier ses notifications SNSTopic aux deux files d'attente.
La liste suivante indique le contenu du AWS CloudFormation modèle.
{ "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"] } ] ] } } } }