我在Elastic Beanstalk中在两个环境,生产环境和舞台环境中配置了一个PHP网站。在每个环境中,我都有一个APPLICATION_ENV环境变量集,用于向代码标识它运行的环境。我不希望公众可以访问我的舞台网站,我想在这个环境中放置一个htpasswd,而不是在制作环境上。
为了尝试实现这一点,我在.ebextensions中创建了一个配置。整个.ebextensions文件夹有三个文件:
01stage.config
container_commands:
command-01:
command: "/bin/bash .ebextensions/set_stage_htpasswd.sh"
leader_only: true
set_stage_htpasswd.sh
#!/bin/bash
if [ "$APPLICATION_ENV" == "stage" ]; then
cp /var/app/current/.ebextensions/.htpasswd /var/app/current/
fi
htpasswd的
my_username:my_password
我希望Elastic Beanstalk运行配置文件01stage.config,然后运行shell脚本set_stage_htpasswd.sh将.htpasswd文件复制到特定位置。
但是当我尝试部署它时:
我在事件日志中收到错误消息:
实例:i-2f795c6e模块:AWSEBAutoScalingGroup ConfigSet:null命令在实例上失败。返回码:1输出:构建期间发生错误:命令命令-01失败。
Elastic Beanstalk通知我它已经部署了应用程序,并且它正在运行新版本,但它还没有实际部署新代码,并且仍在运行前一个代码。
这是尝试实现这一目标的正确方法,还是有更好的选择。
答案 0 :(得分:1)
我认为command:
行上的引号会给您带来麻烦。如果shell正在寻找一个非常奇怪的命令,我不会感到惊讶......但即使这样,可能更容易使用test:
指令有条件地执行你想要的文件复制操作。尝试一下:
container_commands:
command-01: cp .ebextensions/.htpasswd /var/app/current
test: "[ .$APPLICATION_ENV. = .stage. ]"
(环境变量are available to container_commands:
,但我不确定 - 您需要验证 - 它们在test:
部分中也可用部分。)