AWS Elastic Beanstalk - 在环境之间切换环境变量

时间:2017-11-14 19:01:18

标签: node.js amazon-web-services amazon-ec2 elastic-beanstalk

我正在使用Elastic Beanstalk的aws:elasticbeanstalk:application:environment命名空间来使用env vars配置我的环境。如何为不同的环境设置不同的值,例如发展与生产。

发展:

option_settings:
  aws:elasticbeanstalk:application:environment:
    REDIS_HOST: localhost

生产:

option_settings:
  aws:elasticbeanstalk:application:environment:
    REDIS_HOST: prod.redis.server.com

2 个答案:

答案 0 :(得分:2)

如何更改取决于您的部署方法。

您可以使用的一个选项是在.config文件中设置虚假值:

option_settings:
  aws:elasticbeanstalk:application:environment:
    REDIS_HOST: change me

然后,在部署之后,使用AWS管理控制台或使用EB CLI修改变量:

eb setenv REDIS_HOST=prod.redis.server.com

如果您使用CloudFormation部署EB应用程序,则可以将该值作为CloudFormation模板中OptionSettings字段的一部分提供:

    "EBConfigurationTemplate" : {
        "Type" : "AWS::ElasticBeanstalk::ConfigurationTemplate",
        "Properties" : {
            "ApplicationName" : {
                "Ref" : "EBApplication"
            },
            "Description"     : "Configuration Template",
            "OptionSettings"  : [
                {
                    "Namespace" : "aws:elasticbeanstalk:application:environment",
                    "OptionName" : "REDIS_HOST",
                    "Value"      : {
                        "Ref" : "RedisHostInputParameter"
                    }
                },
            ]

也可能有其他方法,但它们将取决于部署方法。

答案 1 :(得分:2)

AWS CLI为您提供了一种方便的方法,因为update-environment命令允许您从特殊格式的json文件中设置env变量。为要部署到的每个环境创建单独的json文件。

名为deploy-dev.json的示例json文件:

[
  {
    "Namespace": "aws:elasticbeanstalk:application:environment",
    "OptionName": "NODE_ENV",
    "Value": "dev"
  },
  {
    "Namespace": "aws:elasticbeanstalk:application:environment",
    "OptionName": "LOG_LEVEL",
    "Value": "silly"
  }
]

部署应用程序,然后更新env vars:

aws elasticbeanstalk create-application-version --application-name "$EB_APP_NAME" --version-label "$EB_VERSION"
aws elasticbeanstalk update-environment --environment-name "$EB_ENV_NAME" --version-label "$EB_VERSION" --option-settings file://.ebextensions/deploy-dev.json