【问题标题】:AWS ECS specify configuration file based on environmentAWS ECS 根据环境指定配置文件
【发布时间】:2020-03-06 13:50:22
【问题描述】:

我有两个应用程序(.net core 3.1 和 Angular 8),它们作为 docker 容器部署在 aws ecs 上。现在我想设置多个环境,例如质量、分期、生产等。 现在我想从特定的配置文件中读取数据,以便暂存 docker 容器从 appsettings.staging.json 读取数据,而对于生产,它将从 appsettings.production.json 读取数据。 Angular 也一样。

我该怎么做?我可以在 aws 中的 codebuild 中指定环境变量,但是如何告诉 docker 读取特定文件?

【问题讨论】:

    标签: docker asp.net-core amazon-ecs aws-codepipeline aws-codebuild


    【解决方案1】:

    一些随意的想法:

    1. 为不同的环境(UAT/DEV/PROD)创建不同的 ECS 集群。
    2. 为不同的环境使用相同的 docker 镜像(每个环境不重建镜像)
    3. 从 Parameter store [1] 或 Secrets Manager [2] 中提取密钥/配置
    4. 将版本化配置文件保存在 S3 或 Git 中,并在容器初始化时将其拉下。不要使用图像烘焙配置。更好的是,没有配置文件,所有内容都从环境变量中读取。寻找像 confd (https://github.com/kelseyhightower/confd)这样的解决方案
    5. 一般看关注:https://12factor.net/

    参考:

    [1]https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html

    [2]https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-tutorial.html

    【讨论】:

      【解决方案2】:

      有很多方法可以给这只猫剥皮。它们都涉及为每个环境创建单独的任务定义(都使用相同的容器)。

      您可以将不同的环境变量传递给每个任务定义(或挂载不同的卷)。

      您可以将所有配置文件打包到容器中,并有一个环境变量指向每个环境的正确文件。

      还有其他选项不需要将所有配置打包到 docker 文件中。这有好处,因为您在更改配置时不需要重新构建容器。

      您可以将所有配置放在环境变量中,使用 AWS 机密管理器,或者为每个任务定义使用配置挂载不同的卷。

      【讨论】:

      • 嗨@Robert,感谢您的回答。你有任何帮助链接让我可以了解更多信息吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 2018-11-11
      • 1970-01-01
      相关资源
      最近更新 更多