我需要应用程序服务器(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实例。如果是这样 - 你能提供一个例子。
答案 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