现在我的数据库变量定义为RDS_*
,但我想将它们重新映射到我的应用程序的约定。
这将有助于避免在我的项目内部编写特定于 AWS 的检测,这显然是可取的。
答案1
有几种不同的选择,每种都有各自的缺陷:
1.向 EB 配置添加环境变量
在您的环境中,导航到“配置”,然后导航到“软件配置”部分。在那里,您将看到一个环境变量列表,在底部您可以列出您自己的自定义变量。这样做的缺点是现在没有办法动态映射来自 AWS 环境变量的值。如果 AWS 中的值发生变化,则需要手动更新您的值。这最有可能发生在您升级/降级数据库的情况下。因此,您需要将 DB 的主机更新为新的 RDS 端点。(注意:这是基于 PHP 环境可用的选项。我见过其他语言的变体,但可能是旧文档。)
2. 添加部署后脚本
对于 beanstalk 来说这有点麻烦,但可以运行部署后脚本。我不会详细介绍,但基本上你需要添加部署后脚本,如本文所述文章到默认的 beanstalk ami。然后,您需要将实例复制为新的 ami,并在 beanstalk 实例中切换它以默认使用它。在部署后脚本中,您可以将映射添加到环境变量中。
3. 将映射添加到代码中
我知道您不想这样做,但我认为这对您来说麻烦最少。我在 PHP 中提供了一个非常简单的示例。如果您使用 PHP,请小心交换 $_ENV 和 getenv()/putenv()/$_SERVER,因为它们来自不同的来源并且可以独立更改。
<?php
if(getenv('RDS_VAR')) {
putenv('NEW_VAR', getenv('RDS_VAR'))
}
?>
最后的想法
在将应用程序部署到 Beanstalk 时,我结合使用了 1 和 3,因为这样在处理动态环境变量时可以提供最大的灵活性。我首先将值映射到我的应用程序配置,如 #3 中所述,然后如果我想计划可能交换 RDS 端点、密码或用户名,我可以添加环境变量,如 #1 中所述,并将覆盖项放到我的 AWS 环境映射中。这使我能够与 AWS 环境变量保持同步,但如果我需要交换数据库以进行备份,也可以在软件配置中手动覆盖它们。