0

Ich habe auf der AWS-Website eine wunderbare Dokumentation darüber gefunden, wie man eine Instanz vollständig einrichten und bereitstellen kann, bevor die zweite Instanz gestartet wird. Es ist um https://aws.amazon.com/blogs/devops/tag/cloudformation/page/2/Cloudformation Attribut "CreationPolicy" funktioniert nicht

Die Dokumentation verwendet CreationPolicy-Attribut und cfn-Signal, um AWS Cloudformation zu benachrichtigen, dass Instance1 aufgetreten ist. Ich habe den Code ausprobiert. Es läuft. Das Problem ist jedoch, dass Instance2 zuerst an die Reihe kommt, anstatt darauf zu warten, dass Instance1 auftaucht. Dies ist der Code und ich habe den Screenshot angehängt, wenn die Instanzen kommen.

{ 
"AWSTemplateFormatVersion": "2010-09-09", 
"Description": "EC2 Head Node Instance ", 
"Resources": { 
    "EC2Instance1": { 
     "Type": "AWS::EC2::Instance", 
     "CreationPolicy" : { 
      "ResourceSignal" : { 
      "Timeout": "PT10M", 
      "Count" : "1" 
      } 
     }, 
     "Properties": { 
      "ImageId": "ami-3723c04f", 
      "UserData":{ 
       "Fn::Base64":{ 
        "Fn::Join": ["", [ 
             "<script>\n",            
              "cfn-signal.exe -e 0 ", 
              " --stack ", {"Ref" : "AWS::StackName"}, 
              " --resource EC2Instance1", 
              " --region ", {"Ref" : "AWS::Region"}, "\n" ,           
             "</script>\n" 

            ] 

        ] 

       } 


      },    
      "Tags" : [ 
       {"Key" : "Name", "Value" : "QRM Head Node"}    
      ] 

     } 
    }, 
    "EC2Instance2": {    
     "Type": "AWS::EC2::Instance", 
     "Properties": { 
      "ImageId": "ami-3723c04f", 
      "Tags" : [{"Key" : "Dependency", "Value" : "EC2Instance1"}    
      ] 

     } 
    } 


} 

Stack Events picture}

Antwort

2

Sie haben DependsOn Attribut angeben.

"EC2Instance2": { 
    "DependsOn": "EC2Instance1",    
    "Type": "AWS::EC2::Instance", 
    "Properties": { 
     "ImageId": "ami-3723c04f", 
     "Tags" : [{"Key" : "Dependency", "Value" : "EC2Instance1"}    
     ] 

    } 
} 

Das obige Snippet sollte Ihr Problem lösen.

Bearbeiten-1: CFN-Signal + DependsOn

ein CFN-Signal erstellen Signale auf Ec2Instance1 nach Ihren Anlagen zu senden, sind abgeschlossen. Bitte beziehen Sie sich auf cfn-signal documentation.

Erstellen Sie jetzt eine AWS::CloudFormation::WaitCondition und verweisen Sie in Ec2Instance2. Hier finden Sie ein Dokument zur Integration von WaitConditions in Ihre Vorlage cfn-wait-condition.

+0

Wenn wir sicherstellen, dass EC2Instance2 nur nach EC2Instance1 auftaucht, indem Sie das Attribut "DependsOn" verwenden, was nützt die Verwendung von cfn-signal im Abschnitt userdata, um mitzuteilen, dass EC1 aufgetreten ist? – Jason

+0

Mit 'DependsOn' wird sichergestellt, dass EC2Instance2 erst dann erscheint, wenn EC2Instance1" erstellt "wurde. Auf der anderen Seite können Sie 'cfn-signal' verwenden, wenn Sie einige Einstellungen in EC2Instance1 vornehmen möchten, sagen Sie, installieren Sie benötigte Software usw. und EC2Instance2 wird erst nach diesen Installationen erscheinen. In diesem Fall kann 'cfn-signal' verwendet werden. – krisnik

+0

Basierend auf Ihrer Frage, ich denke, "DependsOn" passt Ihre Anforderung richtig. – krisnik

Verwandte Themen