每个环境单独的Dockerrun.aws.json

时间:2018-08-01 20:24:17

标签: amazon-web-services docker elasticsearch elastic-beanstalk amazon

对于一个项目,我在AWS Elastic Beanstalk中有两个环境:验收和生产。接受使用一个简单的t2.nano实例,而生产使用一个t2.medium。

t2.nano具有500 MB的RAM,而t2.medium具有4 GB。因此,我想根据我要部署的环境在Dockerrun.aws.json中分配不同的内存。这似乎不可能。

我尝试过的事情:

  1. 设置两个Dockerrun.aws.json文件:Dockerrun.aws.json.acceptanceDockerrun.aws.json.production
  2. .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) ,这些子进程具有不同的设置。

1 个答案:

答案 0 :(得分:0)

有点晚了,但是任何希望将不同的Dockerrun.aws.json文件部署到不同环境的人都可以找到帮助。

正如OP已经发现的那样,需要在部署时定义定义。尝试使用.ebextensions在生命周期中为时已晚。

OP中的what I could do-使用自定义脚本进行部署正是我们的工作。

具体来说,我们有我们的CI运行命令:

  1. 在容器定义内替换图像标签。
  2. .ebextensions/Dockerrun.aws.worker.json => Dockerrun.aws.json复制到单独的文件夹中。
  3. 该单独的文件夹(总共4个文件)已压缩。
  4. 最后使用eb deploy进行部署。