Comment créer un abonnement entre ma file d'attente Amazon SQS et une rubrique Amazon SNS dans CloudFormation ?
Je souhaite créer un abonnement entre ma file d'attente Amazon Simple Queue Service (Amazon SQS) et la rubrique Amazon Simple Notification Service (Amazon SNS) dans AWS CloudFormation.
Résolution
En fonction de votre cas d'utilisation, choisissez l'une des solutions suivantes :
- Vous avez une rubrique SNS et une file d'attente SQS dans la même pile. Pour résoudre ce problème, utilisez un modèle CloudFormation pour créer une rubrique qui envoie des messages aux files d'attente SQS.
- Votre rubrique SNS se trouve dans une pile et la file d'attente SQS qui s'abonnera à cette rubrique se trouve dans une autre pile. Les deux piles se trouvent dans la même région AWS. Pour résoudre ce problème, créez une référence entre piles.
Remarque : lorsque vous créez une référence entre piles, exportez le nom Amazon Resource Name (ARN) de la file d'attente SQS dans une pile. Importez ensuite cet ARN de file d'attente SQS dans la propriété du point de terminaison d'abonnement de la rubrique SNS dans l'autre pile. - Votre rubrique SNS et la file d'attente SQS se trouvent dans des régions distinctes. Pour résoudre ce problème, suivez les étapes décrites dans la section Utilisez la ressource AWS::SNS::Subscription pour configurer un abonnement inter-régions.
- Votre rubrique SNS et la file d'attente SQS se trouvent dans des comptes AWS distincts. Pour résoudre ce problème, suivez les étapes décrites dans la section Utilisez la ressource AWS::SNS::Subscription pour configurer un abonnement inter-comptes.
Utilisation de la ressource AWS::SNS::Subscription pour configurer un abonnement inter-régions
1. Dans le modèle CloudFormation pour la pile dans une région AWS, déclarez la rubrique SNS dans cette région. Créez ensuite une ressource de sortie pour annoter l'ARN de rubrique SNS.
Reportez-vous aux exemples de modèles JSON et YAML suivants.
JSON :
{ "Resources": { "SnsTopic": { "Type": "AWS::SNS::Topic" } }, "Outputs": { "SnsTopicArn": { "Value": { "Ref": "SnsTopic" } } } }
YAML :
Resources: SnsTopic: Type: AWS::SNS::Topic Outputs: SnsTopicArn: Value: !Ref SnsTopic
2. Dans un modèle CloudFormation pour l'autre pile de l'autre région, définissez la ressource AWS::SNS::Subscription et la file d'attente SQS.
Remarque : dans Parameters (Paramètres), remplacez awsSNSTopicArnExample par votre ARN de rubrique SNS. Remplacez us-east-1 par la région de la pile de l'étape 1.
Reportez-vous aux exemples de modèles JSON et YAML suivants.
JSON :
{ "Parameters": { "SNSTopicARN": { "Type": "String", "Default": "awsSNSTopicArnExample" }, "TopicRegion": { "Type": "String", "Default": "us-east-1" } }, "Resources": { "Queue": { "Type": "AWS::SQS::Queue" }, "SnsSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "Protocol": "sqs", "Endpoint": { "Fn::GetAtt": [ "Queue", "Arn" ] }, "Region": { "Ref": "TopicRegion" }, "TopicArn": { "Ref": "SNSTopicARN" } } } } }
YAML :
Parameters: SNSTopicARN: Type: String Default: awsSNSTopicArnExample TopicRegion: Type: String Default: us-east-1 Resources: Queue: Type: AWS::SQS::Queue SnsSubscription: Type: AWS::SNS::Subscription Properties: Protocol: sqs Endpoint: !GetAtt Queue.Arn Region: !Ref TopicRegion TopicArn: !Ref SNSTopicARN
Votre abonnement inter-régions est désormais configuré.
Utilisation de la ressource AWS::SNS::Subscription pour configurer un abonnement inter-comptes
1. Dans le modèle CloudFormation pour la pile dans un compte source AWS, déclarez la rubrique SNS et la stratégie AWS::SNS::TopicPolicy. Créez ensuite une ressource de sortie afin d'annoter l'ARN de rubrique SNS. et saisissez votre compte AWS de destination comme paramètre.
Reportez-vous aux exemples de modèles JSON et YAML suivants.
JSON :
{ "Parameters": { "CrossAccountNumber": { "AllowedPattern": "[0-9]+", "Description": "The 12 digit AWS account number to grant access to.", "MaxLength": "12", "MinLength": "12", "Type": "String", "Default": 123456789101 } }, "Resources": { "SnsTopic": { "Type": "AWS::SNS::Topic" }, "SnsTopicPolicy": { "Type": "AWS::SNS::TopicPolicy", "DependsOn": "SnsTopic", "Properties": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "SnsTopicPolicy", "Effect": "Allow", "Principal": { "AWS": { "Fn::Sub": "arn:aws:iam::${CrossAccountNumber}:root" } }, "Action": [ "sns:Subscribe" ], "Resource": { "Ref": "SnsTopic" } } ] }, "Topics": [ { "Ref": "SnsTopic" } ] } } }, "Outputs": { "SnsTopicArn": { "Value": { "Ref": "SnsTopic" } } } }
YAML :
Parameters: CrossAccountNumber: AllowedPattern: '[0-9]+' Description: The 12 digit AWS account number to grant access to. MaxLength: '12' MinLength: '12' Type: String Default: 123456789101 Resources: SnsTopic: Type: AWS::SNS::Topic SnsTopicPolicy: Type: AWS::SNS::TopicPolicy DependsOn: SnsTopic Properties: PolicyDocument: Version: '2012-10-17' Statement: - Sid: SnsTopicPolicy Effect: Allow Principal: AWS: !Sub arn:aws:iam::${CrossAccountNumber}:root Action: - sns:Subscribe Resource: !Ref SnsTopic Topics: - !Ref SnsTopic Outputs: SnsTopicArn: Value: !Ref SnsTopic
2. Dans le modèle CloudFormation de la pile du compte AWS où vous souhaitez prolonger votre abonnement, définissez la ressource AWS::SNS::Subscription. Définissez également la file d'attente SQS et la stratégie AWS።SQS።QueuePolicy.
Remarque : dans Parameters (Paramètres), remplacez awsSNSTopicArn par votre ARN de rubrique SNS. Remplacez us-east-1 par la région de la pile de l'étape 1.
Reportez-vous aux exemples de modèles JSON et YAML suivants.
JSON :
{ "Parameters": { "SNSTopicARN": { "Type": "String", "Default": "awsSNSTopicArn" }, "TopicRegion": { "Type": "String", "Default": "us-east-1" } }, "Resources": { "Queue": { "Type": "AWS::SQS::Queue" }, "SqsQueuePolicy": { "Type": "AWS::SQS::QueuePolicy", "Properties": { "PolicyDocument": { "Version": "2012-10-17", "Id": "MyQueuePolicy", "Statement": [ { "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": "*", "Action": [ "sqs:SendMessage" ], "Resource": { "Fn::GetAtt": [ "Queue", "Arn" ] }, "Condition": { "ArnEquals": { "aws:SourceArn": { "Ref": "SNSTopicARN" } } } } ] }, "Queues" : [ { "Ref" : "Queue" } ] } }, "SnsSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "Protocol": "sqs", "Endpoint": { "Fn::GetAtt": [ "Queue", "Arn" ] }, "Region": { "Ref": "TopicRegion" }, "TopicArn": { "Ref": "SNSTopicARN" } } } } }
YAML :
Parameters: SNSTopicARN: Type: String Default: awsSNSTopicArn TopicRegion: Type: String Default: us-east-1 Resources: Queue: Type: AWS::SQS::Queue SqsQueuePolicy: Type: AWS::SQS::QueuePolicy Properties: PolicyDocument: Version: '2012-10-17' Id: MyQueuePolicy Statement: - Sid: Allow-SNS-SendMessage Effect: Allow Principal: "*" Action: - sqs:SendMessage Resource: !GetAtt Queue.Arn Condition: ArnEquals: aws:SourceArn: !Ref SNSTopicARN Queues: - !Ref Queue SnsSubscription: Type: AWS::SNS::Subscription Properties: Protocol: sqs Endpoint: !GetAtt Queue.Arn Region: !Ref TopicRegion TopicArn: !Ref SNSTopicARN

Contenus pertinents
- demandé il y a 5 moislg...
- demandé il y a 9 moislg...
- demandé il y a un moislg...
- demandé il y a un anlg...
- demandé il y a 6 moislg...
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a 5 mois