如何将 chmod +x 权限添加到 AWS Elastic Beanstalk 平台挂钩?

Posted

技术标签:

【中文标题】如何将 chmod +x 权限添加到 AWS Elastic Beanstalk 平台挂钩?【英文标题】:How do you add chmod +x permission to an AWS Elastic Beanstalk platform hook? 【发布时间】:2020-12-03 13:03:13 【问题描述】:

上下文

我正在使用 Elastic Beanstalk 部署一个非常简单的测试应用程序。我有几个要使用 apt 安装的软件包。我在.platform/hooks/prebuild 目录中的安装中包含了一个01_installations.sh 脚本。当我压缩我的应用程序并部署到 Elastic Beanstalk 时,日志确认预构建脚本运行,但它没有权限。

2020/08/12 21:03:46.674234 [INFO] Executing instruction: RunAppDeployPreBuildHooks
2020/08/12 21:03:46.674256 [INFO] Executing platform hooks in .platform/hooks/prebuild/
2020/08/12 21:03:46.674296 [INFO] Following platform hooks will be executed in order: [01_installations.sh]
2020/08/12 21:03:46.674302 [INFO] Running platform hook: .platform/hooks/prebuild/01_installations.sh
2020/08/12 21:03:46.674482 [ERROR] An error occurred during execution of command [app-deploy] - [RunAppDeployPreBuildHooks]. Stop running the command. Error: Command .platform/hooks/prebuild/01_installations.sh failed with error fork/exec .platform/hooks/prebuild/01_installations.sh: permission denied  

问题

我的理解是权限被拒绝是因为我没有添加chmod +x 来使.sh 文件可执行。正如有关平台挂钩的 AWS 文档所述:“使用 chmod +x 设置挂钩文件的执行权限。” (https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html)。 我的问题是:我该怎么做?

我只是将 .sh 文件放在一个目录中。我不会从其他任何地方调用它。我缺少一个简单的步骤吗? AWS 文档让它看起来应该很简单。

以前的尝试

我尝试过的事情:

    添加 .eb 扩展 尝试:使用以下命令在.ebextensions 目录中创建.config 文件,该命令应使用chmod +x 权限执行.sh 文件。 结果:出现同样的错误。 Elastic Beanstalk 日志根本没有表明 .config 已被处理。
container_commands:
    01_chmod1:
        command: "chmod +x .platform/hooks/prebuild/01_installations.sh"
    更改 .sh 文件的名称 尝试:按照 AWS 用户的建议将 .sh 文件命名为“chmod +x 01_installations.sh”(论坛链接如下)。删除 .ebextensions 结果:出现同样的错误。
[RunAppDeployPreBuildHooks]. Stop running the command. Error: Command .platform/hooks/prebuild/chmod +x 01_installations.sh failed with error fork/exec .platform/hooks/prebuild/chmod +x 01_installations.sh: permission denied 

我已经回顾了这里的想法,但实际上没有一个包含足够完整的示例:

https://forums.aws.amazon.com/thread.jspa?messageID=942515 https://github.com/aws/elastic-beanstalk-roadmap/issues/15

【问题讨论】:

【参考方案1】:

确保你的文件在 git 中可执行

chmod +x path/to/file
git update-index --chmod=+x path/to/file

参考自 How to add chmod permissions to file in GIT?

【讨论】:

在 Windows 10 上使用 Git Bash 对我不起作用。不知道它对其他人如何起作用。也许他们使用的是 WSL 而不是 Git Bash。 @kimbaudi 我没有在 Windows 上尝试过【参考方案2】:

通常在压缩部署包之前,您会在本地工作站上设置权限。

但是,如果您想在 EB 实例上执行此操作,则不能为此使用 container_commands。原因是container_commands 执行之后 prebuild。相反,您应该尝试使用commands:

预构建文件在运行任何配置文件的commands部分中的命令之后,在运行 Buildfile 命令之前运行。

【讨论】:

感谢您的澄清。将 container_commands 更改为 commands 确实允许它运行,尽管脚本再次失败。 @whoopscheckmate 没问题。如果答案有帮助,我们将不胜感激。对于新的失败,你可以提出一个新的问题,因为它似乎是新的问题。这也将允许其他人提供帮助。【参考方案3】:

在更新权限提交更改后,这对我有用。

.config 文件中的命令也将不起作用,因为这些命令将在部署前运行,因此无法找到 .sh 文件的路径。

【讨论】:

以上是关于如何将 chmod +x 权限添加到 AWS Elastic Beanstalk 平台挂钩?的主要内容,如果未能解决你的问题,请参考以下文章

如何将元素添加到指针向量中?

如何将单个项目添加到 Pandas 系列

如何以编程方式将用户添加到 Oracle APEX 4.x 中的访问控制列表?

如何将数据添加到 DataGridView

如何使用自定义适配器将整数添加到列表视图

如何将关闭 [X] 图标添加到 djextNameTextBox?