如何在 .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 配置

如何通过 ebextensions 配置文件添加 nginx 缓存控制标头?

从 .ebextensions 配置文件访问 Elastic Beanstalk 环境属性

AWS codeBuild 不运行 .ebextension 配置