对于一个项目,我在AWS Elastic Beanstalk中有两个环境:验收和生产。接受使用一个简单的t2.nano实例,而生产使用一个t2.medium。
t2.nano具有500 MB的RAM,而t2.medium具有4 GB。因此,我想根据我要部署的环境在Dockerrun.aws.json中分配不同的内存。这似乎不可能。
我尝试过的事情:
Dockerrun.aws.json.acceptance
和Dockerrun.aws.json.production
。.ebextensions
脚本中,调整/opt/elasticbeanstalk/hooks/appdeploy/pre/01unzip.sh
脚本(使用sed
),以使其在解压缩后将正确的Dockerrun.aws.json.[env]
文件复制到Dockerrun.aws.json
。源和循环遍历容器定义之前。这部分起作用:
Dockerrun.aws.json
文件确实已替换为特定于环境的文件。Dockerrun.aws.json
文件,显然已经使用了。当我删除该文件时,eb deploy
失败,并显示No ecs task definition (or empty definition file) found in environment
我能做什么:
eb deploy
,而是使用自定义部署脚本,该脚本首先将Dockerrun.aws.json
文件替换为特定于环境的文件,然后运行eb deploy
但是,如果可以选择使用纯EB CLI而不是使用自定义脚本,那将是我的选择。
编辑:拥有两个Dockerrun的主要目标是为每个容器分配不同的内存,并为每个环境加载自定义PHP-FPM配置(通过将具有配置文件的特定于环境的目录安装到/usr/local/etc/php-fpm.d
) ,这些子进程具有不同的设置。
答案 0 :(得分:0)
有点晚了,但是任何希望将不同的Dockerrun.aws.json
文件部署到不同环境的人都可以找到帮助。
正如OP已经发现的那样,需要在部署时定义定义。尝试使用.ebextensions在生命周期中为时已晚。
OP中的what I could do
-使用自定义脚本进行部署正是我们的工作。
具体来说,我们有我们的CI运行命令:
.ebextensions/
和Dockerrun.aws.worker.json => Dockerrun.aws.json
复制到单独的文件夹中。eb deploy
进行部署。