【发布时间】:2019-01-09 12:34:06
【问题描述】:
对于一个项目,我在 AWS Elastic Beanstalk 中有两个环境:验收和生产。验收使用一个简单的 t2.nano 实例,而生产使用一个 t2.medium。
t2.nano 有 500 MB 的 RAM,而 t2.medium 有 4 GB。因此,我希望在我的 Dockerrun.aws.json 中分配不同的内存,具体取决于我要部署到的环境。这似乎是不可能的。
我尝试过的:
- 设置两个 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),这子进程有不同的设置。
【问题讨论】:
标签: amazon-web-services docker elasticsearch amazon-elastic-beanstalk amazon