问题描述
上下文
我正在使用Elastic Beanstalk部署一个非常简单的测试应用程序。我有几个要使用apt安装的软件包。我在01_installations.sh
目录中的安装中包含了.platform/hooks/prebuild
脚本。当我压缩应用程序并部署到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文档使它看起来应该很简单。
以前的尝试
我尝试过的事情:
- 添加.ebextensions
container_commands:
01_chmod1:
command: "chmod +x .platform/hooks/prebuild/01_installations.sh"
[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
解决方法
确保在git中使文件可执行
git update-index --chmod=+x path/to/file
参考来自 How to add chmod permissions to file in GIT?
,通常,在压缩部署包之前,请先在本地工作站上设置权限。
但是,如果要在EB实例上执行此操作,则不能使用container_commands
。原因是container_commands
在之后 prebuild
执行。相反,您应该尝试使用commands
:
在运行任何配置文件的命令部分中找到的命令之后,并且在运行Buildfile命令之前,运行预构建文件。