Uso de una plantilla de AWS CloudFormation para crear un tema que envíe mensajes a las colas de Amazon SQS - Amazon Simple Notification Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de una plantilla de AWS CloudFormation para crear un tema que envíe mensajes a las colas de Amazon SQS

Gracias a AWS CloudFormation, puede utilizar un archivo de plantilla para crear y configurar una colección de recursos de AWS juntos como una sola unidad. Esta sección tiene una plantilla de ejemplo que facilita la implementación de temas que publiquen en colas. Las plantillas se hacen cargo de los pasos de configuración en su lugar, creando dos colas y un tema con suscripciones a las colas, añadiendo una política a las colas, de modo que el tema pueda enviar mensajes a las colas y creando usuarios y grupos de IAM para controlar el acceso a dichos recursos.

Para obtener más información sobre la implementación de recursos de AWS mediante una plantilla de AWS CloudFormation, consulte Introducción en la Guía del usuario de AWS CloudFormation.

Uso de una plantilla de AWS CloudFormation para configurar temas y colas en una Cuenta de AWS

Con la plantilla de ejemplo, se crea un tema de Amazon SNS con el que se puede enviar mensajes a dos colas de Amazon SQS con los permisos adecuados para que los miembros de un grupo de IAM puedan publicar en el tema y los de otro leer mensajes de las colas. Además, con la plantilla, se crean usuarios de IAM que se agregan a cada grupo.

Copie el contenido de la plantilla en un archivo. También puede descargar la plantilla de la página Plantillas de AWS CloudFormation. En la página de plantillas, elija Examinar las plantillas de ejemplo por servicio de AWS y, a continuación, Amazon Simple Queue Service.

MySNSTopic está configurado para publicar en dos puntos de enlace suscritos, que son dos colas de Amazon SQS (MyQueue1 y MyQueue2). MyPublishTopicGroup es un grupo de IAM cuyos miembros tienen permiso para publicar en MySNSTopic mediante la acción de API Publicar o el comando sns-publish. Con la plantilla, se crean los usuarios de IAM MyPublishUser y MyQueueUser, que se les da perfiles de inicio de sesión y claves de acceso. El usuario que crea una pila con esta plantilla especifica las contraseñas para los perfiles de inicio de sesión como parámetros de entrada. También se crean claves de acceso para los dos usuarios de IAM con MyQueueUserKey y MyPublishUserKey. AddUserToMyPublishTopicGroup añade MyPublishUser a MyPublishTopicGroup para que el usuario tenga los permisos asignadas al grupo.

MyRDMessageQueueGroup es un grupo de IAM cuyos miembros tienen permiso para leer y eliminar mensajes de las dos colas de Amazon SQS mediante las acciones de API ReceiveMessage y DeleteMessage. AddUserToMyQueueGroup añade MyQueueUser a MyRDMessageQueueGroup para que el usuario tenga los permisos asignados al grupo. MyQueuePolicy asigna el permiso para que MySNSTopic publique sus notificaciones en las dos colas.

El siguiente listado muestra el contenido de la plantilla de AWS 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"] } ] ] } } } }