Скрипт пользовательских данных не работает на сервере Ubuntu при создании с использованием шаблона облачной информации

Извините за повторный и старый вопрос. Мой код не запускает скрипт оболочки userdata. Мое свойство userdata - это параметр, который будет указан при создании стека. мой код

{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "AWS CloudFormation Sample Template",
"Parameters": {
    "UserData": {
        "Description": "User data",
        "Type": "String"
    }
},
"Resources": {
    "EC2Instance": {
        "Type": "AWS::EC2::Instance",
        "Properties": {
            "KeyName": {
                "Ref": "KeyName"
            },
            "InstanceType": {
                "Ref": "InstanceType"
            },
            "ImageId": {
                "Ref": "ImageId"
            },
            "SecurityGroups": [
                {
                    "Ref": "EC2SecurityGroup"
                }
            ],
            "UserData": {
                "Fn::Base64": {
                    "Fn::Join": [
                        "",
                        [
                            "#!/bin/bash",
                            "\n",
                            {
                                "Ref": "UserData"
                            }
                        ]
                    ]
                }
            }
        }
    }
}

}

Я дал следующую команду оболочки в параметре userdata

"apt-get update","\n","apt-get install -y apache2","\n","apt-get install -y php","\n"

Я не могу знать, правильный ли мой userdata scricpt, он не показывает никаких ошибок при создании стека, он успешно создает экземпляр. После создания экземпляра я проверил apache2 и php не установлены в экземпляре. Кто-нибудь может найти, что не так в моем коде?

2 ответа

Решение

Он принимает следующие пользовательские данные и устанавливает все программы, которые приведены в следующих сценариях.

apt-get update;apt-get install -y apache2;apt-get install -y php;

Попробуйте этот блок UserData. UserData переименовывается в UData, чтобы исключить конфликты имен. В этом случае UData должен быть "apt-get update; apt-get install -y apache2 php;"

"AWSTemplateFormatVersion": "2010-09-09",
"Description": "AWS CloudFormation Sample Template",
"Parameters": {
    "UData": {
        "Description": "User data",
        "Type": "String"
    }
},
"Resources": {
    "EC2Instance": {
        "Type": "AWS::EC2::Instance",
        "Properties": {
            "KeyName": {
                "Ref": "KeyName"
            },
            "InstanceType": {
                "Ref": "InstanceType"
            },
            "ImageId": {
                "Ref": "ImageId"
            },
            "SecurityGroups": [
                {
                    "Ref": "EC2SecurityGroup"
                }
            ],
            "UserData": {
                "Fn::Base64": {
                    "Fn::Join": [
                        "",
                        [
                            "#!/bin/bash\n",
                            "echo \">>>>>>>>>>>>> UPDATE <<<<<<<<<<<<<\"\n",
                            "export USR_DATA='", { "Ref": "UData" }, "'\n",
                            "echo $USR_DATA\n",
                            "echo $USR_DATA > user_data.sh\n",
                            "chmod +x user_data.sh\n",
                            "source user_data.sh\n",
                            "echo \">>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<\"\n"
                        ]
                    ]
                }
            }
        }
    }
}

Пользовательские данные также регистрируются в /var/log/cloud-init-output.log, и вывод из этого журнала может действительно помочь при отладке.

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