0

J'essaie de créer un sujet SNS et de le référencer dans un groupe ASG pour recevoir des notifications lorsque des instances sont lancées ou terminées. Voici une section de code troposphère J'utilise:Créer un sujet SNS SNS et le référencer dans un ASG en utilisant troposhere

email_topic = self.template.add_resource(Topic(
     'ec2_lauch_termination', 
     Subscription=[ 
      Subscription(
       Endpoint=Ref(alarm_email), 
       Protocol="email" 
      ), 
     ], 
    )) 

    self.template.add_output(Output(
      "TopicArn", 
      Value=GetAtt(email_topic, "Arn"), 
      Description="ARN of email topic", 
    )) 

    for i in range(0, self.subnet_count): 
      asg_name = "autoScalingGroup" + str(i) 
      asg = self.template.add_resource(AutoScalingGroup(
       asg_name, 
       DesiredCapacity=Ref(self.desired_capacity), 
       HealthCheckType="EC2", 
       LaunchConfigurationName=Ref(launch_config), 
       MinSize=Ref(self.min_size), 
       MaxSize=Ref(self.max_size), 
       VPCZoneIdentifier=[Select(i, Ref(self.instance_subnets))], 
       Tags=[ 
        Tag("Name", Join("-", [Ref(self.resource_name), Ref(self.env_tag), Ref(self.vpc_short_name), "pdx"]), True), 
        Tag("Name", "XXXX", True), 
        Tag("Service", Ref(self.service_tag), True), 
        Tag("Environment", Ref(self.env_tag), True), 
        Tag("Address", Ref(self.address_tag), True) 
       ], 

     NotificationConfigurations=[ 
      NotificationConfigurations(
       TopicARN=GetAtt(email_topic, "Arn"), 
       NotificationTypes=[ 
        'autoscaling:EC2_INSTANCE_LAUNCH', 
        'autoscaling:EC2_INSTANCE_LAUNCH_ERROR', 
        'autoscaling:EC2_INSTANCE_TERMINATE', 
        'autoscaling:EC2_INSTANCE_TERMINATE_ERROR', 
        ], 
       ), 
      ], 
    )) 

J'ai tiré la ARN du sujet et donné comme une valeur à la « TopicARN » de NotificationConfigurations dans un ASG, mais ce code ne délivre pas un Modèle CF Est-ce que je manque quelque chose ici ou y a-t-il un meilleur moyen d'y parvenir?

Appréciez votre aide à l'avance!

Merci!

Répondre

0

Vous devez appeler la méthode to_json de l'objet modèle. Si vous voulez juste pour l'imprimer à l'écran, par exemple, dans votre cas, vous:

print self.template.to_json() 

ou appelez sur la classe créée elle-même.