对于一个项目,我有两个AWS弹性豆柄环境:验收和生产。验收使用一个简单的t2.nano实例,而生产使用t2.media。
t2.nano有500 MB的RAM,而t2.media有4GB的内存。因此,我希望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配置(通过将配置文件的环境特定的目录安装到/usr/local/etc/php-fpm.d),这些目录对子进程有不同的设置。
发布于 2019-10-04 00:06:19
有点晚了,但是任何想要将不同的Dockerrun.aws.json文件部署到不同环境的人都会发现这很有帮助。
正如OP已经发现的,定义需要在部署时定义。尝试使用.ebextensions在生命周期中为时已晚。
来自OP的what I could do --使用自定义脚本进行部署--正是我们所做的。
具体来说,我们有我们的CI运行命令:
.ebextensions/和Dockerrun.aws.worker.json => Dockerrun.aws.json复制到单独的文件夹中。eb deploy进行部署。https://stackoverflow.com/questions/51641733
复制相似问题