如何使用aws elasticbeanstalk中的钩子运行部署后脚本?
Posted
技术标签:
【中文标题】如何使用aws elasticbeanstalk中的钩子运行部署后脚本?【英文标题】:How to run post deploy script using hooks in aws elasticbeanstalk? 【发布时间】:2021-03-11 11:16:00 【问题描述】:我正在尝试在我的应用程序部署到 AWS 后运行脚本。但是每当我在部署后尝试运行脚本时,它都会出现权限错误。
[RunAppDeployPostDeployHooks]。停止运行命令。错误: 命令 .platform/hooks/postdeploy/99_start_script.sh 失败 错误 fork/exec .platform/hooks/postdeploy/99_start_script.sh: 权限被拒绝
我试图在我的 .config 文件中包含 chmod +x 命令,但它没有给出这样的目录错误。 script.config
commands:
01_chmod:chmod +x .platform/hooks/postdeploy/99_start_script.sh
cfn.init
2020-11-28 14:13:17,374 [错误] ------------------------构建 失败!------------ 2020-11-28 14:13:17,374 [错误] 构建期间未处理的异常:Command 01_chmod failed Traceback (最近一次通话最后一次):文件“/opt/aws/bin/cfn-init”,第 171 行,在 worklog.build(metadata, configSets) 文件“/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py”,行 129,正在构建中 承包商(元数据).build(configSets,self)文件“/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py”,行 530,正在构建中 self.run_config(config, worklog) 文件“/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py”,行 542,在运行配置中 CloudFormationCarpenter(config, self._auth_config).build(worklog) 文件“/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py”, 第 260 行,正在构建中 更改['commands'] = CommandTool().apply(self._config.commands) 文件“/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py”, 第 117 行,申请中 raise ToolError(u"Command %s failed" % name) ToolError: Command 01_chmod failed
【问题讨论】:
【参考方案1】:commands 中的命令在根文件夹中运行,而不是在您的应用程序文件夹中:
默认情况下,命令在根目录中运行。要从另一个目录运行命令,请使用 cwd 选项。
还有:
在设置应用程序和网络服务器之前运行的命令以及提取应用程序版本文件。
因此,即使您修复了执行文件夹,它也可能仍然无法工作,因为您的应用程序尚未解压缩。要在提取后运行命令,请使用container_commands。
【讨论】:
您好 Marcin。感谢您的回复。我也尝试了容器命令。但是,当我的实例因过载而终止并创建一个新实例然后新实例运行容器命令并因此在部署应用程序之前运行脚本时,它也会失败。我希望在部署应用程序后运行命令,因为脚本需要应用程序文件夹才能运行它。 @AnshulSingh 您不需要在 EB 实例上使用chmod +x
。通常,在将应用打包成 zip 并上传到 EB 之前,您会在本地工作站或构建阶段执行此操作。
好的,但是在新实例上创建应用程序文件夹之前运行的脚本呢?脚本抛出文件夹不存在错误。
@AnshulSingh 不确定你的意思。在您的问题中,没有关于文件夹丢失的错误。似乎是一个新问题,因此可以提出新问题。
在将应用程序提取到其中之前,容器命令在新的扩展实例上运行。但我希望它们在应用程序被提取到新的扩展实例后运行。以上是关于如何使用aws elasticbeanstalk中的钩子运行部署后脚本?的主要内容,如果未能解决你的问题,请参考以下文章
ElasticBeanstalk 与 Docker:如何使用来自 aws cli 的创建环境
从在 ElasticBeanstalk 中运行的 Flask 应用程序使用 AWS
如何在 AWS ElasticBeanstalk 中修改 apache VirtualHost
如何使用aws elasticbeanstalk中的钩子运行部署后脚本?