

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 如何设置数据库连接
<a name="customizing-rds-setup"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

可以使用自定义配方来设置应用程序服务器与其后端数据库之间的连接。该配方按要求配置应用程序服务器，通常是通过创建配置文件。该配方从 Stacks 在每个实例上安装的[堆栈配置和部署属性中的一组属性](workingcookbook-json.md)中获取连接数据， OpsWorks 例如主机和数据库名称。

例如，的[Chef 11 Linux 堆栈入门](gettingstarted.md)第 2 步基于一个名为 MyStack PHP App Server 和 MySQL 的堆栈，每个层都有一个实例。您将名为 Simple 的应用程序部署PHPApp 到 PHP App Server 实例，该实例使用 MySQL 实例上的数据库作为后端数据存储。当您部署应用程序时， OpsWorks Stacks 安装包含数据库连接信息的堆栈配置和部署属性。下例显示数据库连接属性，表示为 JSON：

```
{
  ...
  "deploy": {
    "simplephpapp": {
      ...
      "database": {
        "reconnect": true,
        "password": null,
        "username": "root",
        "host": null,
        "database": "simplephpapp"
        ...
      },
      ...
    }
  }
}
```

属性值由 OpsWorks Stacks 提供，要么是生成的，要么基于用户提供的信息。

要允许 Sim PHPApp ple 访问数据存储，必须通过为 PHP App Server 层的 Deploy [生命周期事件](workingcookbook-events.md)分配名`appsetup.rb`为的自定义配方，在 PHP 应用服务器和 MySQL 数据库之间建立 PHP 应用服务器和 MySQL 数据库之间的连接。当你部署 Simple 时 PHPApp`appsetup.rb`， OpsWorks Stacks 会运行，它会创建一个名为`db-connect.php`的配置文件来设置连接，如以下摘录所示。

```
node[:deploy].each do |app_name, deploy|
  ...
  template "#{deploy[:deploy_to]}/current/db-connect.php" do
    source "db-connect.php.erb"
    mode 0660
    group deploy[:group]

    if platform?("ubuntu")
      owner "www-data"
    elsif platform?("amazon")   
      owner "apache"
    end

    variables(
      :host =>     (deploy[:database][:host] rescue nil),
      :user =>     (deploy[:database][:username] rescue nil),
      :password => (deploy[:database][:password] rescue nil),
      :db =>       (deploy[:database][:database] rescue nil),
      :table =>    (node[:phpapp][:dbtable] rescue nil)
    )
    ...
  end
end
```

表示连接特征的变量，如 `host`、`user` 等被设置为来自[部署 JSON 的](workingcookbook-json.md#workingcookbook-json-deploy) `[:deploy][:app_name][:database]` 属性的相应值。为简单起见，示例假定您已创建了一个名为 `urler` 的表，所以在说明书的属性文件中该表名表示为 `[:phpapp][:dbtable]`。

该配方实际上可以将 PHP 应用程序服务器与任何 MySQL 数据库服务器连接，而不仅仅是 MySQL 层的成员。要使用其他 MySQL 服务器，您只需将`[:database]`属性设置为适合您的服务器的值，您可以使用[自定义 JSON](workingstacks-json.md) 来完成此操作。 OpsWorks 然后，堆栈将这些属性和值合并到堆栈配置和部署属性中，并`appsetup.rb`使用它们来创建用于设置连接的模板。有关重写堆栈配置和部署 JSON 的更多信息，请参阅[覆盖属性](workingcookbook-attributes.md)。