Note - please see the other answer for the more likely culprit. Leaving this here as the missing configset may also cause problems once the first issue is resolved.
The UserData calls cfn-init which references a configset InstallAndRun that doesn't exist:
"/opt/aws/bin/cfn-init ",
" --stack ", { "Ref" : "AWS::StackName" },
" --resource LaunchConfig",
" --configsets InstallAndRun ",
" --region ", { "Ref" : "AWS::Region" },"\n",
To use cfn-init and specify a configset, you need to have specified a AWS::CloudFormation::Init block in the launch configuration metadata and include a configset definition referencing the config elements you wish cfn-init to execute. See http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html#aws-resource-init-configsets for more details.
As an example, you'd need:
"LaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration"
"Metadata" : {
"AWS::CloudFormation::Init" : {
"configSets" : {
"InstallAndRun" : [ "config1" ]
},
"config1" : {
"commands" : {
"test" : {
"command" : "echo \"$MAGIC\" > test.txt",
"env" : { "MAGIC" : "I come from the environment!" },
"cwd" : "~",
"test" : "test ! -e ~/test.txt",
"ignoreErrors" : "false"
}
}
}
}
},
"Properties" : {
...
}
}
Without that Metadata, cfn-init will fail, and the cfn-signal line tell cloudformation that the resource initialisation has failed.
As a diagnostic process, try removing the reference to cfn-init and cfn-signal and seeing if the instance starts up. If it does, and you do have some instance configuration steps that you'd like to define using cfn-init, define the metadata block to specify the steps, and add the calls to cfn-init and cfn-signal back into the user data.