我的应用程序有一些先决条件,这意味着只有运行几个脚本后,要求的安装才会起作用。
我一直在阅读自定义 Python 容器的文档但它并没有完全说明如何控制 .ebextensions 中的脚本何时运行,而且我所做的所有测试都表明这种情况确实会发生后应用程序已部署,或者至少在使用 pip 安装 requirements.txt 中的包之后。
AWS 论坛上的这篇文章建议创建一个脚本,并将其文件名插入到 hooks 文件夹中,但这显然不推荐:
将文件直接放入钩子目录中是有风险的,因为这不是记录的方法,在某些容器中有所不同,并且将来可能会发生变化。
我想知道是否有人成功设置在 requirements.txt 文件之前运行的脚本,如果是的话我可能做错了什么。
这是我的 .ebextensions 文件:
packages:
yum:
# packages needed for my app
files:
"/home/ec2-user/setup-script.sh":
mode: "00755"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
#!/bin/bash
echo $(date -u) >> /tmp/debug.log
echo "Running as $(whoami)" >> /tmp/debug.log
# rest of script
commands:
01-setup-script:
command: "sh -x /home/ec2-user/setup-script.sh"
部署在安装要求的过程中停止,并且似乎没有运行脚本,或者更新用户文件夹中存在的脚本。
答案1
好吧,事实证明剧本确实先于其他所有操作运行。看来脚本本身存在错误,这意味着它无法正确运行,这就是它无法正确设置实例的原因!
我通过查看输出发现了这一点/var/log/eb-activity.log
set -e
所以我想总是要仔细检查脚本的输出!在脚本顶部添加不会有什么坏处,这样当遇到错误时它会停止执行。