7

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

我发现了几个示例 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 实例。如果是这样 - 你能提供一个例子。

4

2 回答 2

7

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

于 2011-12-14T08:37:00.993 回答
0

您可以使用 来执行此操作.ebextensions,请参阅Amazon 文档

一个例子:

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
于 2020-07-18T21:12:16.277 回答