【问题标题】:AWS - Storing .env filesAWS - 存储 .env 文件
【发布时间】:2022-02-06 19:27:41
【问题描述】:

一些背景知识,不久前创建了一个 cfm 模板,它允许我们在 aws 上部署我们的应用程序的新堆栈,该堆栈具有 redis、db、2 个安全组、集群、目标 grous、、alb、iam 角色,内联策略,几个服务,每个服务都有服务发现条目等,更重要的是现在它创建了多个名为“${cluster}/${env}/${nameOfTheParam}”的参数存储

所有参数都是在创建新堆栈时输入的环境变量。 现在我们的环境已经发展到有几十个,有点迟到了,但我正在考虑简化这个过程。

我最终想要实现的不是将每个 env 变量作为参数一个一个地添加到 cloudformation 界面的输入字段中,而是简单地复制和粘贴它们(在某种意义上从 . env 文件)作为 cfm 参数放入单个输入字段。 我有什么选择来实现它?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    .env 是向您的软件填充外部配置的标准方式。

    我同意这一点。我们总是为任何框架(docker-compose、create-react-app、terraform vars 等)寻找它

    不幸的是,并非所有框架/平台都支持。即AWS Cloudfromation 模板。

    但是,永远不会太晚,您始终可以通过单个命令填充 .env

    export $(cat .env | xargs)
    

    如果您想让它在所有地方保持一致,您可以限制您的团队始终使用 Makefile 来构建/运行。在你的情况下。它是插值模板,然后从中创建/更新堆栈(或运行它)。

    如果你选择Makefile,那么你的makefile应该从以下开始:

    
       
    #!/usr/bin/make -f
    
    include .env
    # auto populate env vars from .env file
    VARS:=$(shell sed -ne 's/ *\#.*$$//; /./ s/=.*$$// p' .env )
    $(foreach v,$(VARS),$(eval $(shell echo export $(v)="$($(v))")))
    
    
    

    另外一点,如果您只想在本地(在您的终端中)处理.env 文件,并且假设您正在使用 OH-my-ZSH,那么您可以加载 Oh-My-ZSH 的 .env 插件:

    cat ~/.zshrc | grep env            
    plugins=(git man dotenv)
    

    【讨论】:

    • 我不能对这条评论投反对票,但很简单,这条回复已经过时了,甚至不应该在这里
    【解决方案2】:

    显然我目前的使用被认为是 IoC 反模式,原因是

    • 部署一个服务,让我们假设 1 个逗号分隔的环境变量集存储在参数存储中,
    • 无法从我的服务中检测到我当前使用的 .env 变量之间的偏差。
    • 将每个 env 变量作为一个单独的条目进入参数存储并在我的服务中单独的 key=value 对将允许我检测我的服务的当前状态和我的 cloudformation 模板之间的偏差

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2021-01-17
      • 1970-01-01
      • 2020-06-16
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2018-03-06
      相关资源
      最近更新 更多