【问题标题】:AWS Elastic Beanstalk - switching environment variables between environmentsAWS Elastic Beanstalk - 在环境之间切换环境变量
【发布时间】:2018-04-27 20:23:25
【问题描述】:

我正在使用 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

【问题讨论】:

标签: amazon-web-services amazon-ec2 amazon-elastic-beanstalk


【解决方案1】:

AWS CLI 为您提供了一种方便的方法,因为update-environment 命令允许您从特殊格式的 json 文件设置环境变量。为您将部署到的每个环境创建一个单独的 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"
  }
]

部署应用,然后更新环境变量:

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

【讨论】:

    【解决方案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 无法满足我的需求。我没有使用 CloudFormation,但我可能不得不考虑使用它进行部署。
    • 你目前的自动化部署方法是什么?
    • 我将 Elastic Beanstalk 与 env var .config 文件一起使用。此自动在部署期间生成这些环境变量。我目前只有一个开发环境,所以在创建产品环境时我只需要切换这些值
    • 是的,但是您如何将您的应用程序包部署到 EB?您使用 EB CLI 吗? AWS 管理控制台?其他?
    • 我假设 Elastic Beanstalk 会对此提供支持,因此除非其他人有解决方案,否则我将使用脚本。谢谢!
    猜你喜欢
    • 2015-08-05
    • 2016-12-10
    • 2012-12-13
    • 2021-09-29
    • 2017-02-28
    • 1970-01-01
    • 2016-08-17
    • 2020-11-09
    • 2017-07-24
    相关资源
    最近更新 更多