1

我有一个在 aws elastic beanstalk 上运行的应用程序。该应用程序需要一个配置文件,我将其用于手动在 ec2 实例上进行测试。

问题是,当自动缩放器决定扩展到更多实例时,应用程序在新实例上没有任何配置文件。

我阅读了有关为实例创建模板的信息。我可以将我的配置文件放在实例上,然后将其复制到新实例中。这有一个很大的缺点,因为如果我想在运行时更改配置,我必须在所有实例上都这样做。

有没有办法解决这个问题?

4

4 回答 4

2

好吧,我看到两个选项: 1. 当您更改配置文件时,您需要在 EB 上进行环境更新。在这种情况下,所有节点都将使用新版本的配置文件进行更新。2. 而不是文件将您的配置设置到一些数据库,如 simpledb 或 dynamodb。从我的角度来看,如果您想在运行时更改设置,则此解决方案更适合您的情况。

于 2013-04-18T18:40:21.250 回答
0

我同意 Vadim911,DB 将是一个更简单的解决方案。

但是,当您的应用程序在环境中设置时,您可以使用类似的方法来执行此操作。

WEB-INF/.ebextensions/commands.config

commands:
  replace-file:
    command: cp .ebextensions/file.xml /folder/file.xml

资料来源:infoq

于 2013-04-24T10:11:14.823 回答
0

如果我们更深入:) 使用“文件”而不是“命令”要好得多:

files:
    /folder/file.xml:
        mode: 000XXX
        owner: root
        group: users
        content: |
           <xml>I'm XML</xml>
于 2013-04-24T15:54:18.310 回答
0

我建议您将配置文件放在安全的位置,例如 s3 存储桶。将敏感信息远离您的存储库。

尝试这样的事情:

# .ebexetensions/safe-config-install.config

files:
  "/tmp/cron-fetch-config.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      for f in /etc/profile.d/*.sh; do source $f; done;

      python -c "import boto;boto.connect_s3().get_bucket('my-private-bucket').get_key('secretfolder/secretfile.xml').get_contents_to_filename('/var/app/current/path/to/config.xml');

container_commands:
  install-config:
    command: python -c "import boto;boto.connect_s3().get_bucket('my-private-bucket').get_key('secretfolder/secretfile.xml').get_contents_to_filename('/var/app/ondeck/path/to/config.xml');

commands:
  setup-cron-for-config:
    command: echo -e "* * * * * root /tmp/cron-fetch-config.sh\n" > /etc/cron.d/my_cron
于 2013-06-30T13:12:39.240 回答