如何在 .ebextensions 配置中使用条件(AWS Elastic Beanstalk)
Posted
技术标签:
【中文标题】如何在 .ebextensions 配置中使用条件(AWS Elastic Beanstalk)【英文标题】:How to use conditional in .ebextensions config (AWS Elastic Beanstalk) 【发布时间】:2013-06-14 09:58:44 【问题描述】:我希望我可以对 .ebextensions 配置使用条件,但我不知道如何使用它,我目前的情况是:
.ebextensions 配置内容之一是创建一个文件夹,实际上必须创建的文件夹只有一次,因为如果我第二次或更多次部署应用程序我会遇到错误,并且错误说“文件夹已经存在”。
所以我需要给出条件,如果文件夹已经存在,则不需要再次运行创建文件夹的命令。
如果有人对如何实现这一点有任何见解或方向,我将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:.ebextensions 配置文件允许通过在命令上使用 test:
指令来有条件地执行命令。然后该命令仅在测试为真时运行(返回 0)。
示例.ebextensions/create_dir.config
文件:
commands:
01_create_dir:
test: test ! -d "$DIR"
command: mkdir "$DIR"
另一个示例(实际在 EB 上测试)如果目录不存在则有条件地运行脚本:
commands:
01_intall_foo:
test: test ! -d /home/ec2-user/foo
command: "/home/ec2-user/install-foo.sh"
cwd: "/home/ec2-user/"
来自 AWS 的稀疏文档在这里:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-commands
PS。
如果您只需要有条件地创建目录,您可以不使用条件,使用mkdir
的-p
选项来有条件地创建目录,如下所示:
commands:
01_create_dir:
command: mkdir -p "$DIR"
【讨论】:
在他们关于docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 的示例中,他们使用test: '[ ! /usr/bin/python ] && echo "python not installed"'
有条件地运行python 脚本使我感到困惑。如果 python missing 不运行命令吗?
mkdir -p 是个好主意。谢谢
@oskarth 测试中的!
使if 语句测试该路径是否存在,它显示“如果不是/usr/bin/python
返回false”。
@RyanFisher Thx,我也对自己的评论(回声)感到困惑,也许文档已更改。
@oskarth 好吧,我做得很好,让您更加困惑,我的解释是错误的,测试返回 true 而不是 false。括号是 if 语句的简写,因此如果缺少 /usr/bin/python
,则 &&
的左侧为真,因此执行右侧(与消息相呼应)。【参考方案2】:
我认为唯一的方法是使用 shell 条件:
commands:
make-directory:
command: |
if [ ! -f "$DIR" ]; then
mkdir "$DIR"
fi
在jcabi-beanstalk-maven-plugin 中查看更大的示例。
【讨论】:
是的,你说得对,我已经要求 .ebextensions 不支持 aws 条件。嗯好的,谢谢你的建议,我先试试。 顺便说一句,我该如何理解 if [ ! -f "$DIR" ];然后 mkdir "$DIR" fi 我需要 3 个条件来设置 3 个命令,1)该命令需要检查是否已经创建了任何文件夹,2)我在 /etc/fstab 中放置了一行脚本,所以我需要检查脚本是否已经创建,3)我需要检查一个文件夹是否已经挂载(挂载)。如果我能理解条件脚本命令,那就太好了。谢谢以上是关于如何在 .ebextensions 配置中使用条件(AWS Elastic Beanstalk)的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk:如何在 ebextensions 中使用环境变量?
AWS Elastic Beanstalk - .ebextensions
如何通过 ebextensions 配置文件添加 nginx 缓存控制标头?