如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例
Posted
技术标签:
【中文标题】如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例【英文标题】:How do I pass UserData to a Beanstalk instance with CloudFormation 【发布时间】:2012-01-14 18:46:26 【问题描述】:我需要应用程序服务器(即 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 实例。如果是这样 - 你能举个例子吗?
【问题讨论】:
【参考方案1】:如果您想拥有 Beanstalk 提供的所有优势——比如不必像亚马逊为你打补丁的操作系统——这是不可能的。一种选择是创建一个自定义 AMI,您可以在其中包含所需的脚本,但您必须自己使用安全补丁管理操作系统。阅读更多here。
【讨论】:
@tronda,你知道6年后还是一样吗? 对不起,自从这篇文章之后,就没有与 Beanstalk 合作过。 @AlexanderF。【参考方案2】:您可以使用.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
【讨论】:
这个例子和设置用户数据没有任何关系。我错过了什么吗?以上是关于如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例
如何使用 Cloudformation 将 lambda 函数附加到现有 API 网关
如何使用 cloudformation 或 yaml 将保留天数设置为日志流
如何使用cloudformation模板将两个EC2实例(安装AMI创建的Elasticsearch)作为多节点?