向 Elastic Beanstalk 环境中添加数据库
lastic Beanstalk 提供了与 Amazon Relational Database Service (Amazon RDS) 的集成以帮助您将数据库实例添加到 Elastic Beanstalk 环境。您可以使用 Elastic Beanstalk 在创建环境期间或之后将 MySQL、PostgreSQL、Oracle 或 SQL Server 数据库添加到您的环境。当您将数据库实例添加到您的环境时,Elastic Beanstalk 会通过设置数据库主机名、端口、用户名、密码和数据库名称的环境属性向您的应用程序提供连接信息。
属于您的环境一部分的数据库实例将关联到环境的生命周期。在将数据库实例添加到环境后,无法从环境中将其删除。如果终止环境,则会同时终止数据库实例。您可以配置 Elastic Beanstalk 使其在您终止环境时保存数据库的快照,并在您向环境中添加数据库实例时从快照中恢复数据库。您可能产生存储数据库快照的费用。
对于生产环境,您可以在您的环境之外启动一个数据库实例并将应用程序配置为在 Elastic Beanstalk 提供的功能范围之外连接到该实例。要使用环境外部的数据库实例,需要其他安全组和连接字符串配置。但是,这也使您能够从多个环境连接到数据库、使用集成数据库不支持的数据库类型、执行蓝/绿部署以及停用您的环境,而不会影响数据库实例。
在启动数据库实例并配置安全组后,您可以使用环境属性将连接信息(终端节点、密码等)传递到应用程序。这是当您在环境中运行数据库实例时,Elastic Beanstalk 使用的相同机制。
在环境属性部分中,定义应用程序读取的用于构建连接字符串的变量。为了与具有集成 RDS 数据库实例的环境兼容,请使用以下内容。
-
RDS_HOSTNAME – 数据库实例的主机名。
Amazon RDS 控制台标签 – 终端节点(这是主机名)
-
RDS_PORT – 数据库实例接受连接的端口。默认值因数据库引擎而异。
Amazon RDS 控制台标签 – 端口
-
RDS_DB_NAME – 数据库名称,ebdb。
Amazon RDS 控制台标签 – 数据库名称
-
RDS_USERNAME – 您为数据库配置的用户名。
Amazon RDS 控制台标签 – 用户名
-
RDS_PASSWORD – 您为数据库配置的密码。
为了提高安全性,您可以将连接信息存储在 Amazon S3 中,并将 Elastic Beanstalk 配置为在部署期间检索该信息。利用配置文件 (.ebextensions),您可以在部署应用程序时配置环境中的实例以从 Amazon S3 安全地检索文件。
在 Amazon S3 中存储连接字符串
使用环境属性向应用程序提供连接信息是将密码置于代码外的好方法,但这不是完美解决方案。环境属性可在环境管理控制台中发现,并且可由有权在环境上描述配置设置的任何用户查看。根据平台,环境属性还可能显示在实例日志中。
您可以通过在控制的 Amazon S3 存储桶中存储连接信息来锁定该信息。基本步骤如下所示:
-
将包含连接字符串的文件上传到 Amazon S3 存储桶。
-
向 EC2 实例配置文件授予读取该文件的权限。
-
将您的应用程序配置为在部署期间下载该文件。
-
在应用程序代码中读取该文件。
首先,创建存储桶来存储包含连接字符串的文件。在本示例中,我们将使用具有单个键和值的 JSON 文件。该值是 Amazon RDS 中的 PostgreSQL 数据库实例的 JDBC 连接字符串。
beanstalk-database.json
{ "connection": "jdbc:postgresql://mydb.b5uacpxznijm.us-west-2.rds.amazonaws.com
:5432
/ebdb
?user=username
&password=mypassword
" }
------------------------------------------------------------------------------------------------------------
~/my-app/.ebextensions/database.config
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["my-secret-bucket-123456789012
"]
roleName: "aws-elasticbeanstalk-ec2-role
"
files:
"/tmp/beanstalk-database.json
" :
mode: "000644"
owner: root
group: root
authentication: "S3Auth"
source: https://s3-us-west-2
.amazonaws.com/my-secret-bucket-123456789012
/beanstalk-database.json