amazon-web-services - 用于暂存和生产的单独 Dockerrun.aws.json 文件

标签 amazon-web-services amazon-elastic-beanstalk dockerrun.aws.json

处理 Dockerrun.aws.json 文件部署到暂存和生产的最佳方法是什么?有没有办法将变量传递给图像值等,或者每个环境都有多个 Dockerrun.aws.json 文件?目前,我的暂存环境将图像标记为暂存,生产将图像标记为生产,但我需要每个环境的 Dockerrun.aws.json 不同?我要么想做这样的事情:

"image": "${IMAGE}",

其中 IMAGE 在每个环境的配置中定义或将每个文件分开。因此,我可以根据暂存或生产情况对每个容器进行不同的设置。

最佳答案

老问题,但如果它可以帮助其他人,我想做几乎相同的事情并将其自动化,因此作为一种快速的方法,我想出了一个简单的 shell 脚本。
我们的想法是拥有一个 Dockerrun.aws.json 模板文件,该文件将包含一个动态 ENV 属性,然后根据所需的环境,脚本将使用此模板并生成适当的 Dockerrun.aws.json 文件。
例子:
创建一个包含以下内容的 shell 脚本:

#!/bin/bash

# current script directory path
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# $1 will be the environement name passed to the script : it can only be dev or prod
# if empty, we ask for user input for convenience
if [ "$1" == "" ]; then
  echo -n "Enter your the environment (either 'dev' or 'prod') and press [ENTER]:"
  read ENV
else
  ENV=$1
fi

# check if environment name is valid
if [ "$ENV" == "dev" ] || [ "$ENV" == "prod" ] ; then

  # move to shell script directory
  cd $DIR

  # generate Dockerfile from template by replacing the ENV property by the input
  echo "Generating Dockerrun.aws.json..."
  sed -e "s/\${ENV}/$ENV/g" Dockerrun.aws.json.template > Dockerrun.aws.json

  # do other things here if necessary

else
  echo "$ENV is not a valid environment name, accepted values : env & prod"
  exit 0
fi
然后创建您的 Dockerrun.aws.json.template 文件:
{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "php-app",
      "image": "phpfpm-image-${ENV}",
      #...
    },
    {
      "name": "nginx-proxy",
      "image": "nginx-image-${ENV}",
      #...
    }
  ]
}
现在,只需将 shell 脚本放在 Dockerrun.aws.jon.template 文件所在的位置,然后像这样运行它:
sh yourscript.sh dev
它将生成一个有效文件供您用于给定环境。
这是一个简单的示例,它为您提供了做什么的基本概念,然后您可以从中构建更复杂的东西。我个人使用它来选择所有正确的配置文件(.ebextensions 等),然后将整个文件压缩以上传到 beanstalk。

关于amazon-web-services - 用于暂存和生产的单独 Dockerrun.aws.json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50162321/

相关文章:

amazon-web-services - Dockerrun aws 硬编码内存

amazon-web-services - 错误 : ValidationError - The AWSEBDockerrunVersion key in the Dockerrun. aws.json 文件无效或未包含

c++ - AWS CPP S3 SDK 是否支持 "Transfer acceleration"

amazon-web-services - 当 AWS ElasticBeanstalk 扩展到另一台服务器时,它似乎在准备就绪之前就使其可用?

amazon-web-services - AWS Beanstalk,如何自动重启(或终止)未响应的实例

amazon-web-services - EB 部署到多个环境

docker - 容器变换给出缺少图像参数错误

python - AWS CLI - 如何过滤返回的 DynamoDB 项目?

amazon-web-services - Cloudfront 未返回内容编码 header

javascript - 在前端存储 AWS 凭证