Атрибут Cloudformation "CreationPolicy" не работает

На сайте AWS я обнаружил замечательную документацию о том, как полностью создать и подготовить один экземпляр, прежде чем начнет работать второй. Это по адресу https://aws.amazon.com/blogs/devops/tag/cloudformation/page/2/

Документация использует атрибут CreationPolicy и cfn-signal для уведомления AWS Cloudformation о появлении Instance1. Я попробовал код. Это работает. Но проблема в том, что Instance2 появляется первым, а не ждет, пока появится Instance1. Это код, и я прикрепил снимок экрана, когда появляются экземпляры.

{
"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 изображение}

1 ответ

Решение

Вы должны указать DependsOn атрибут.

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

    }
}

Выше фрагмент кода должен решить проблему.

Edit-1: CFN-сигнал + DependsOn

Создайте сигнал cfn для отправки сигналов после завершения установки на Ec2Instance1. Пожалуйста, обратитесь к документации cfn-signal.

Теперь создайте AWS::CloudFormation::WaitCondition и передать его в Ec2Instance2. Вот документ о том, как интегрировать WaitConditions в ваш шаблон cfn-wait-condition.

Другие вопросы по тегам