Une pile AWS CloudFormation existante dispose d'une ressource de rubrique Amazon SNS et je veux abonner la file d'attente Amazon SQS dans une autre pile pour que l'abonnement à la rubrique SNS se fasse à partir d'une autre pile. Comment puis-je faire cela ?

Si la rubrique SNS et la file d'attente SQS se trouvent dans la même pile, la procédure est plus simple : consultez Utilisation d'un modèle AWS CloudFormation pour créer une rubrique qui envoie des messages à des files d'attente Amazon SQS. Toutefois, si la rubrique SNS et la file d'attente SQS se trouvent dans des piles séparées, ceci provoque une condition de concurrence.

Pour éviter ce problème, utilisez des ressources personnalisées CloudFormation :

1.    Dans la pile SNS, utilisez l'ARN de la rubrique SNS en tant que sortie, par exemple :

"Outputs" : {

    "SnsTopicName" : {

        "Value" : {"Ref" : "SNStopic"}

    }

}

2.    Créez une ressource de fonction Lambda qui décrit la pile SNS et extrait les valeurs des sorties de la pile SNS.

3.    Dans la pile SQS, créez une ressource personnalisée qui extrait l'ARN SNS de la pile SNS, comme suit (remarque : l'exemple suppose que le nom logique choisi à l'étape précédente est « LambdaReturnSNSARN ») :

"GetSNSTopicName" : {

    "Type": "Custom::GetSNSTopicName",

    "Properties": {

        "ServiceToken": {"Fn::GetAtt": ["LambdaReturnSNSArn", "Arn"]},

        "StackName": {"Ref": "SnsStackName"}

    }

},

4.    Dans la même pile SQS, créez une autre ressource personnalisée qui abonne la file d'attente SQS à la rubrique SNS, comme suit :

"SubscribeSNS" : {

    "Type": "Custom::SubscribeSNS",

    "Version" : "1.0",

    "Properties" : {

        "ServiceToken" : {"Fn::GetAtt": ["LambdaSubscribeSNS", "Arn"]},

        "SNSarn" : {"Fn::GetAtt": ["GetSNSTopicName", "SnsTopicName"]},

        "SQSarn" : {"Fn::GetAtt": ["MySQS", "Arn"]}

    }

},

5.    Créez une ressource de fonction Lambda qui utilise les valeurs de paramètres transmises à « SNSarn » et « SQSarn » et abonne la file d'attente SQS à la rubrique SNS à partir d'une autre pile.

CloudFormation, SQS, SNS


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 24/08/2016