Elastic Beanstalk - 在特定环境中设置 .htpasswd
Posted
技术标签:
【中文标题】Elastic Beanstalk - 在特定环境中设置 .htpasswd【英文标题】:Elastic Beanstalk - set .htpasswd on specific environment 【发布时间】:2014-04-27 01:24:45 【问题描述】:我在 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 输出:构建期间发生错误:命令 command-01 失败。
Elastic Beanstalk 通知我它已部署应用程序并且正在运行新版本,但它实际上并未部署新代码并且仍在运行之前的代码。
这是尝试实现这一目标的正确方法还是有更好的选择。
【问题讨论】:
【参考方案1】:我认为您command:
行上的引号给您带来了问题。如果 shell 正在寻找一个非常奇怪的命令,我不会感到惊讶......但即使没关系,使用 test:
指令有条件地执行你想要的文件复制操作可能更容易。尝试一些类似的东西:
container_commands:
command-01: cp .ebextensions/.htpasswd /var/app/current
test: "[ .$APPLICATION_ENV. = .stage. ]"
(环境变量are available tocontainer_commands:
,但我不确定——您需要验证——它们是否也可以在该部分的test:
部分中使用。)
【讨论】:
以上是关于Elastic Beanstalk - 在特定环境中设置 .htpasswd的主要内容,如果未能解决你的问题,请参考以下文章
替换 AWS Elastic BeanStalk 上的特定实例?
在 Elastic Beanstalk 上部署 Docker 环境
如何将特定日志文件从多容器 Docker Elastic Beanstalk 流式传输到 CloudWatch?
如何在 ASP MVC 中使用 Elastic Beanstalk 环境属性