【问题标题】:How to use conditional in .ebextensions config (AWS Elastic Beanstalk)如何在 .ebextensions 配置中使用条件(AWS Elastic Beanstalk)
【发布时间】:2013-06-14 09:58:44
【问题描述】:

我希望我可以对 .ebextensions 配置使用条件,但我不知道如何使用它,我目前的情况是:

.ebextensions 配置内容之一是创建一个文件夹,实际上必须创建的文件夹只有一次,因为如果我第二次或更多次部署应用程序我会遇到错误,并且错误说“文件夹已经存在”。

所以我需要给出条件,如果文件夹已经存在,则不需要再次运行创建文件夹的命令。

如果有人对如何实现这一点有任何见解或方向,我将不胜感激。谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk


    【解决方案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)我需要检查一个文件夹是否已经挂载(挂载)。如果我能理解条件脚本命令,那就太好了。谢谢
    猜你喜欢
    • 2019-09-01
    • 2018-06-05
    • 2020-08-27
    • 2017-12-08
    • 2021-02-01
    • 2017-07-21
    • 2020-08-17
    • 2015-01-04
    • 1970-01-01
    相关资源
    最近更新 更多