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

时间:2011-12-07 08:19:53

标签: amazon-ec2 amazon-web-services elastic-beanstalk amazon-cloudformation

我需要应用程序服务器(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"
      ]]
    }},
    ...

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

"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"
  }
},

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

您可以使用.ebextensions进行此操作,请参见Amazon docs

一个例子:

packages:
  yum:
    bison:              []
    libpcap-devel:      []
    libpcap:            "1.4.0"
    golang:             "1.13.4"
    git:                []

commands:
  20_show_info_pkgs:
    env:
      GOPATH:           /usr/local/gocode
      PATH:             $PATH:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/usr/local/bin
    ignoreErrors:       true
    command:            |
      ls -l /usr/local /usr/local/g*
      env
      yum list bison libpcap-devel libpcap golang git
      which git
      which go
      git --version
      go version
      goreplay version
      true