如何使用CloudFormation将UserData传递给Beanstalk实例

tro*_*nda 6 amazon-ec2 amazon-web-services aws-cloudformation amazon-elastic-beanstalk

我需要应用程序服务器,它是beanstalk实例,在启动时执行一些操作,我想运行一个传递给具有UserData属性的实例的bash脚本,该属性可用于常规EC2实例.

我找到了几个示例CloudFormation模板,它使用常规EC2实例执行此操作,但没有使用Beanstalk的示例.我试图将其添加到应用程序的属性字段中:

"MyApp" : {
  "Type" : "AWS::ElasticBeanstalk::Application",
  "Properties" : {
    "Description" : "MyApp description",
    "ApplicationVersions" : [{
      ...
    }],
    "UserData" : {
      "Fn::Base64" : { "Fn::Join" : ["", [
        "#!/bin/bash\n",
        "touch /tmp/userdata_sucess\n"
      ]]
    }},
    ...
Run Code Online (Sandbox Code Playgroud)

我还尝试添加到环境部分:

"MyAppEnv" : {
  "Type" : "AWS::ElasticBeanstalk::Environment",
  "Properties" : {
    "ApplicationName" : { "Ref" : "MyApp" },
    "Description" :  "MyApp environment description",
    "UserData" : {
      "Fn::Base64" : { "Fn::Join" : ["", [
        "#!/bin/bash\n",
        "touch /tmp/userdata_sucess\n"
      ]]
    }},
    "TemplateName" : "MyAppConfiguration",
    "VersionLabel" : "First Cloud version"
  }
},
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,这都会导致尝试创建堆栈时失败.有没有人知道是否可以使用CloudFormation将UserData传递给Beanstalk实例.如果是这样 - 你能提供一个例子.

tro*_*nda 7

如果你想拥有Beanstalk提供的所有优势 - 比如不必修补亚马逊为你做的操作系统 - 这是不可能的.一种选择是创建一个自定义AMI,其中包含所需的脚本,但是您必须自己使用安全补丁来管理操作系统.在这里阅读更多.