

# 自动连接 EC2 实例和数据库实例
<a name="ec2-rds-connect"></a>

您可以使用 RDS 控制台来简化在 Amazon Elastic Compute Cloud（Amazon EC2）实例和数据库实例之间设置连接的过程。通常，数据库实例位于私有子网中，而 EC2 实例位于 VPC 内的公有子网中。您可以在 EC2 实例上使用 SQL 客户端连接到数据库实例。EC2 实例还可以运行访问私有数据库实例的 Web 服务器或应用程序。有关在 EC2 实例和多可用区数据库集群之间设置连接的说明，请参阅[自动连接 EC2 实例和多可用区数据库集群](multiaz-ec2-rds-connect.md)。

![\[自动将数据库实例与 EC2 实例连接。\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/auto-connect-rds-ec2.png)


如果您想连接到与数据库实例不在同一 VPC 中的 EC2 实例，请参阅[在 VPC 中访问数据库实例的场景](USER_VPC.Scenarios.md)中的相应方案。

**Topics**
+ [与 EC2 实例的自动连接概述](#ec2-rds-connect-overview)
+ [自动连接 EC2 实例和 RDS 数据库](#ec2-rds-connect-connecting)
+ [查看连接的计算资源](#ec2-rds-connect-viewing)
+ [连接到运行特定数据库引擎的数据库实例](#ec2-rds-Connect-DBEngine)

## 与 EC2 实例的自动连接概述
<a name="ec2-rds-connect-overview"></a>

当您在 EC2 实例和 RDS 数据库之间设置连接时，Amazon RDS 会自动为您的 EC2 实例和 RDS 数据库配置 VPC 安全组。

以下是将 EC2 实例与 RDS 数据库连接的要求：
+ EC2 实例必须与 RDS 数据库存在于同一 VPC 中。

  如果同一 VPC 中不存在任何 EC2 实例，则控制台将提供创建一个此类实例的链接。
+ 设置连接的用户必须具有执行以下 Amazon EC2 操作的权限：
  + `ec2:AuthorizeSecurityGroupEgress` 
  + `ec2:AuthorizeSecurityGroupIngress` 
  + `ec2:CreateSecurityGroup` 
  + `ec2:DescribeInstances` 
  + `ec2:DescribeNetworkInterfaces` 
  + `ec2:DescribeSecurityGroups` 
  + `ec2:ModifyNetworkInterfaceAttribute` 
  + `ec2:RevokeSecurityGroupEgress` 

如果数据库实例和 EC2 实例位于不同的可用区，则您的账户可能会产生跨可用区成本。

当您设置与 EC2 实例的连接时，Amazon RDS 会根据与 RDS 数据库和 EC2 实例关联的安全组的当前配置采取操作，如下表所述。


****  

| 当前 RDS 安全组配置 | 当前 EC2 安全组配置 | RDS 操作 | 
| --- | --- | --- | 
|  有一个或多个安全组与 RDS 数据库 [其名称与模式 `rds-ec2-n`（其中 `n` 是数字）相匹配] 关联。尚未修改与此模式匹配的安全组。该安全组只具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 EC2 实例关联，此实例的名称与模式 `ec2-rds-n`（其中 `n` 是数字）相匹配。尚未修改与此模式匹配的安全组。该安全组只具有一条以 RDS 数据库的 VPC 安全组作为源的出站规则。  |  RDS 不执行任何操作。 已在 EC2 实例和 RDS 数据库之间自动配置了连接。由于 EC2 实例和 RDS 数据库之间已经存在连接，因此不会修改安全组。  | 
|  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/ec2-rds-connect.html)  |  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/ec2-rds-connect.html)  |  [RDS action: create new security groups](#rds-action-create-new-security-groups)  | 
|  有一个或多个安全组与 RDS 数据库（其名称与模式 `rds-ec2-n` 相匹配）关联。尚未修改与此模式匹配的安全组。该安全组只具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 EC2 实例（名称与模式 `ec2-rds-n` 匹配）关联。但是，Amazon RDS 不能将其中任何安全组用于连接 RDS 数据库。如果安全组没有一条以 RDS 数据库的 VPC 安全组作为源的出站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  |  [RDS action: create new security groups](#rds-action-create-new-security-groups)  | 
|  有一个或多个安全组与 RDS 数据库（其名称与模式 `rds-ec2-n` 相匹配）关联。尚未修改与此模式匹配的安全组。该安全组只具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。  |  存在用于连接的有效 EC2 安全组，但它与 EC2 实例不关联。此安全组的名称与模式 `ec2-rds-n` 相匹配。尚未修改它。它只具有一条以 RDS 数据库的 VPC 安全组作为源的出站规则。  |  [RDS action: associate EC2 security group](#rds-action-associate-ec2-security-group)  | 
|  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/ec2-rds-connect.html)  |  有一个或多个安全组与 EC2 实例（名称与模式 `ec2-rds-n` 匹配）关联。尚未修改与此模式匹配的安全组。该安全组只具有一条以 RDS 数据库的 VPC 安全组作为源的出站规则。  |  [RDS action: create new security groups](#rds-action-create-new-security-groups)  | 

**RDS 操作：创建新的安全组**  
Amazon RDS 执行以下操作：
+ 创建与模式 `rds-ec2-n` 匹配的新安全组。该安全组具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。此安全组与 RDS 数据库关联，并允许 EC2 实例访问 RDS 数据库。
+ 创建与模式 `ec2-rds-n` 匹配的新安全组。该安全组具有一条以 RDS 数据库的 VPC 安全组作为目标的出站规则。该安全组与 EC2 实例相关联，并允许 EC2 实例向 RDS 数据库发送流量。

**RDS 操作：关联 EC2 安全组**  
Amazon RDS 将有效的现有 EC2 安全组与 EC2 实例关联。该安全组允许 EC2 实例向 RDS 数据库发送流量。

## 自动连接 EC2 实例和 RDS 数据库
<a name="ec2-rds-connect-connecting"></a>

在 EC2 实例与 RDS 数据库之间设置连接之前，请确保满足[与 EC2 实例的自动连接概述](#ec2-rds-connect-overview)中所述的要求。

如果您在配置连接后更改安全组，则这些更改可能会影响 EC2 实例与 RDS 数据库之间的连接。

**注意**  
您只能使用 Amazon Web Services 管理控制台自动在 EC2 实例与 RDS 数据库之间设置连接。您无法使用 Amazon CLI 或 RDS API 自动设置连接。

**自动连接 EC2 实例与 RDS 数据库**

1. 登录 Amazon Web Services 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库），然后选择 RDS 数据库。

1. 从**操作**中，选择**设置 EC2 连接**。

   将出现 **Set up EC2 connection**（设置 EC2 连接）页面。

1. 在 **Set up EC2 connection**（设置 EC2 连接）页上，选择 EC2 实例。  
![\[“设置 EC2 连接”页面。\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/auto-connect-rds-ec2-set-up.png)

   如果同一 VPC 中不存在任何 EC2 实例，请选择 **Create EC2 instance**（创建 EC2 实例）来创建一个此类实例。在这种情况下，请确保新的 EC2 实例与 RDS 数据库位于同一 VPC 中。

1. 选择**继续**。

   将出现 **Review and confirm**（检查并确认）页面。  
![\[“EC2 连接检查和确认”页面。\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/auto-connect-rds-ec2-confirm.png)

1. 在 **Review and confirm**（检查并确认）页面上，检查 RDS 为设置与 EC2 实例的连接而将进行的更改。

   如果更改正确，请选择**确认并设置**。

   如果更改不正确，请选择 **Previous**（上一步）或 **Cancel**（取消）。

## 查看连接的计算资源
<a name="ec2-rds-connect-viewing"></a>

您可以使用 Amazon Web Services 管理控制台查看连接到 RDS 数据库的计算资源。显示的资源包括自动设置的计算资源连接。您可以通过以下方式自动设置与计算资源的连接：
+ 您可以在创建数据库时选择计算资源。

  有关更多信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)和[创建 Amazon RDS 的多可用区数据库集群](create-multi-az-db-cluster.md)。
+ 您可以在现有数据库和计算资源之间设置连接。

  有关更多信息，请参阅 [自动连接 EC2 实例和 RDS 数据库](#ec2-rds-connect-connecting)。

列出的计算资源不包括手动连接到数据库的计算资源。例如，您可以通过向与数据库关联的 VPC 安全组添加规则来允许计算资源手动访问数据库。

要列出计算资源，必须满足以下条件：
+ 与计算资源关联的安全组的名称与模式 `ec2-rds-n` 相匹配（其中 `n` 是数字）。
+ 与计算资源关联的安全组具有出站规则，其端口范围设置为 RDS 数据库使用的端口。
+ 与计算资源关联的安全组具有出站规则，源设置为与 RDS 数据库关联的安全组。
+ 与 RDS 数据库关联的安全组的名称与模式 `rds-ec2-n`（其中 `n` 是数字）相匹配。
+ 与 RDS 数据库关联的安全组具有入站规则，其端口范围设置为 RDS 数据库使用的端口。
+ 与 RDS 数据库关联的安全组有一条入站规则，其源设置为与计算资源关联的安全组。

**查看连接到 RDS 数据库的计算资源**

1. 登录 Amazon Web Services 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库），然后选择 RDS 数据库的名称。

1. 在 **Connectivity & security**（连接和安全）选项卡上，在 **Connected compute resources**（连接的计算资源）中查看计算资源。  
![\[连接的计算资源。\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/ec2-connected-compute-resources.png)

## 连接到运行特定数据库引擎的数据库实例
<a name="ec2-rds-Connect-DBEngine"></a>

有关连接到运行特定数据库引擎的数据库实例的信息，请按照数据库引擎的说明操作：
+ [连接到 MariaDB 数据库实例](USER_ConnectToMariaDBInstance.md)
+ [连接到 Microsoft SQL Server 数据库实例](USER_ConnectToMicrosoftSQLServerInstance.md)
+ [连接到 MySQL 数据库实例](USER_ConnectToInstance.md)
+ [连接到 Oracle 数据库实例](USER_ConnectToOracleInstance.md)
+ [连接到运行 PostgreSQL 数据库引擎的数据库实例](USER_ConnectToPostgreSQLInstance.md)