VCS 上的 Elastic Beanstalk .config 文件?
Posted
技术标签:
【中文标题】VCS 上的 Elastic Beanstalk .config 文件?【英文标题】:Elastic Beanstalk .config file on VCS? 【发布时间】:2017-04-11 14:03:29 【问题描述】:我正在使用 AWS Elastic Beanstalk 部署 Laravel 应用程序,并创建了一个文件夹 .ebextensions 来存储我的所有 .config 文件。
该项目在使用 GIT 的 VCS 下,我不确定是否要将 .config 添加到存储库,因为它包含我的一些凭据。
.config 文件是否可以移动到 s3 并用于部署?
【问题讨论】:
您的.config
文件应该在 VCS 中以 snippets
的形式提供 - 当然缺少您的凭据。凭证应该从不存储在任何地方,并且一次只存在于一个给定的位置,没有重复。但是,没有凭据的参数很少成为问题。
好的,我已将没有凭据的 .config 文件放入 VCS,我需要创建一个包含我的凭据的文件。我将如何在 EB 中做到这一点?
我不确定snippets
是什么意思
最简单的方法是在弹性 beanstalk 环境中设置环境变量,然后您可以通过配置文件中的变量访问这些变量。
是的,我已经这样做了,但我仍然需要在我的根应用程序文件夹中创建一个带有这些凭据的 .env 文件,因为它基于 Laravel 框架,所以我的应用程序才能工作。
【参考方案1】:
在 Elastic beanstalk 控制台中
配置 > 软件配置 > 环境属性
你会看到这样的屏幕
你可以在这里填写你的环境变量。
这意味着您无需在.config
文件中设置环境变量,也无需将.env
文件提交到VCS。
输入控制台的环境变量被复制到弹性 beanstalk 在该应用程序/环境中为您管理的任何 EC2 框。
Laravel 中的 .env 文件旨在促进开发,因此不应在生产中使用。该文件中的任何内容都应创建为真正的环境变量,并且不需要存在 .env 文件。
.env 文件(通过 phpdotenv)只是在运行时创建环境变量,如果环境变量实际上已经存在,则不需要这样做。
【讨论】:
【参考方案2】:切勿将凭据和其他机密信息放入 VCS/Git。
理想情况下,您可以将您的机密信息放在某种“保险库”中,您的 EB 应用程序将在运行时访问该“保险库”,因此永远不会存储信息本身。但是,有时这是不可能的/不切实际的。
对于 Elastic Beanstalk,您可以执行以下操作:
-
在
.ebextenions
中创建您的.config
文件。
将您的秘密/凭据设置添加到配置文件中,并使用“更改我”之类的值。
将应用程序部署到 Elastic Beanstalk 后,修改应用程序的配置“软件”设置,并将设置的值从“更改我”更改为适当的值。
【讨论】:
Laravel 运行所需的所有凭据都在.env
文件中,每次我使用 eb deploy
命令时,它都会被删除,因为它不在 VCS 下。如果我这样做,我将不得不 ssh 进入实例并每次更新我的凭据。我可以将我的凭据放入 config.yml 或任何其他地方,以便在每次更新时自动执行此过程。
没有。数据仍将在 Git 中,这是您要避免的。尝试将您的信息放入由 EB 控制的环境变量中。然后当您的应用程序启动时,将信息从那里传输到您的.env
文件。
我想作为@ben-swinburne 点,我可以从控制台将凭据保存在 Elastic Beanstalk 配置中。
通过将它们放入.ebextensions
文件中,它们的设置名称将被预先添加到您的 EB 应用程序属性页面中。以上是关于VCS 上的 Elastic Beanstalk .config 文件?的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Beanstalk 上的 ElasticSearch
AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件
如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?