Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
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 une rubrique Amazon Simple Notification Service (Amazon SNS) dans AWS CloudFormation.
Résolution
Si la rubrique et la file d'attente se trouvent dans la même pile, vous devez utiliser un modèle CloudFormation pour créer une rubrique qui envoie des messages aux files d'attente SQS.
Si la rubrique se trouve dans une pile différente de celle de la file d'attente, vous devez créer une référence entre piles. Les deux piles doivent se trouver dans la même région AWS. Lorsque vous créez une référence entre piles, exportez l'ARN de la file d'attente SQS dans une pile. Importez ensuite l'ARN dans la propriété du point de terminaison d'abonnement de la rubrique SNS de l'autre pile.
Si votre rubrique SNS et votre file d'attente SQS se trouvent dans des régions ou des comptes AWS différents, utilisez AWS::SNS::Subscription pour configurer un abonnement intercompte ou interrégional.
Configuration d’un abonnement intercompte
Configuration du compte A
Dans le modèle CloudFormation de la pile source, configurez les paramètres suivants :
- Sous Paramètres, dans Description, saisissez l'ID du compte de destination.
- Dans les Ressources, déclarez les éléments AWS::SNS::Topic et AWS::SNS::TopicPolicy.
- Créez une section Sorties pour renvoyer le TopicArn SNS.
Exemple de modèle 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" } } } }
Exemple de modèle 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
Configuration du compte B
Dans le modèle CloudFormation de la pile de destination, dans Ressources, déclarez la ressource AWS::SNS::Subscription ainsi que les éléments AWS::SQS::Queue et AWS::SQS::QueuePolicy.
Exemple de modèle 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" } } } } }
Exemple de modèle 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
Remarque : dans les exemples de modèles précédents, sous Paramètres, remplacez awsSNSTopicArn par l'ARN de votre rubrique SNS. Remplacez également us-east-1 par la région de la pile dans le compte source (compte A).
Configuration d’un abonnement interrégional
Configuration de la région A
Dans le modèle CloudFormation de la pile d'une région, configurez les paramètres suivants :
- Dans Ressources, déclarez l’élément AWS::SNS::Topic.
- Créez une section Sorties pour renvoyer le SnsTopicArn.
Exemple de modèle JSON :
{ "Resources": { "SnsTopic": { "Type": "AWS::SNS::Topic" } }, "Outputs": { "SnsTopicArn": { "Value": { "Ref": "SnsTopic" } } } }
Exemple de modèle YAML :
Resources: SnsTopic: Type: AWS::SNS::Topic Outputs: SnsTopicArn: Value: !Ref SnsTopic
Configuration de la région B
Dans le modèle CloudFormation de la pile de l'autre région, dans Ressources, déclarez la ressource AWS::SNS::Subscription et l’élément AWS::SQS::Queue.
Exemple de modèle 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" } } } } }
Exemple de modèle 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
Remarque : dans les exemples de modèles précédents, sous Paramètres, remplacez awsSNSTopicArnExample par l'ARN de votre rubrique SNS. Remplacez également us-east-1 par la région de la pile de la région A.

Contenus pertinents
- demandé il y a 4 moislg...
- demandé il y a 2 anslg...
- demandé il y a 10 moislg...
- Réponse acceptéedemandé il y a 5 moislg...
- demandé il y a 3 moislg...
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 9 mois