Sequentially initialise ec2 via cft












0















I am trying to create a cft where due to some reason I want sequential initialisation of ec2 instances via cft.
Is it even possible?










share|improve this question























  • Define sequential initialisation on this context. If you want one EC2 instance to be launched after another, you can chain them with the DependsOn attribute from CloudFormation. If you want them to be launched at the same time but have initialisation scripts/steps to be taken in a certain order, you will need something like cfn-init and use WaitConditions and WaitHandlers.

    – tyron
    Nov 21 '18 at 17:57











  • I am writing cft to install rabbitmq and then add exiting cluster.My EC2s are part of ASG so DependsOn has LaunchConfiguration dependency. I want parallel installation of Rabbitmq on each EC2 node but sequential execution of cluster join scripts on each EC2 instance.

    – jasmeet kaur
    Jan 17 at 7:11
















0















I am trying to create a cft where due to some reason I want sequential initialisation of ec2 instances via cft.
Is it even possible?










share|improve this question























  • Define sequential initialisation on this context. If you want one EC2 instance to be launched after another, you can chain them with the DependsOn attribute from CloudFormation. If you want them to be launched at the same time but have initialisation scripts/steps to be taken in a certain order, you will need something like cfn-init and use WaitConditions and WaitHandlers.

    – tyron
    Nov 21 '18 at 17:57











  • I am writing cft to install rabbitmq and then add exiting cluster.My EC2s are part of ASG so DependsOn has LaunchConfiguration dependency. I want parallel installation of Rabbitmq on each EC2 node but sequential execution of cluster join scripts on each EC2 instance.

    – jasmeet kaur
    Jan 17 at 7:11














0












0








0








I am trying to create a cft where due to some reason I want sequential initialisation of ec2 instances via cft.
Is it even possible?










share|improve this question














I am trying to create a cft where due to some reason I want sequential initialisation of ec2 instances via cft.
Is it even possible?







amazon-ec2 ansible amazon-cloudformation aws-cli






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 21 '18 at 2:22









jasmeet kaurjasmeet kaur

11




11













  • Define sequential initialisation on this context. If you want one EC2 instance to be launched after another, you can chain them with the DependsOn attribute from CloudFormation. If you want them to be launched at the same time but have initialisation scripts/steps to be taken in a certain order, you will need something like cfn-init and use WaitConditions and WaitHandlers.

    – tyron
    Nov 21 '18 at 17:57











  • I am writing cft to install rabbitmq and then add exiting cluster.My EC2s are part of ASG so DependsOn has LaunchConfiguration dependency. I want parallel installation of Rabbitmq on each EC2 node but sequential execution of cluster join scripts on each EC2 instance.

    – jasmeet kaur
    Jan 17 at 7:11



















  • Define sequential initialisation on this context. If you want one EC2 instance to be launched after another, you can chain them with the DependsOn attribute from CloudFormation. If you want them to be launched at the same time but have initialisation scripts/steps to be taken in a certain order, you will need something like cfn-init and use WaitConditions and WaitHandlers.

    – tyron
    Nov 21 '18 at 17:57











  • I am writing cft to install rabbitmq and then add exiting cluster.My EC2s are part of ASG so DependsOn has LaunchConfiguration dependency. I want parallel installation of Rabbitmq on each EC2 node but sequential execution of cluster join scripts on each EC2 instance.

    – jasmeet kaur
    Jan 17 at 7:11

















Define sequential initialisation on this context. If you want one EC2 instance to be launched after another, you can chain them with the DependsOn attribute from CloudFormation. If you want them to be launched at the same time but have initialisation scripts/steps to be taken in a certain order, you will need something like cfn-init and use WaitConditions and WaitHandlers.

– tyron
Nov 21 '18 at 17:57





Define sequential initialisation on this context. If you want one EC2 instance to be launched after another, you can chain them with the DependsOn attribute from CloudFormation. If you want them to be launched at the same time but have initialisation scripts/steps to be taken in a certain order, you will need something like cfn-init and use WaitConditions and WaitHandlers.

– tyron
Nov 21 '18 at 17:57













I am writing cft to install rabbitmq and then add exiting cluster.My EC2s are part of ASG so DependsOn has LaunchConfiguration dependency. I want parallel installation of Rabbitmq on each EC2 node but sequential execution of cluster join scripts on each EC2 instance.

– jasmeet kaur
Jan 17 at 7:11





I am writing cft to install rabbitmq and then add exiting cluster.My EC2s are part of ASG so DependsOn has LaunchConfiguration dependency. I want parallel installation of Rabbitmq on each EC2 node but sequential execution of cluster join scripts on each EC2 instance.

– jasmeet kaur
Jan 17 at 7:11












1 Answer
1






active

oldest

votes


















0














You will need to use a combination of cfn-init and cfn-signal to orchestrate this.
Follow below a sample that should give you a good idea on how to do that.



Resources:    
Server1:
Type: AWS::EC2::Instance
Properties:
[...]
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
yum update -y aws-cfn-bootstrap # good practice - always do this.
/opt/aws/bin/cfn-init -v -c primary -s ${AWS::StackId} -r Server1 --region ${AWS::Region}
yum -y update
Metadata:
AWS::CloudFormation::Init:
configSets:
primary:
- InstallPreRequisites
- CreateCluster # will be run only in master node
secondary:
- InstallPreRequisites
- JoinCluster # will be run in each secondary node
InstallPreRequisites:
commands:
a-install-app:
command:
"install apps on each server"
b-signal-node-ready-join-cluster:
command: !Join
- ''
- - '/opt/aws/bin/cfn-signal -e 0 '
- Fn::Base64: !Ref AllNodesReadyToJoinClusterWaitHandle
CreateCluster:
commands:
a-create-cluster:
command:
"your commands to create the cluster"
b-signal-cluster-created:
command: !Join
- ''
- - '/opt/aws/bin/cfn-signal -e 0 '
- Fn::Base64: !Ref ClusterCreatedWaitHandle
JoinCluster:
a-wait-cluster-created:
command: !Sub >-
output=$(aws cloudformation describe-stack-resource
--region=${AWS::Region}
--stack-name=${AWS::StackName}
--logical-resource-id=ClusterCreatedWaitCondition
--output=text
--query=StackResourceDetail.ResourceStatus)

while [ "$output" != "CREATE_COMPLETE" ] && [ "$output" != "UPDATE_COMPLETE" ];
do
sleep 10
output=$(aws cloudformation describe-stack-resource
--region=${AWS::Region}
--stack-name=${AWS::StackName}
--logical-resource-id=ClusterCreatedWaitCondition
--output=text
--query=StackResourceDetail.ResourceStatus)
done
waitAfterCompletion: '0'
b-join-cluster:
command:
"your commands to join the cluster"
waitAfterCompletion: '0'

Server2:
Type: AWS::EC2::Instance
Properties:
[...]
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
yum update -y aws-cfn-bootstrap # good practice - always do this.
/opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server2 --region ${AWS::Region} # Resource was updated here
yum -y update
Metadata:
AWS::CloudFormation::Init:
[...] # exactly same as above... one will be primary, the other secondary, due to UserData cfn-init parameter

Server3:
Type: AWS::EC2::Instance
Properties:
[...]
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
yum update -y aws-cfn-bootstrap # good practice - always do this.
/opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server3 --region ${AWS::Region} # Resource was updated here
yum -y update
Metadata:
AWS::CloudFormation::Init:
[...]


AllNodesReadyToJoinClusterWaitCondition:
Type: 'AWS::CloudFormation::WaitCondition'
Properties:
Handle: !Ref AllNodesReadyToJoinClusterWaitHandle
Count: 3 # this should match the number of nodes on your cluster
Timeout: '7200'
AllNodesReadyToJoinClusterWaitHandle:
Type: 'AWS::CloudFormation::WaitConditionHandle'

ClusterCreatedWaitCondition:
Type: 'AWS::CloudFormation::WaitCondition'
Properties:
Handle: !Ref ClusterCreatedWaitHandle
Count: 1 # only one node (master) will signal this
Timeout: '7200'
ClusterCreatedWaitHandle:
Type: 'AWS::CloudFormation::WaitConditionHandle'





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404462%2fsequentially-initialise-ec2-via-cft%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    You will need to use a combination of cfn-init and cfn-signal to orchestrate this.
    Follow below a sample that should give you a good idea on how to do that.



    Resources:    
    Server1:
    Type: AWS::EC2::Instance
    Properties:
    [...]
    UserData:
    Fn::Base64:
    !Sub |
    #!/bin/bash
    yum update -y aws-cfn-bootstrap # good practice - always do this.
    /opt/aws/bin/cfn-init -v -c primary -s ${AWS::StackId} -r Server1 --region ${AWS::Region}
    yum -y update
    Metadata:
    AWS::CloudFormation::Init:
    configSets:
    primary:
    - InstallPreRequisites
    - CreateCluster # will be run only in master node
    secondary:
    - InstallPreRequisites
    - JoinCluster # will be run in each secondary node
    InstallPreRequisites:
    commands:
    a-install-app:
    command:
    "install apps on each server"
    b-signal-node-ready-join-cluster:
    command: !Join
    - ''
    - - '/opt/aws/bin/cfn-signal -e 0 '
    - Fn::Base64: !Ref AllNodesReadyToJoinClusterWaitHandle
    CreateCluster:
    commands:
    a-create-cluster:
    command:
    "your commands to create the cluster"
    b-signal-cluster-created:
    command: !Join
    - ''
    - - '/opt/aws/bin/cfn-signal -e 0 '
    - Fn::Base64: !Ref ClusterCreatedWaitHandle
    JoinCluster:
    a-wait-cluster-created:
    command: !Sub >-
    output=$(aws cloudformation describe-stack-resource
    --region=${AWS::Region}
    --stack-name=${AWS::StackName}
    --logical-resource-id=ClusterCreatedWaitCondition
    --output=text
    --query=StackResourceDetail.ResourceStatus)

    while [ "$output" != "CREATE_COMPLETE" ] && [ "$output" != "UPDATE_COMPLETE" ];
    do
    sleep 10
    output=$(aws cloudformation describe-stack-resource
    --region=${AWS::Region}
    --stack-name=${AWS::StackName}
    --logical-resource-id=ClusterCreatedWaitCondition
    --output=text
    --query=StackResourceDetail.ResourceStatus)
    done
    waitAfterCompletion: '0'
    b-join-cluster:
    command:
    "your commands to join the cluster"
    waitAfterCompletion: '0'

    Server2:
    Type: AWS::EC2::Instance
    Properties:
    [...]
    UserData:
    Fn::Base64:
    !Sub |
    #!/bin/bash
    yum update -y aws-cfn-bootstrap # good practice - always do this.
    /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server2 --region ${AWS::Region} # Resource was updated here
    yum -y update
    Metadata:
    AWS::CloudFormation::Init:
    [...] # exactly same as above... one will be primary, the other secondary, due to UserData cfn-init parameter

    Server3:
    Type: AWS::EC2::Instance
    Properties:
    [...]
    UserData:
    Fn::Base64:
    !Sub |
    #!/bin/bash
    yum update -y aws-cfn-bootstrap # good practice - always do this.
    /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server3 --region ${AWS::Region} # Resource was updated here
    yum -y update
    Metadata:
    AWS::CloudFormation::Init:
    [...]


    AllNodesReadyToJoinClusterWaitCondition:
    Type: 'AWS::CloudFormation::WaitCondition'
    Properties:
    Handle: !Ref AllNodesReadyToJoinClusterWaitHandle
    Count: 3 # this should match the number of nodes on your cluster
    Timeout: '7200'
    AllNodesReadyToJoinClusterWaitHandle:
    Type: 'AWS::CloudFormation::WaitConditionHandle'

    ClusterCreatedWaitCondition:
    Type: 'AWS::CloudFormation::WaitCondition'
    Properties:
    Handle: !Ref ClusterCreatedWaitHandle
    Count: 1 # only one node (master) will signal this
    Timeout: '7200'
    ClusterCreatedWaitHandle:
    Type: 'AWS::CloudFormation::WaitConditionHandle'





    share|improve this answer




























      0














      You will need to use a combination of cfn-init and cfn-signal to orchestrate this.
      Follow below a sample that should give you a good idea on how to do that.



      Resources:    
      Server1:
      Type: AWS::EC2::Instance
      Properties:
      [...]
      UserData:
      Fn::Base64:
      !Sub |
      #!/bin/bash
      yum update -y aws-cfn-bootstrap # good practice - always do this.
      /opt/aws/bin/cfn-init -v -c primary -s ${AWS::StackId} -r Server1 --region ${AWS::Region}
      yum -y update
      Metadata:
      AWS::CloudFormation::Init:
      configSets:
      primary:
      - InstallPreRequisites
      - CreateCluster # will be run only in master node
      secondary:
      - InstallPreRequisites
      - JoinCluster # will be run in each secondary node
      InstallPreRequisites:
      commands:
      a-install-app:
      command:
      "install apps on each server"
      b-signal-node-ready-join-cluster:
      command: !Join
      - ''
      - - '/opt/aws/bin/cfn-signal -e 0 '
      - Fn::Base64: !Ref AllNodesReadyToJoinClusterWaitHandle
      CreateCluster:
      commands:
      a-create-cluster:
      command:
      "your commands to create the cluster"
      b-signal-cluster-created:
      command: !Join
      - ''
      - - '/opt/aws/bin/cfn-signal -e 0 '
      - Fn::Base64: !Ref ClusterCreatedWaitHandle
      JoinCluster:
      a-wait-cluster-created:
      command: !Sub >-
      output=$(aws cloudformation describe-stack-resource
      --region=${AWS::Region}
      --stack-name=${AWS::StackName}
      --logical-resource-id=ClusterCreatedWaitCondition
      --output=text
      --query=StackResourceDetail.ResourceStatus)

      while [ "$output" != "CREATE_COMPLETE" ] && [ "$output" != "UPDATE_COMPLETE" ];
      do
      sleep 10
      output=$(aws cloudformation describe-stack-resource
      --region=${AWS::Region}
      --stack-name=${AWS::StackName}
      --logical-resource-id=ClusterCreatedWaitCondition
      --output=text
      --query=StackResourceDetail.ResourceStatus)
      done
      waitAfterCompletion: '0'
      b-join-cluster:
      command:
      "your commands to join the cluster"
      waitAfterCompletion: '0'

      Server2:
      Type: AWS::EC2::Instance
      Properties:
      [...]
      UserData:
      Fn::Base64:
      !Sub |
      #!/bin/bash
      yum update -y aws-cfn-bootstrap # good practice - always do this.
      /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server2 --region ${AWS::Region} # Resource was updated here
      yum -y update
      Metadata:
      AWS::CloudFormation::Init:
      [...] # exactly same as above... one will be primary, the other secondary, due to UserData cfn-init parameter

      Server3:
      Type: AWS::EC2::Instance
      Properties:
      [...]
      UserData:
      Fn::Base64:
      !Sub |
      #!/bin/bash
      yum update -y aws-cfn-bootstrap # good practice - always do this.
      /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server3 --region ${AWS::Region} # Resource was updated here
      yum -y update
      Metadata:
      AWS::CloudFormation::Init:
      [...]


      AllNodesReadyToJoinClusterWaitCondition:
      Type: 'AWS::CloudFormation::WaitCondition'
      Properties:
      Handle: !Ref AllNodesReadyToJoinClusterWaitHandle
      Count: 3 # this should match the number of nodes on your cluster
      Timeout: '7200'
      AllNodesReadyToJoinClusterWaitHandle:
      Type: 'AWS::CloudFormation::WaitConditionHandle'

      ClusterCreatedWaitCondition:
      Type: 'AWS::CloudFormation::WaitCondition'
      Properties:
      Handle: !Ref ClusterCreatedWaitHandle
      Count: 1 # only one node (master) will signal this
      Timeout: '7200'
      ClusterCreatedWaitHandle:
      Type: 'AWS::CloudFormation::WaitConditionHandle'





      share|improve this answer


























        0












        0








        0







        You will need to use a combination of cfn-init and cfn-signal to orchestrate this.
        Follow below a sample that should give you a good idea on how to do that.



        Resources:    
        Server1:
        Type: AWS::EC2::Instance
        Properties:
        [...]
        UserData:
        Fn::Base64:
        !Sub |
        #!/bin/bash
        yum update -y aws-cfn-bootstrap # good practice - always do this.
        /opt/aws/bin/cfn-init -v -c primary -s ${AWS::StackId} -r Server1 --region ${AWS::Region}
        yum -y update
        Metadata:
        AWS::CloudFormation::Init:
        configSets:
        primary:
        - InstallPreRequisites
        - CreateCluster # will be run only in master node
        secondary:
        - InstallPreRequisites
        - JoinCluster # will be run in each secondary node
        InstallPreRequisites:
        commands:
        a-install-app:
        command:
        "install apps on each server"
        b-signal-node-ready-join-cluster:
        command: !Join
        - ''
        - - '/opt/aws/bin/cfn-signal -e 0 '
        - Fn::Base64: !Ref AllNodesReadyToJoinClusterWaitHandle
        CreateCluster:
        commands:
        a-create-cluster:
        command:
        "your commands to create the cluster"
        b-signal-cluster-created:
        command: !Join
        - ''
        - - '/opt/aws/bin/cfn-signal -e 0 '
        - Fn::Base64: !Ref ClusterCreatedWaitHandle
        JoinCluster:
        a-wait-cluster-created:
        command: !Sub >-
        output=$(aws cloudformation describe-stack-resource
        --region=${AWS::Region}
        --stack-name=${AWS::StackName}
        --logical-resource-id=ClusterCreatedWaitCondition
        --output=text
        --query=StackResourceDetail.ResourceStatus)

        while [ "$output" != "CREATE_COMPLETE" ] && [ "$output" != "UPDATE_COMPLETE" ];
        do
        sleep 10
        output=$(aws cloudformation describe-stack-resource
        --region=${AWS::Region}
        --stack-name=${AWS::StackName}
        --logical-resource-id=ClusterCreatedWaitCondition
        --output=text
        --query=StackResourceDetail.ResourceStatus)
        done
        waitAfterCompletion: '0'
        b-join-cluster:
        command:
        "your commands to join the cluster"
        waitAfterCompletion: '0'

        Server2:
        Type: AWS::EC2::Instance
        Properties:
        [...]
        UserData:
        Fn::Base64:
        !Sub |
        #!/bin/bash
        yum update -y aws-cfn-bootstrap # good practice - always do this.
        /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server2 --region ${AWS::Region} # Resource was updated here
        yum -y update
        Metadata:
        AWS::CloudFormation::Init:
        [...] # exactly same as above... one will be primary, the other secondary, due to UserData cfn-init parameter

        Server3:
        Type: AWS::EC2::Instance
        Properties:
        [...]
        UserData:
        Fn::Base64:
        !Sub |
        #!/bin/bash
        yum update -y aws-cfn-bootstrap # good practice - always do this.
        /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server3 --region ${AWS::Region} # Resource was updated here
        yum -y update
        Metadata:
        AWS::CloudFormation::Init:
        [...]


        AllNodesReadyToJoinClusterWaitCondition:
        Type: 'AWS::CloudFormation::WaitCondition'
        Properties:
        Handle: !Ref AllNodesReadyToJoinClusterWaitHandle
        Count: 3 # this should match the number of nodes on your cluster
        Timeout: '7200'
        AllNodesReadyToJoinClusterWaitHandle:
        Type: 'AWS::CloudFormation::WaitConditionHandle'

        ClusterCreatedWaitCondition:
        Type: 'AWS::CloudFormation::WaitCondition'
        Properties:
        Handle: !Ref ClusterCreatedWaitHandle
        Count: 1 # only one node (master) will signal this
        Timeout: '7200'
        ClusterCreatedWaitHandle:
        Type: 'AWS::CloudFormation::WaitConditionHandle'





        share|improve this answer













        You will need to use a combination of cfn-init and cfn-signal to orchestrate this.
        Follow below a sample that should give you a good idea on how to do that.



        Resources:    
        Server1:
        Type: AWS::EC2::Instance
        Properties:
        [...]
        UserData:
        Fn::Base64:
        !Sub |
        #!/bin/bash
        yum update -y aws-cfn-bootstrap # good practice - always do this.
        /opt/aws/bin/cfn-init -v -c primary -s ${AWS::StackId} -r Server1 --region ${AWS::Region}
        yum -y update
        Metadata:
        AWS::CloudFormation::Init:
        configSets:
        primary:
        - InstallPreRequisites
        - CreateCluster # will be run only in master node
        secondary:
        - InstallPreRequisites
        - JoinCluster # will be run in each secondary node
        InstallPreRequisites:
        commands:
        a-install-app:
        command:
        "install apps on each server"
        b-signal-node-ready-join-cluster:
        command: !Join
        - ''
        - - '/opt/aws/bin/cfn-signal -e 0 '
        - Fn::Base64: !Ref AllNodesReadyToJoinClusterWaitHandle
        CreateCluster:
        commands:
        a-create-cluster:
        command:
        "your commands to create the cluster"
        b-signal-cluster-created:
        command: !Join
        - ''
        - - '/opt/aws/bin/cfn-signal -e 0 '
        - Fn::Base64: !Ref ClusterCreatedWaitHandle
        JoinCluster:
        a-wait-cluster-created:
        command: !Sub >-
        output=$(aws cloudformation describe-stack-resource
        --region=${AWS::Region}
        --stack-name=${AWS::StackName}
        --logical-resource-id=ClusterCreatedWaitCondition
        --output=text
        --query=StackResourceDetail.ResourceStatus)

        while [ "$output" != "CREATE_COMPLETE" ] && [ "$output" != "UPDATE_COMPLETE" ];
        do
        sleep 10
        output=$(aws cloudformation describe-stack-resource
        --region=${AWS::Region}
        --stack-name=${AWS::StackName}
        --logical-resource-id=ClusterCreatedWaitCondition
        --output=text
        --query=StackResourceDetail.ResourceStatus)
        done
        waitAfterCompletion: '0'
        b-join-cluster:
        command:
        "your commands to join the cluster"
        waitAfterCompletion: '0'

        Server2:
        Type: AWS::EC2::Instance
        Properties:
        [...]
        UserData:
        Fn::Base64:
        !Sub |
        #!/bin/bash
        yum update -y aws-cfn-bootstrap # good practice - always do this.
        /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server2 --region ${AWS::Region} # Resource was updated here
        yum -y update
        Metadata:
        AWS::CloudFormation::Init:
        [...] # exactly same as above... one will be primary, the other secondary, due to UserData cfn-init parameter

        Server3:
        Type: AWS::EC2::Instance
        Properties:
        [...]
        UserData:
        Fn::Base64:
        !Sub |
        #!/bin/bash
        yum update -y aws-cfn-bootstrap # good practice - always do this.
        /opt/aws/bin/cfn-init -v -c secondary -s ${AWS::StackId} -r Server3 --region ${AWS::Region} # Resource was updated here
        yum -y update
        Metadata:
        AWS::CloudFormation::Init:
        [...]


        AllNodesReadyToJoinClusterWaitCondition:
        Type: 'AWS::CloudFormation::WaitCondition'
        Properties:
        Handle: !Ref AllNodesReadyToJoinClusterWaitHandle
        Count: 3 # this should match the number of nodes on your cluster
        Timeout: '7200'
        AllNodesReadyToJoinClusterWaitHandle:
        Type: 'AWS::CloudFormation::WaitConditionHandle'

        ClusterCreatedWaitCondition:
        Type: 'AWS::CloudFormation::WaitCondition'
        Properties:
        Handle: !Ref ClusterCreatedWaitHandle
        Count: 1 # only one node (master) will signal this
        Timeout: '7200'
        ClusterCreatedWaitHandle:
        Type: 'AWS::CloudFormation::WaitConditionHandle'






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 18 at 15:52









        tyrontyron

        1,053925




        1,053925






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404462%2fsequentially-initialise-ec2-via-cft%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            Npm cannot find a required file even through it is in the searched directory