0

2つ目のインスタンスが始まる前に、1つのインスタンスを完全に作成してプロビジョニングする方法についてAWSサイトで素晴らしい文書を発見しました。 https://aws.amazon.com/blogs/devops/tag/cloudformation/page/2/CloudType "CreationPolicy"属性が機能しない

documenationは、CreationPolicy属性とcfn-signalを使用して、AWS CloudformationにInstance1が発生したことを通知します。私はコードを試した。それは動く。しかし、問題はInstance1が出現するのを待つのではなく、Instance2が最初に現れることです。これはコードなので、インスタンスが登場するときにスクリーンショットを添付しました。

{ 
"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}

答えて

2

あなたはDependsOn属性を指定する必要があります。

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

    } 
} 

上記のスニペットで問題を解決する必要があります。

編集-1:CFN-信号+ DEPENDSON

Ec2Instance1であなたのインストールが完了した後の信号を送信するCFN-信号を作成します。 cfn-signal documentationを参照してください。

AWS::CloudFormation::WaitConditionを作成し、Ec2Instance2で参照してください。テンプレートcfn-wait-conditionにWaitConditionsを統合する方法に関する文書があります。

+0

"DependsOn"属性を使用してEC2Instance1の後にEC2Instance2が現れることを確認している場合は、userdataセクションでcfn-signalを使用してEC1が起動したことを通知するのはどうですか? – Jason

+0

'DependsOn'を使うと、EC2Instance2がEC2Instance1が"作成された "後に出現することを保証します。 一方、EC2Instance1で必要なソフトウェアのインストールなどを行う場合は、「cfn-signal」を使用できます。EC2Instance2は、インストールが完了した後にのみ表示されます。その場合、 'cfn-signal'を使用することができます。 – krisnik

+0

あなたの質問に基づいて、私は "DependsOn"があなたの要求に適切に合っていると思います。 – krisnik

関連する問題