

# 为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例
<a name="custom-creating-sqlserver"></a>

您可以创建 RDS Custom 数据库实例，然后使用 AWS Systems Manager 或远程桌面协议 (RDP) 连接该实例。

**重要**  
务必先完成 [为 Amazon RDS Custom for SQL Server 设置环境](custom-setup-sqlserver.md) 部分中的任务，然后才能创建或连接到 RDS Custom for SQL Server 数据库实例。  
您可以在创建 RDS Custom 数据库实例时标记它们，但不要创建或修改 RDS Custom 自动化所需的 `AWSRDSCustom` 标签。有关更多信息，请参阅 [为 RDS Custom for SQL Server 资源添加标签](custom-managing-sqlserver.tagging.md)。  
首次创建 RDS Custom for SQL Server 数据库实例时，您可能会收到以下错误：The service-linked role is in the process of being created.（服务相关角色正在创建过程中）。请稍后重试。如果您这样做，请等待几分钟，然后重新尝试创建数据库实例。

**Topics**
+ [创建 RDS Custom for SQL Server 数据库实例](#custom-creating-sqlserver.create)
+ [RDS Custom 服务相关角色](custom-creating-sqlserver.slr.md)
+ [使用 AWS Systems Manager 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.ssm.md)
+ [使用 RDP 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.rdp.md)

## 创建 RDS Custom for SQL Server 数据库实例
<a name="custom-creating-sqlserver.create"></a>

使用 AWS 管理控制台 或 AWS CLI 创建 Amazon RDS Custom for SQL Server 数据库实例。该过程与创建 Amazon RDS 数据库实例的过程相似。

有关更多信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

### 控制台
<a name="custom-creating-sqlserver.CON"></a>

**要创建 RDS Custom for SQL Server 数据库实例**

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

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择**创建数据库**。

1. 选择**Standard create** (标准创建) 作为数据库创建方法。

1. 在 **Engine options**（引擎选项）中，为引擎版本选择 **Microsoft SQL Server**。

1. 对于 **Database management type**（数据库管理类型），选择 **Amazon RDS Custom**。

1. 在 **Edition**（版本）部分中，选择要使用的数据库引擎版本。

1. （可选）如果您打算从 CEV 创建数据库实例，请选中 **Use custom engine version (CEV)** [使用自定义引擎版本（CEV）] 复选框。在下拉列表中选择您的 CEV。

1. 对于**数据库版本**，保留默认值版本。

1. 对于 **Templates** (模板)，选择 **Production** (生产)。

1. 在 **Settings**（设置）部分中，为 **DB instance identifier**（数据库实例标识符）输入一个唯一的名称。

1. 要输入主密码，请执行以下操作：

   1. 在**设置**部分中，打开**凭证设置**。

   1. 清除**自动生成密码**复选框。

   1. 更改 **Master username**（主用户名）值，并在 **Master password**（主密码）和 **Confirm password**（确认密码）中输入相同的密码。

   预设情况下，新的 RDS Custom 数据库实例对主用户使用自动生成的密码。

1. 在 **DB instance size**（数据库实例大小）部分中，为 **DB instance class**（数据库实例类）选择一个值。

   有关支持的类，请参阅 [RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)。

1. 选择 **Storage**（存储）设置。

1. 对于 **RDS Custom 安全性**，执行以下操作：

   1. 对于 **IAM 实例配置文件**，可以使用两个选项来为 RDS Custom for SQL Server 数据库实例选择实例配置文件。

      1. 选择**创建新的实例配置文件**并提供实例配置文件的名称后缀。有关更多信息，请参阅 [使用 AWS 管理控制台自动创建实例配置文件](custom-setup-sqlserver.md#custom-setup-sqlserver.instanceProfileCreation)。

      1. 选择现有的实例配置文件。从下拉列表中，选择以 `AWSRDSCustom` 开头的实例配置文件。

   1. 对于**加密**，选择 **Enter a key ARN**（输入一个密钥 ARN）以列出可用的 AWS KMS 密钥。然后从列表中选择您的密钥。

      RDS Custom 需要 AWS KMS 密钥。有关更多信息，请参阅 [请确保您有对称的加密 AWS KMS 密钥](custom-setup-sqlserver.md#custom-setup-sqlserver.cmk)。

1. 对于其余部分，请指定首选的 RDS Custom 数据库实例设置。有关每项设置的信息，请参阅[数据库实例的设置](USER_CreateDBInstance.Settings.md)。以下设置不会显示在控制台中，也不受支持：
   + **处理器功能**
   + **Storage autoscaling (存储自动扩展**
   + **可用性与持久性**
   + **Database authentication**（数据库身份验证）中的 **Password and Kerberos authentication**（密码和 Kerberos 身份验证）选项（仅支持 **Password authentication**（密码身份验证））
   + **Additional configuration**（其他配置）中的 **Database options**（数据库选项）组
   + **性能详情**
   + **日志导出**
   + **启用自动次要版本升级**
   + **删除保护**

   **Backup retention period**（备份保留期）受支持，但您不能选择 **0 天**。

1. 选择 **Create database**（创建数据库）。

   **View credential details**（查看凭证详细信息）按钮显示在 **Databases**（数据库）页面中。

   要查看 RDS Custom 数据库实例的主用户名和密码，请选择 **View credential details**（查看凭证详细信息）。

   要以主用户身份连接到数据库实例，请使用显示的用户名和密码。
**重要**  
您无法再次查看主用户密码。如果您不记录它，您可能需要更改它。要在 RDS Custom 数据库实例可用后更改主用户密码，请修改数据库实例。有关修改数据库实例的更多信息，请参阅[管理 Amazon RDS Custom for SQL Server 数据库实例](custom-managing-sqlserver.md)。

1. 选择 **Databases**（数据库）以查看 RDS Custom 数据库实例列表。

1. 选择您刚创建的 RDS Custom 数据库实例。

   在 RDS 控制台上，将显示新 RDS Custom 数据库实例的详细信息。
   + 数据库实例具有 **creating**（正在创建）状态，直到 RDS Custom 数据库实例完成创建并可供使用。当状态变为 **Available (可用)** 时，您可以连接到该数据库实例。根据所分配的实例类和存储的不同，新数据库实例可能需要数分钟时间才能变得可用。
   + **Role**（角色）具有值 **Instance (RDS Custom)**（实例 (RDS Custom)）。
   + **RDS Custom automation mode**（RDS Custom 自动化模式）具有值 **Full automation**（完全自动化）。此设置意味着数据库实例可以提供自动监控和实例恢复。

### AWS CLI
<a name="custom-creating-sqlserver.CLI"></a>

您可以通过使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 命令创建 RDS Custom 数据库实例。

以下选项为必填：
+ `--db-instance-identifier`
+ `--db-instance-class`（有关支持的实例类的列表，请参阅 [RDS Custom for SQL Server 的数据库实例类支持](custom-reqs-limits.instancesMS.md)）
+ `--engine`（`custom-sqlserver-ee`、`custom-sqlserver-se` 或 `custom-sqlserver-web`）
+ `--kms-key-id`
+ `--custom-iam-instance-profile`

以下示例将创建名为 `my-custom-instance` 的 RDS Custom for SQL Server 数据库实例。备份保留期为 3 天。

**注意**  
要从自定义引擎版本（CEV）创建数据库实例，请为 `--engine-version` 参数提供现有 CEV 名称。例如，`--engine-version 15.00.4249.2.my_cevtest`

**Example**  
对于 Linux、macOS 或 Unix：  

```
 1. aws rds create-db-instance \
 2.     --engine custom-sqlserver-ee \
 3.     --engine-version 15.00.4073.23.v1 \
 4.     --db-instance-identifier my-custom-instance \
 5.     --db-instance-class db.m5.xlarge \
 6.     --allocated-storage 20 \
 7.     --db-subnet-group mydbsubnetgroup \
 8.     --master-username myuser \
 9.     --master-user-password mypassword \
10.     --backup-retention-period 3 \
11.     --no-multi-az \
12.     --port 8200 \
13.     --kms-key-id mykmskey \
14.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance
```
对于：Windows  

```
 1. aws rds create-db-instance ^
 2.     --engine custom-sqlserver-ee ^
 3.     --engine-version 15.00.4073.23.v1 ^
 4.     --db-instance-identifier my-custom-instance ^
 5.     --db-instance-class db.m5.xlarge ^
 6.     --allocated-storage 20 ^
 7.     --db-subnet-group mydbsubnetgroup ^
 8.     --master-username myuser ^
 9.     --master-user-password mypassword ^
10.     --backup-retention-period 3 ^
11.     --no-multi-az ^
12.     --port 8200 ^
13.     --kms-key-id mykmskey ^
14.     --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance
```
作为安全最佳实践，请指定除此处所示提示以外的密码。

使用 `describe-db-instances` 命令以获取有关您的实例的详细信息。

```
1. aws rds describe-db-instances --db-instance-identifier my-custom-instance
```

以下部分输出显示了引擎、参数组和其他信息。

```
 1. {
 2.     "DBInstances": [
 3.         {
 4.             "PendingModifiedValues": {},
 5.             "Engine": "custom-sqlserver-ee",
 6.             "MultiAZ": false,
 7.             "DBSecurityGroups": [],
 8.             "DBParameterGroups": [
 9.                 {
10.                     "DBParameterGroupName": "default.custom-sqlserver-ee-15",
11.                     "ParameterApplyStatus": "in-sync"
12.                 }
13.             ],
14.             "AutomationMode": "full",
15.             "DBInstanceIdentifier": "my-custom-instance",
16.             "TagList": []
17.         }
18.     ]
19. }
```

# RDS Custom 服务相关角色
<a name="custom-creating-sqlserver.slr"></a>

*服务相关角色* 为 Amazon RDS Custom 提供针对您的 AWS 账户中的资源的访问权限。这样可以让您更轻松地使用 RDS Custom，因为您不必手动添加必要的权限。RDS Custom 定义其服务相关角色的权限，除非另外定义，否则只有 RDS Custom 可以代入该角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

创建 RDS Custom 数据库实例时，将创建并使用 Amazon RDS 和 RDS Custom 服务相关角色（如果它们尚未存在）。有关更多信息，请参阅 [将服务相关角色用于 Amazon RDS](UsingWithRDS.IAM.ServiceLinkedRoles.md)。

首次创建 RDS Custom for SQL Server 数据库实例时，您可能会收到以下错误：The service-linked role is in the process of being created.（服务相关角色正在创建过程中）。请稍后重试。如果您这样做，请等待几分钟，然后重新尝试创建数据库实例。

# 使用 AWS Systems Manager 连接到 RDS Custom 数据库实例
<a name="custom-creating-sqlserver.ssm"></a>

创建 RDS Custom 数据库实例后，您可以使用 AWS Systems Manager 会话管理器。会话管理器是一项 Systems Manager 功能，可让您通过基于浏览器的 shell 或通过 AWS CLI 管理 Amazon EC2 实例。有关更多信息，请参阅 [AWS Systems Manager 会话管理器](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)。

## 控制台
<a name="custom-creating-sqlserver.ssm.CON"></a>

**使用会话管理器连接到您的数据库实例**

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

1. 在导航窗格中，请选择 **Databases**（数据库），然后选择要连接到的 RDS Custom 数据库实例。

1. 选择**配置**。

1. 请注意您的数据库实例的 **Resource ID**（资源 ID）值。例如，资源 ID 可能为 `db-ABCDEFGHIJKLMNOPQRS0123456`。

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 查找 EC2 实例的名称，然后选择与其关联的实例 ID。例如，实例 ID 可能为 `i-abcdefghijklm01234`。

1. 选择**连接**。

1. 选择 **Session Manager**（会话管理器）。

1. 选择**连接**。

   系统将为您的会话打开一个窗口。

## AWS CLI
<a name="custom-creating-sqlserver.ssm.CLI"></a>

您可以使用 AWS CLI 连接到 RDS Custom 数据库实例。此方法需要 AWS CLI 的会话管理器插件。要了解如何安装插件，请参阅[安装 AWS CLI 的会话管理器插件](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)。

要查找 RDS Custom 数据库实例的数据库资源 ID，请使用 `[describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html)`。

```
aws rds describe-db-instances \
    --query 'DBInstances[*].[DBInstanceIdentifier,DbiResourceId]' \
    --output text
```

以下示例输出显示了 RDS Custom 实例的资源 ID。前缀为 `db-`。

```
db-ABCDEFGHIJKLMNOPQRS0123456
```

要查找数据库实例的 EC2 实例 ID，请使用 `aws ec2 describe-instances`。以下示例将 `db-ABCDEFGHIJKLMNOPQRS0123456` 用于资源 ID。

```
aws ec2 describe-instances \
    --filters "Name=tag:Name,Values=db-ABCDEFGHIJKLMNOPQRS0123456" \
    --output text \
    --query 'Reservations[*].Instances[*].InstanceId'
```

以下示例输出显示了 EC2 实例 ID。

```
i-abcdefghijklm01234
```

使用 `aws ssm start-session` 命令，以在 `--target` 参数中提供 EC2 实例 ID。

```
aws ssm start-session --target "i-abcdefghijklm01234"
```

成功的连接如下所示。

```
Starting session with SessionId: yourid-abcdefghijklm1234
[ssm-user@ip-123-45-67-89 bin]$
```

# 使用 RDP 连接到 RDS Custom 数据库实例
<a name="custom-creating-sqlserver.rdp"></a>

创建 RDS Custom 数据库实例后，您可以使用 RDP 客户端连接到此实例。该过程与连接到 Amazon EC2 实例的过程相同。有关更多信息，请参阅[连接到 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)。

要连接到数据库实例，您需要与该实例关联的密钥对。RDS Custom 会为您创建密钥对。密钥对名称使用前缀 `do-not-delete-rds-custom-DBInstanceIdentifier`。AWS Secrets Manager 将私有密钥存储为密钥。

完成以下步骤中的任务：

1. [配置您的数据库实例以允许 RDP 连接](#custom-creating-sqlserver.rdp.port).

1. [检索您的私有密钥](#custom-creating-sqlserver.rdp.key).

1. [使用 RDP 实用工具连接到 EC2 实例](#custom-creating-sqlserver.rdp.connect).

## 配置您的数据库实例以允许 RDP 连接
<a name="custom-creating-sqlserver.rdp.port"></a>

要允许 RDP 连接，请配置 VPC 安全组并在主机上设置防火墙规则。

### 配置您的 VPC 安全组
<a name="custom-creating-sqlserver.rdp.port.vpc"></a>

请确保与您数据库实例关联的 VPC 安全组允许在端口 3389 上进行传输控制协议 (TCP) 的入站连接。要了解如何配置 VPC 安全组，请参阅 [配置您的 VPC 安全组](custom-setup-sqlserver.md#custom-setup-sqlserver.vpc.sg)。

### 在主机上设置防火墙规则
<a name="custom-creating-sqlserver.rdp.port.firewall"></a>

要允许端口 3389 上的 TCP 入站连接，请在主机上设置防火墙规则。以下示例显示如何执行此操作。

建议使用特定的 `-Profile` 值：`Public`、`Private` 或者 `Domain`。使用 `Any` 指这三个值。您还可以指定用逗号分隔的一组值。有关设置防火墙规则的更多信息，请参阅 Microsoft 文档中的 [Set-NetFirewallRule](https://docs.microsoft.com/en-us/powershell/module/netsecurity/set-netfirewallrule?view=windowsserver2019-ps)。

**使用 Systems Manager 会话管理器设置防火墙规则**

1. 连接到会话管理器，如 [使用 AWS Systems Manager 连接到 RDS Custom 数据库实例](custom-creating-sqlserver.ssm.md) 中所示。

1. 运行以下命令。

   ```
   Set-NetFirewallRule -DisplayName "Remote Desktop - User Mode (TCP-In)" -Direction Inbound -LocalAddress Any -Profile Any
   ```

**使用 Systems Manager CLI 命令设置防火墙规则**

1. 使用以下命令在主机上打开 RDP。

   ```
   OPEN_RDP_COMMAND_ID=$(aws ssm send-command --region $AWS_REGION \
       --instance-ids $RDS_CUSTOM_INSTANCE_EC2_ID \
       --document-name "AWS-RunPowerShellScript" \
       --parameters '{"commands":["Set-NetFirewallRule -DisplayName \"Remote Desktop - User Mode (TCP-In)\" -Direction Inbound -LocalAddress Any -Profile Any"]}' \
       --comment "Open RDP port" | jq -r ".Command.CommandId")
   ```

1. 使用输出中返回的命令 ID 获取上一个命令的状态。要使用以下查询返回命令 ID，请确保安装了 jq 插件。

   ```
   aws ssm list-commands \
       --region $AWS_REGION \
       --command-id $OPEN_RDP_COMMAND_ID
   ```

## 检索您的私有密钥
<a name="custom-creating-sqlserver.rdp.key"></a>

使用 AWS 管理控制台 或 AWS CLI 检索您的私有密钥。

### 控制台
<a name="custom-creating-sqlserver.rdp.key.CON"></a>

**要检索私有密钥**

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

1. 在导航窗格中，请选择 **Databases**（数据库），然后选择要连接到的 RDS Custom 数据库实例。

1. 选择**配置**选项卡。

1. 请注意您的数据库实例的 **DB instance ID**（数据库实例 ID），例如 `my-custom-instance`。

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 查找 EC2 实例的名称，然后选择与其关联的实例 ID。

   在此示例中，实例 ID 为 `i-abcdefghijklm01234`。

1. 在 **Details**（详细信息）中，查找 **Key pair name**（密钥对名称）。密钥对名称包括数据库标识符。在此示例中，密钥对名称为 `do-not-delete-rds-custom-my-custom-instance-0d726c`。

1. 在实例摘要中，查找 **Public IPv4 DNS**（公有 IPv4 DNS）。在本示例中，公有 DNS 可能是 `ec2-12-345-678-901.us-east-2.compute.amazonaws.com`。

1. 打开位于 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 的 AWS Secrets Manager 控制台。

1. 选择与密钥对同名的密钥。

1. 选择 **Retrieve secret value (检索密钥值)**。

### AWS CLI
<a name="custom-creating-sqlserver.rdp.key.CLI"></a>

**要检索私有密钥**

1. 通过调用 `aws rds describe-db-instances` 命令获取您的 RDS Custom 数据库实例的列表。

   ```
   aws rds describe-db-instances \
       --query 'DBInstances[*].[DBInstanceIdentifier,DbiResourceId]' \
       --output text
   ```

1. 例如，从示例输出中选择数据库实例标识符，例如 `do-not-delete-rds-custom-my-custom-instance`。

1. 通过调用 `aws ec2 describe-instances` 命令查找您的数据库实例的 EC2 实例 ID。以下示例使用 EC2 实例名称来描述数据库实例。

   ```
   aws ec2 describe-instances \
       --filters "Name=tag:Name,Values=do-not-delete-rds-custom-my-custom-instance" \
       --output text \
       --query 'Reservations[*].Instances[*].InstanceId'
   ```

   以下示例输出显示了 EC2 实例 ID。

   ```
   i-abcdefghijklm01234
   ```

1. 通过指定 EC2 实例 ID 查找密钥名称，如以下示例所示。

   ```
   aws ec2 describe-instances \
       --instance-ids i-abcdefghijklm01234 \
       --output text \
       --query 'Reservations[*].Instances[*].KeyName'
   ```

   以下示例输出显示了使用前缀 `do-not-delete-rds-custom-DBInstanceIdentifier` 的密钥名称。

   ```
   do-not-delete-rds-custom-my-custom-instance-0d726c
   ```

## 使用 RDP 实用工具连接到 EC2 实例
<a name="custom-creating-sqlserver.rdp.connect"></a>

执行《Amazon EC2 用户指南》**中的[使用 RDP 连接到 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html#connect-rdp)中的过程。此过程假定您创建了包含您的私有密钥的 .pem 文件。