

# 开始使用 Amazon RDS
<a name="CHAP_GettingStarted"></a>

在以下示例中，您可以了解如何使用 Amazon Relational Database Service (Amazon RDS) 创建和连接到数据库实例。您可以创建使用 Db2、MariaDB、MySQL、Microsoft SQL Server、Oracle 或 PostgreSQL 的数据库实例。

**重要**  
务必先完成[设置 Amazon RDS 环境](CHAP_SettingUp.md)部分中的任务，然后才能创建或连接到数据库实例。

对于每个数据库引擎来说，创建数据库实例并连接到数据库实例上的数据库的过程略为不同。选择要使用的以下数据库引擎之一，以了解有关创建并连接到数据库实例的详细信息。在创建并连接到数据库实例后，将提供可帮助您删除数据库实例的说明。

**Topics**
+ [创建并连接到 MariaDB 数据库实例](CHAP_GettingStarted.CreatingConnecting.MariaDB.md)
+ [创建 Microsoft SQL Server 数据库实例并连接到该实例](CHAP_GettingStarted.CreatingConnecting.SQLServer.md)
+ [创建并连接到 MySQL 数据库实例](CHAP_GettingStarted.CreatingConnecting.MySQL.md)
+ [创建并连接到 Oracle 数据库实例](CHAP_GettingStarted.CreatingConnecting.Oracle.md)
+ [创建 PostgreSQL 数据库实例并连接到该实例](CHAP_GettingStarted.CreatingConnecting.PostgreSQL.md)
+ [教程：创建 Web 服务器和 Amazon RDS 数据库实例](TUT_WebAppWithRDS.md)
+ [教程：使用 Lambda 函数访问 Amazon RDS 数据库](rds-lambda-tutorial.md)

# 创建并连接到 MariaDB 数据库实例
<a name="CHAP_GettingStarted.CreatingConnecting.MariaDB"></a>

本教程创建一个 EC2 实例和一个 RDS for MariaDB 数据库实例。本教程向您展示如何使用标准 MySQL 客户端从 EC2 实例访问数据库实例。作为最佳实践，本教程在虚拟私有云（VPC）中创建了私有数据库实例。在大多数情况下，同一 VPC 中的其他资源（例如 EC2 实例）可以访问数据库实例，但 VPC 之外的资源无法访问该实例。

完成本教程后，VPC 的每个可用区中都有一个公有和私有子网。在一个可用区中，EC2 实例在公有子网中，数据库实例在私有子网中。

**重要**  
创建 AWS 账户不会收费。但是，在完成本教程过程中使用 资源可能会产生费用。完成本教程后，如果不再需要这些资源，可以将其删除。

下图显示了教程完成时的配置。

![\[EC2 实例和 MariaDB 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-mariadb.png)


本教程可帮助您通过以下方法之一创建资源：

1. 使用 AWS 管理控制台 ‑ [创建 EC2 实例](#CHAP_GettingStarted.Creating.MariaDB.EC2) 和 [创建 MariaDB 数据库实例](#CHAP_GettingStarted.Creating.MariaDB) 

1. 使用 CloudFormation 创建数据库实例和 EC2 实例 - [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 MariaDB 实例](#CHAP_GettingStarted.CFN.MariaDB) 

第一种方法使用**轻松创建**，通过 AWS 管理控制台 创建私有 MariaDB 数据库实例。您可以仅指定数据库引擎类型、数据库实例大小和数据库实例标识符。**轻松创建**为其他配置选项使用默认设置。

如果改用**标准创建**，则在创建数据库实例时可以指定更多配置选项。这些选项包括可用性、安全性、备份和维护设置。要创建公有数据库实例，必须使用**标准创建**。有关信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

**Topics**
+ [先决条件](#CHAP_GettingStarted.Prerequisites.MariaDB)
+ [创建 EC2 实例](#CHAP_GettingStarted.Creating.MariaDB.EC2)
+ [创建 MariaDB 数据库实例](#CHAP_GettingStarted.Creating.MariaDB)
+ [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 MariaDB 实例](#CHAP_GettingStarted.CFN.MariaDB)
+ [连接到 MariaDB 数据库实例](#CHAP_GettingStarted.Connecting.MariaDB)
+ [删除 EC2 实例和数据库实例](#CHAP_GettingStarted.Deleting.MariaDB)
+ [（可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例](#CHAP_GettingStarted.DeletingCFN.MariaDB)
+ [（可选）将您的数据库实例连接到 Lambda 函数](#CHAP_GettingStarted.ComputeConnect.MariaDB)

## 先决条件
<a name="CHAP_GettingStarted.Prerequisites.MariaDB"></a>

在开始之前，请完成以下各节中的步骤：
+ [注册 AWS 账户](CHAP_SettingUp.md#sign-up-for-aws)
+ [创建具有管理访问权限的用户](CHAP_SettingUp.md#create-an-admin)

## 创建 EC2 实例
<a name="CHAP_GettingStarted.Creating.MariaDB.EC2"></a>

创建将用于连接到数据库的 Amazon EC2 实例。

**创建 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

1. 在 AWS 管理控制台的右上角，选择要在其中创建 EC2 实例的 AWS 区域。

1. 选择 **EC2 控制面板**，然后选择**启动实例**，如下图所示。  
![\[EC2 控制面板。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **启动实例**页面打开。

1. 在**启动实例**页面上选择以下设置。

   1. 在 **Name and tags**（名称和标签）下，对于 **Name**（名称），输入 **ec2-database-connect**。

   1. 在**应用程序和操作系统映像（Amazon 机器映像）**下，选择 **Amazon Linux**，然后选择 **Amazon Linux 2023 AMI**。对于其他选项，保留默认选择。  
![\[选择 Amazon 机器映像。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. 在 **Instance type**（实例类型）下，选择 **t2.micro**。

   1. 在 **Key pair (login)** [密钥对（登录）] 下，选择 **Key pair name**（密钥对名称）以使用现有密钥对。要为 Amazon EC2 实例创建新的密钥对，请选择 **Create new key pair**（创建新的密钥对），然后使用 **Create key pair**（创建密钥对）窗口来创建它。

      有关创建新的密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的[创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)。

   1. 对于**网络设置**中的**允许 SSH 流量**，选择 EC2 实例的 SSH 连接来源。

      如果显示的 IP 地址对于 SSH 连接是正确的，您可以选择 **My IP**（我的 IP）。否则，您可以确定要用来通过 Secure Shell（SSH）连接到 VPC 中的 EC2 实例的 IP 地址。要确定您的公有 IP 地址，请在新的浏览器窗口或标签页中，使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/) 上的服务。IP 地址的示例为 192.0.2.1/32。

       在许多情况下，您可能通过互联网服务提供商（ISP）进行连接，或者在不使用静态 IP 地址的情况下从防火墙之后进行连接。如果是这样，请确保确定客户端计算机使用的 IP 地址范围。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

      下图显示了**网络设置**部分的示例。  
![\[EC2 实例的网络设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 对于其余部分保留默认值。

   1. 查看**摘要**面板中您的 EC2 实例配置的摘要，当您准备好后，选择**启动实例**。

1. 在**启动状态**页面上，记下新 EC2 实例的标识符，例如：`i-1234567890abcdef0`。  
![\[“启动状态”页面上的 EC2 实例标识符。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. 选择 EC2 实例标识符以打开 EC2 实例列表，然后选择您的 EC2 实例。

1. 在**详细信息**选项卡中，记下使用 SSH 进行连接时所需的以下值：

   1. 在**实例摘要**中，记下**公有 IPv4 DNS** 的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 公有 DNS 名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. 在**实例详细信息**中，记下**密钥对名称**的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 密钥对名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 等待 EC2 实例的**实例状态**变为**正在运行**，然后继续。

## 创建 MariaDB 数据库实例
<a name="CHAP_GettingStarted.Creating.MariaDB"></a>

Amazon RDS 的基本构建基块是数据库实例。这是您将要在其中运行 MariaDB 数据库的环境。

在该示例中，您使用**轻松创建**以创建一个数据库实例，此实例运行带有 db.t4g.micro 数据库实例类的 MariaDB 数据库引擎。

**在启用“Easy create (轻松创建)”的情况下创建 MariaDB 数据库实例**

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

1. 在 Amazon RDS 控制台的右上角，选择要在其中创建数据库实例的 AWS 区域。

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

1. 选择**创建数据库**，然后选择**轻松创建**。  
![\[“轻松创建”选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. 在**配置**中，选择 **MariaDB**。

1. 对于**数据库实例大小**，选择**免费套餐**或**沙盒**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。

1. 对于 **DB instance identifier**（数据库实例标识符），输入 **database-test1**。

1. 对于**主用户名**，输入主用户的名称，或者保留默认名称。

   **创建数据库**页面应类似于以下图像。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。  
![\[“创建数据库”页面。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-mariadb.png)

1. 要为数据库实例使用自动生成的主密码，请选择**自动生成密码**。

   要输入主密码，请清除**自动生成密码**，然后在**主密码**和**确认主密码**中输入相同的密码。

1. 要设置与您之前创建的 EC2 实例的连接，请展开**设置 EC2 连接 – *可选***。

   选择**连接到 EC2 计算资源**。选择您之前创建的 EC2 实例。  
![\[设置 EC2 连接选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. 展开**查看轻松创建的默认设置**。  
![\[轻松创建默认设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-view-default-maria.png)

   您可以检查在启用 **Easy create (轻松创建)** 时使用的默认设置。**可在创建数据库后编辑**列显示在创建数据库后可以更改的选项。
   + 如果该列中的某个设置为**否**，而您想要不同的设置，则可以使用**标准创建**来创建数据库实例。
   + 如果某个设置在该列中为**是**，您可以使用**标准创建**来创建数据库实例，也可以在创建后修改数据库实例以更改该设置。

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

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

   您可以使用显示的用户名和密码，以主用户身份连接到数据库实例。
**重要**  
您无法再次查看主用户密码。如果您不记录它，您可能需要更改它。  
如果需要在数据库实例可用后更改主用户密码，则可以修改数据库实例以执行此操作。有关修改 数据库实例的更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

1. 在**数据库**列表中，选择新的 MariaDB 数据库实例的名称以显示其详细信息。

   数据库实例具有**正在创建**状态，直到此实例就绪可供使用。  
![\[数据库实例详细信息。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MariaDB-Launch06.png)

   当状态变为 **Available**（可用）时，您便可以连接到该数据库实例。根据数据库实例类和存储量，新实例可能需要等待 20 分钟时间才可用。

## （可选）使用 CloudFormation 创建 VPC、EC2 实例和 MariaDB 实例
<a name="CHAP_GettingStarted.CFN.MariaDB"></a>

您可以使用 CloudFormation 通过将基础设施视为代码来配置 AWS 资源，而不必使用控制台创建 VPC、EC2 实例和 MariaDB 实例。为了帮助您将 AWS 资源组织成更小、更易于管理的单元，您可以使用 CloudFormation 嵌套堆栈功能。有关更多信息，请参阅[在 CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)和[使用嵌套堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)。

**重要**  
CloudFormation 是免费的，但 CloudFormation 创建的资源是实时的。您需要为这些资源支付标准使用费，直到您终止使用它们为止。有关更多信息，请参阅 [RDS for MariaDB 定价](https://aws.amazon.com//rds/mariadb/pricing)。
+ 下载 CloudFormation 模板
+ 使用 CloudFormation 配置资源

### 下载 CloudFormation 模板
<a name="CHAP_GettingStarted.CFN.MariaDB.Step1"></a>

CloudFormation 模板是一个 JSON 或 YAML 文本文件，其中包含有关您希望在堆栈中创建的资源的配置信息。此模板还为您创建 VPC 和堡垒主机以及 RDS 实例。

要下载模板文件，请打开以下链接 [MariaDB CloudFormation 模板](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-mariadb-main.template.yaml)。

在 Github 页面中，单击 *Download raw file* 按钮以保存模板 YAML 文件。

### 使用 CloudFormation 配置资源
<a name="CHAP_GettingStarted.CFN.MariabDB.Step2"></a>

**注意**  
在开始此过程之前，请确保您的 AWS 账户中具有 EC2 实例密钥对。有关更多信息，请参阅 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

使用 CloudFormation 模板时，必须选择正确的参数以确保正确创建资源。按以下步骤操作：

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择**创建堆栈**。

1. 在“指定模板”部分，选择**从您的计算机上传模板文件**，然后选择**下一步**。

1. 在**指定堆栈详细信息**页面上，设置以下参数：

   1. 将**堆栈名称**设置为 **MariaDBTestStack**。

   1. 在**参数**下，通过选择三个可用区来设置**可用区**。

   1. 在 **Linux 堡垒主机配置**下，在**密钥名称**中，选择用于登录您的 EC2 实例的密钥对。

   1. 在 **Linux 堡垒主机配置**设置中，将**允许的 IP 范围**设置为您的 IP 地址。要使用 Secure Shell（SSH）连接到 VPC 中的 EC2 实例，请通过 [https://checkip.amazonaws.com](https://checkip.amazonaws.com) 上的服务确定您的公有 IP 地址。IP 地址的示例为 192.0.2.1/32。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

   1. 在**数据库常规配置**下，将**数据库实例类**设置为 **db.t3.micro**。

   1. 将**数据库名称**设置为 **database-test1**。

   1. 在**数据库主用户名**中，输入主用户的名称。

   1. 在本教程中，将**使用 Secrets Manager 管理数据库主用户密码**设置为 `false`。

   1. 在**数据库密码**中，设置所选密码。请记住此密码以便在教程中的后续步骤中使用。

   1. 在**数据库存储配置**下，将**数据库存储类型**设置为 **gp2**。

   1. 在**数据库监控配置**下，将**启用 RDS 性能详情**设置为 false。

   1. 将所有其他设置保留为默认值。单击**下一步**继续。

1. 在**查看堆栈**页面中，在检查数据库和 Linux 堡垒主机选项后，选择**提交**。

堆栈创建过程完成后，查看名为 *BastionStack* 和 *RDSNS* 的堆栈，记下连接到数据库所需的信息。有关更多信息，请参阅[在 AWS 管理控制台 上查看 CloudFormation 堆栈数据和资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)。

## 连接到 MariaDB 数据库实例
<a name="CHAP_GettingStarted.Connecting.MariaDB"></a>

您可以使用任何标准 SQL 客户端应用程序连接到数据库实例。在该示例中，您使用 mysql 命令行客户端连接到 MariaDB 数据库实例。

**连接到 MariaDB 数据库实例**

1. 找到您的数据库实例的端点（DNS 名称）和端口号。

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

   1. 在 Amazon RDS 控制台的右上角，选择数据库实例的 AWS 区域。

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

   1. 选择 MariaDB 数据库实例名称以显示其详细信息。

   1. 在**连接和安全性**选项卡上，复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。  
![\[连接到 MariaDB 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MariaDBConnect1.png)

1. 按照《Amazon EC2 用户指南》**中的[连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)中的步骤操作，连接到您之前创建的 EC2 实例。

   建议您使用 SSH 连接到 EC2 实例。如果 SSH 客户端实用程序安装在 Windows、Linux 或 Mac 上，则可以使用以下命令格式连接到该实例：

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   例如，假设在 Linux 上 `ec2-database-connect-key-pair.pem` 存储在 `/dir1` 中，而 EC2 实例的公有 IPv4 DNS 为 `ec2-12-345-678-90.compute-1.amazonaws.com`。SSH 命令将如下所示：

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. 通过更新 EC2 实例上的软件，获取最新的错误修复和安全更新。要执行此操作，请使用以下命令。
**注意**  
`-y` 选项安装更新时不提示确认。要在安装前检查更新，请忽略该选项。

   ```
   sudo dnf update -y
   ```

1. 从 MariaDB 安装 mysql 命令行客户端。

   要在 Amazon Linux 2023 上安装 MariaDB 命令行客户端，请运行以下命令：

   ```
   sudo dnf install mariadb105
   ```

1. 连接到 MariaDB 数据库实例。例如，输入以下命令。此操作可让您使用 MySQL 客户端连接到 MariaDB 数据库实例。

   将 `endpoint` 替换为数据库实例端点（DNS 名称），并替换用于 `admin` 的主用户名。提示输入密码时，提供所使用的主密码。

   ```
   mysql -h endpoint -P 3306 -u admin -p
   ```

   在输入用户的密码后，您应该会看到类似于以下内容的输出。

   ```
   Welcome to the MariaDB monitor.  Commands end with ; or \g.
   Your MariaDB connection id is 156
   Server version: 10.6.10-MariaDB-log managed by https://aws.amazon.com/rds/
    
   Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
     
   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
   MariaDB [(none)]>
   ```

   有关连接到 MariaDB 数据库实例的更多信息，请参阅[连接到 MariaDB 数据库实例](USER_ConnectToMariaDBInstance.md)。如果您无法连接到数据库实例，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

   出于安全考虑，最佳做法是使用加密连接。仅当客户端和服务器位于同一 VPC 中，并且网络受信任时，才会使用未加密的 MariaDB 连接。有关使用加密连接的信息，请参阅 [从 MySQL 命令行客户端使用 SSL/TLS 连接到 Amazon RDS 上的 MariaDB 数据库实例（已加密）](USER_ConnectToMariaDBInstanceSSL.CLI.md)。

1. 运行 SQL 命令。

   例如，以下 SQL 命令显示了当前日期和时间：

   ```
   SELECT CURRENT_TIMESTAMP;
   ```

## 删除 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.Deleting.MariaDB"></a>

在连接到并浏览您创建的示例 EC2 实例和数据库实例之后，删除它们，以便不再为其付费。

如果您使用 CloudFormation 创建了资源，请跳过此步骤，转至下一步。

**删除 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

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

1. 选择 EC2 实例，然后依次选择**实例状态、终止实例**。

1. 当系统提示您确认时，选择**终止**。

有关删除 EC2 实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

**删除无最终数据库快照的数据库实例**

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

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

1. 选择要删除的数据库实例。

1. 对于 ** Actions**，选择 **Delete**。

1. 清除**是否创建最终快照？**和**保留自动备份**。

1. 完成确认并选择**删除**。

## （可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.DeletingCFN.MariaDB"></a>

如果您使用 CloudFormation 创建了资源，请在连接并浏览 EC2 实例和数据库实例示例之后，删除 CloudFormation 堆栈，以便不再为其付费。

**删除 CloudFormation 资源**

1. 打开 CloudFormation 控制台。

1. 在 CloudFormation 控制台的**堆栈**页面上，选择根堆栈（名称不是 VPCStack、BastionStack 或 RDSNS 的堆栈）。

1. 选择**删除**。

1. 提示进行确认时，选择**删除堆栈**。

有关如何删除 CloudFormation 中堆栈的信息，请参阅《AWS CloudFormation 用户指南》**中的[在 CloudFormation 控制台上删除堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。

## （可选）将您的数据库实例连接到 Lambda 函数
<a name="CHAP_GettingStarted.ComputeConnect.MariaDB"></a>

您也可以将您的 RDS for MariaDB 数据库实例连接到 Lambda 无服务器计算资源。Lambda 函数允许您在不预调配或管理基础设施的情况下运行代码。Lambda 函数还支持自动响应任何规模的代码执行请求，从每天十几个事件到每秒数百个事件。有关更多信息，请参阅 [自动连接 Lambda 函数和数据库实例](lambda-rds-connect.md)。

# 创建 Microsoft SQL Server 数据库实例并连接到该实例
<a name="CHAP_GettingStarted.CreatingConnecting.SQLServer"></a>

本教程创建一个 EC2 实例和一个 RDS for Microsoft SQL Server 数据库实例。本教程向您展示如何使用 Microsoft SQL Server Management Studio 客户端从 EC2 实例访问数据库实例。作为最佳实践，本教程在虚拟私有云（VPC）中创建了私有数据库实例。在大多数情况下，同一 VPC 中的其他资源（例如 EC2 实例）可以访问数据库实例，但 VPC 之外的资源无法访问该实例。

完成本教程后，VPC 的每个可用区中都有一个公有和私有子网。在一个可用区中，EC2 实例在公有子网中，数据库实例在私有子网中。

**重要**  
创建 AWS 账户并不会收费；但是，在完成本教程过程中使用 AWS 资源可能会产生费用。完成本教程后，如果不再需要这些资源，可以将其删除。

下图显示了教程完成时的配置。

![\[EC2 实例和 Microsoft SQL Server 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-sqlserver.png)


本教程可帮助您通过以下方法之一创建资源：

1. 使用 AWS 管理控制台 ‑ [创建 SQL Server 数据库实例](#CHAP_GettingStarted.Creating.SQLServer) 和 [创建 EC2 实例](#CHAP_GettingStarted.Creating.SQLServer.EC2)

1. 使用 CloudFormation 创建数据库实例和 EC2 实例 - [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 SQL Server 实例](#CHAP_GettingStarted.CFN.SQLServer) 

第一种方法使用**轻松创建**，通过 AWS 管理控制台 创建私有 SQL Server 数据库实例。您可以仅指定数据库引擎类型、数据库实例大小和数据库实例标识符。**轻松创建**为其他配置选项使用默认设置。

如果改用**标准创建**，则在创建数据库实例时可以指定更多配置选项。这些选项包括可用性、安全性、备份和维护设置。要创建公有数据库实例，必须使用**标准创建**。有关信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

**Topics**
+ [先决条件](#CHAP_GettingStarted.Prerequisites.SQLServer)
+ [创建 EC2 实例](#CHAP_GettingStarted.Creating.SQLServer.EC2)
+ [创建 SQL Server 数据库实例](#CHAP_GettingStarted.Creating.SQLServer)
+ [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 SQL Server 实例](#CHAP_GettingStarted.CFN.SQLServer)
+ [连接到 SQL Server 数据库实例](#CHAP_GettingStarted.Connecting.SQLServer)
+ [探索示例 SQL Server 数据库实例](#CHAP_GettingStarted.SQLServer.Exploring)
+ [删除 EC2 实例和数据库实例](#CHAP_GettingStarted.Deleting.SQLServer)
+ [（可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例](#CHAP_GettingStarted.DeletingCFN.SQLServer)
+ [（可选）将您的数据库实例连接到 Lambda 函数](#CHAP_GettingStarted.ComputeConnect.SQLServer)

## 先决条件
<a name="CHAP_GettingStarted.Prerequisites.SQLServer"></a>

在开始之前，请完成以下各节中的步骤：
+ [注册 AWS 账户](CHAP_SettingUp.md#sign-up-for-aws)
+ [创建具有管理访问权限的用户](CHAP_SettingUp.md#create-an-admin)

## 创建 EC2 实例
<a name="CHAP_GettingStarted.Creating.SQLServer.EC2"></a>

创建将用于连接到数据库的 Amazon EC2 实例。

**创建 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

1. 在 AWS 管理控制台的右上角，选择之前用于数据库的 AWS 区域。

1. 选择 **EC2 控制面板**，然后选择**启动实例**，如下图所示。  
![\[EC2 控制面板。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **启动实例**页面打开。

1. 在**启动实例**页面上选择以下设置。

   1. 在 **Name and tags**（名称和标签）下，对于 **Name**（名称），输入 **ec2-database-connect**。

   1. 在**应用程序和操作系统映像（亚马逊云机器镜像）**下，选择 **Windows**，然后选择 **Microsoft Windows Server 2022 Base**。对于其他选项，保留默认选择。  
![\[选择 Amazon 机器映像。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/tutorial_ec2_sqlserver_create1.png)

   1. 在 **Instance type**（实例类型）下，选择 **t2.micro**。

   1. 在 **Key pair (login)** [密钥对（登录）] 下，选择 **Key pair name**（密钥对名称）以使用现有密钥对。要为 Amazon EC2 实例创建新的密钥对，请选择 **Create new key pair**（创建新的密钥对），然后使用 **Create key pair**（创建密钥对）窗口来创建它。

      有关创建新的密钥对的更多信息，请参阅《适用于 Windows 实例的 Amazon EC2 用户指南》**中的[创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html)。

   1. 对于**网络设置**中的**防火墙（安全组）**，选择**允许 RDP 流量来自**以连接到 EC2 实例。

      如果显示的 IP 地址对于 RDP 连接是正确的，您可以选择**我的 IP**。否则，您可以确定要用来通过 RDP 连接到 VPC 中的 EC2 实例的 IP 地址。要确定您的公有 IP 地址，请在新的浏览器窗口或标签页中，使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/) 上的服务。IP 地址的示例为 192.0.2.1/32。

       在许多情况下，您可能通过互联网服务提供商（ISP）进行连接，或者在不使用静态 IP 地址的情况下从防火墙之后进行连接。如果是这样，请确保确定客户端计算机使用的 IP 地址范围。
**警告**  
如果您使用 `0.0.0.0/0` 进行 RDP 访问，则所有 IP 地址可能能够使用 RDP 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 RDP 访问您的 EC2 实例。

      下图显示了**网络设置**部分的示例。  
![\[EC2 实例的网络设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettingsRDSMS.png)

   1. 对于其余部分保留原定设置值。

   1. 查看**摘要**面板中您的 EC2 实例配置的摘要，当您准备好后，选择**启动实例**。

1. 在**启动状态**页面上，记下新 EC2 实例的标识符，例如：`i-1234567890abcdef0`。  
![\[启动状态页面上的 EC2 实例标识符。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. 选择 EC2 实例标识符以打开 EC2 实例的列表。

1. 等待 EC2 实例的**实例状态**变为**正在运行**，然后继续。

## 创建 SQL Server 数据库实例
<a name="CHAP_GettingStarted.Creating.SQLServer"></a>

Amazon RDS 的基本构建基块是数据库实例。这是您将要在其中运行 SQL Server 数据库的环境。

在该示例中，您使用**轻松创建**来创建一个数据库实例，它运行带有 db.t2.micro 数据库实例类的 SQL Server 数据库引擎。

**使用 Easy create (轻松创建) 创建 Microsoft SQL Server 数据库实例**

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

1. 在 Amazon RDS 控制台的右上角，选择要在其中创建数据库实例的 AWS 区域。

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

1. 选择 **Create database (创建数据库)**，并确保已选择 **Easy create (轻松创建)**。  
![\[“轻松创建”选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. 在**配置**中，选择 **Microsoft SQL Server**。

1. 对于**版本**，选择 **SQL Server Express Edition**。

1. 对于 **数据库实例大小**，选择 **免费套餐**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。

1. 对于 **DB instance identifier**（数据库实例标识符），输入 **database-test1**。

   **创建数据库**页面应类似于以下图像。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。  
![\[引擎选项\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-sqlserver.png)

1. 对于**主用户名**，输入主用户的名称，或者保留默认名称。

1. 要设置与您之前创建的 EC2 实例的连接，请打开**设置 EC2 连接 - *可选***。

   选择**连接到 EC2 计算资源**。选择您之前创建的 EC2 实例。  
![\[设置 EC2 连接选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. 要为数据库实例使用自动生成的主密码，请选择 **Auto generate a password (自动生成密码)** 框。

   要输入主密码，请清除 **Auto generate a password (自动生成密码)** 框，然后在 **Master password (主密码)** 和 **Confirm password (确认密码)** 中输入相同的密码。

1. 打开**查看轻松创建的默认设置**。  
![\[轻松创建默认设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-sqlserver-confirm.png)

   您可以检查在启用 **Easy create (轻松创建)** 时使用的默认设置。**可在创建数据库后编辑**列显示在创建数据库后可以更改的选项。
   + 如果该列中的某个设置为**否**，而您想要不同的设置，则可以使用**标准创建**来创建数据库实例。
   + 如果某个设置在该列中为**是**，您可以使用**标准创建**来创建数据库实例，也可以在创建后修改数据库实例以更改该设置。

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

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

   您可以使用显示的用户名和密码，以主用户身份连接到数据库实例。
**重要**  
您无法再次查看主用户密码。如果您不记录它，您可能需要更改它。  
如果需要在数据库实例可用后更改主用户密码，则可以修改数据库实例以执行此操作。有关修改 数据库实例的更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

1. 在**数据库**列表中，选择新的 SQL Server 数据库实例的名称以显示其详细信息。

   数据库实例具有**正在创建**状态，直到此实例就绪可供使用。  
![\[数据库实例详细信息的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-sqlserver-launch.png)

   当状态变为 **Available**（可用）时，您便可以连接到该数据库实例。根据数据库实例类和存储量，新实例可能需要等待 20 分钟时间才可用。

## （可选）使用 CloudFormation 创建 VPC、EC2 实例和 SQL Server 实例
<a name="CHAP_GettingStarted.CFN.SQLServer"></a>

您可以使用 CloudFormation 通过将基础设施视为代码来配置 AWS 资源，而无需使用控制台创建 VPC、EC2 实例和 SQL Server 实例。为了帮助您将 AWS 资源组织成更小、更易于管理的单元，您可以使用 CloudFormation 嵌套堆栈功能。有关更多信息，请参阅[在 CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)和[使用嵌套堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)。

**重要**  
CloudFormation 是免费的，但 CloudFormation 创建的资源是实时的。您需要为这些资源支付标准使用费，直到您终止使用它们为止。有关更多信息，请参阅 [RDS for SQL Server 定价](https://aws.amazon.com//rds/sqlserver/pricing)。

要使用 CloudFormation 控制台创建资源，请执行以下步骤：
+ 下载 CloudFormation 模板
+ 使用 CloudFormation 配置资源

### 下载 CloudFormation 模板
<a name="CHAP_GettingStarted.CFN.SQLServer.Step1"></a>

CloudFormation 模板是一个 JSON 或 YAML 文本文件，其中包含有关您希望在堆栈中创建的资源的配置信息。此模板还为您创建 VPC 和堡垒主机以及 RDS 实例。

要下载该模板文件，请打开以下链接 [SQL Server CloudFormation 模板](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-sqlserver-main.template.yaml)。

在 Github 页面中，单击*下载原始文件*按钮以保存模板 YAML 文件。

### 使用 CloudFormation 配置资源
<a name="CHAP_GettingStarted.CFN.SQLServer.Step2"></a>

**注意**  
在开始此过程之前，请确保您的 AWS 账户中具有 EC2 实例密钥对。有关更多信息，请参阅 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

使用 CloudFormation 模板时，必须选择正确的参数以确保正确创建资源。按以下步骤操作：

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择**创建堆栈**。

1. 在“指定模板”部分，选择**从您的计算机上传模板文件**，然后选择**下一步**。

1. 在**指定堆栈详细信息**页面上，设置以下参数：

   1. 将**堆栈名称**设置为 **SQLServerTestStack**。

   1. 在**参数**下，通过选择三个可用区来设置**可用区**。

   1. 在 **Linux 堡垒主机配置**下，在**密钥名称**中，选择用于登录您的 EC2 实例的密钥对。

   1. 在 **Linux 堡垒主机配置**设置中，将**允许的 IP 范围**设置为您的 IP 地址。要使用 Secure Shell（SSH）连接到 VPC 中的 EC2 实例，请通过 [https://checkip.amazonaws.com](https://checkip.amazonaws.com) 上的服务确定您的公有 IP 地址。IP 地址的示例为 192.0.2.1/32。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

   1. 在**数据库常规配置**下，将**数据库实例类**设置为 **db.t3.micro**。

   1. 将**数据库名称**设置为 **database-test1**。

   1. 在**数据库主用户名**中，输入主用户的名称。

   1. 在本教程中，将**使用 Secrets Manager 管理数据库主用户密码**设置为 `false`。

   1. 在**数据库密码**中，设置所选密码。请记住此密码以便在教程中的后续步骤中使用。

   1. 在**数据库存储配置**下，将**数据库存储类型**设置为 **gp2**。

   1. 在**数据库监控配置**下，将**启用 RDS 性能详情**设置为 false。

   1. 将所有其他设置保留为默认值。单击**下一步**继续。

1. 在**配置堆栈选项**页面中，保留所有默认选项。单击**下一步**继续。

1. 在**查看堆栈**页面中，在检查数据库和 Linux 堡垒主机选项后，选择**提交**。

堆栈创建过程完成后，查看名为 *BastionStack* 和 *RDSNS* 的堆栈，记下连接到数据库所需的信息。有关更多信息，请参阅[在 AWS 管理控制台 上查看 CloudFormation 堆栈数据和资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)。

## 连接到 SQL Server 数据库实例
<a name="CHAP_GettingStarted.Connecting.SQLServer"></a>

在以下过程中，您将使用 Microsoft SQL Server Management Studio（SSMS）连接数据库实例。

**使用 SSMS 连接到 RDS for SQL Server 数据库实例**

1. 找到您的数据库实例的端点（DNS 名称）和端口号。

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

   1. 在 Amazon RDS 控制台的右上角，选择数据库实例的 AWS 区域。

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

   1. 选择 SQL Server 数据库实例名称以显示其详细信息。

   1. 在 **Connectivity (连接)** 选项卡上，复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。  
![\[连接到 Microsoft SQL Server 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/SQLServerConnect2.png)

1. 按照《适用于 Windows 实例的 Amazon EC2 用户指南》**的[连接到您的 Microsoft Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-connect-to-instance-windows)中的步骤，连接到您之前创建的 EC2 实例。

1. 安装 Microsoft 的 SQL Server Management Studio（SSMS）客户端。

   要将 SSMS 的独立版本下载到您的 EC2 实例，请参阅 Microsoft 文档中的[下载 SQL Server Management Studio（SSMS）](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms)。

   1. 使用“开始”菜单打开 Internet Explorer。

   1. 使用 Internet Explorer 下载并安装 SSMS 的独立版本。如果系统提示您该站点不可信，请将该站点添加到可信站点列表中。

1. 启动 SQL Server Management Studio（SSMS）。

   显示**连接至服务器**对话框。

1. 为您的示例数据库实例提供以下信息：

   1. 对于 **Server type**，选择 **Database Engine**。

   1. 对于 **Server name (服务器名称)**，请输入 DNS 名称，后跟逗号和端口号（默认端口为 1433）。例如，您的服务器名称应如下所示：

      ```
      database-test1.0123456789012.us-west-2.rds.amazonaws.com,1433
      ```

   1. 对于 **Authentication**，选择 **SQL Server Authentication**。

   1. 对于**登录名**，输入您选择用于示例数据库实例的用户名。这也称作主用户名。

   1. 对于 **Password (密码)**，输入您之前为示例数据库实例选择的密码。这也称作主用户密码。

1. 选择 **Connect**。

   稍等几分钟后，SSMS 将连接到数据库实例。出于安全考虑，最佳做法是使用加密连接。仅当客户端和服务器位于同一 VPC 中，并且网络受信任时，才会使用未加密的 SQL Server 连接。有关使用加密连接的信息，请参阅[将 SSL 与 Microsoft SQL Server 数据库实例结合使用](SQLServer.Concepts.General.SSL.Using.md)

有关连接到 Microsoft SQL Server 数据库实例的更多信息，请参阅[连接到 Microsoft SQL Server 数据库实例](USER_ConnectToMicrosoftSQLServerInstance.md)。

有关连接问题的信息，请参阅[无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

## 探索示例 SQL Server 数据库实例
<a name="CHAP_GettingStarted.SQLServer.Exploring"></a>

您可以使用 Microsoft SQL Server Management Studio（SSMS）探索您的示例数据库实例。

**使用 SSMS 探索数据库实例**

1. 您的 SQL Server 数据库实例 附带 SQL Server 的标准内置系统数据库 (master、model、msdb 和 tempdb)。要了解系统数据库，请执行以下操作：

   1. 在 SSMS 的 **View** 菜单上，选择 **Object Explorer**。

   1. 展开数据库实例，展开 **Databases (数据库)**，然后展开 **System Databases (系统数据库)**，如下所示。  
![\[Object Explorer 显示系统数据库。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/SQL-SSMS-SystemDBs.png)

   您的 SQL Server 数据库实例还附带一个名为 `rdsadmin` 的数据库。Amazon RDS 使用此数据库存储它用于管理您的数据库的对象。`rdsadmin` 数据库还包括存储过程，您可以运行它们来执行高级任务。

1. 开始创建您自己的数据库并像往常一样对数据库实例和数据库运行查询。要对示例数据库实例运行测试查询，请执行以下操作：

   1. 在 SSMS 中，在**文件**菜单上，指向**新建**，然后选择**使用当前连接进行查询**。

   1. 输入以下 SQL 查询：

      ```
      select @@VERSION
      ```

   1. 运行查询。SSMS 会返回 SQL Server 版的 Amazon RDS 数据库实例。  
![\[“SQL 查询”窗口。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/SQL-Connect-Query.png)

## 删除 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.Deleting.SQLServer"></a>

在连接到并浏览您创建的示例 EC2 实例和数据库实例之后，删除它们，以便不再为其付费。

如果您使用 CloudFormation 创建了资源，请跳过此步骤，转至下一步。

**删除 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

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

1. 选择 EC2 实例，然后依次选择**实例状态、终止实例**。

1. 当系统提示您确认时，选择**终止**。

有关删除 EC2 实例的更多信息，请参阅《Windows 实例的用户指南》**中的[终止实例](https://docs.aws.amazon.com//AWSEC2/latest/WindowsGuide/terminating-instances.html)。

**删除无最终数据库快照的数据库实例**

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

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

1. 选择要删除的数据库实例。

1. 对于 ** Actions**，选择 **Delete**。

1. 清除**是否创建最终快照？**和**保留自动备份**。

1. 完成确认并选择**删除**。

## （可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.DeletingCFN.SQLServer"></a>

如果您使用 CloudFormation 创建了资源，请在连接并浏览 EC2 实例和数据库实例示例之后，删除 CloudFormation 堆栈，以便不再为其付费。

**删除 CloudFormation 资源**

1. 打开 CloudFormation 控制台。

1. 在 CloudFormationconsole 的**堆栈**页面上，选择根堆栈（名称不是 VPCStack、BastionStack 或 RDSNS 的堆栈）。

1. 选择**删除**。

1. 提示进行确认时，选择**删除堆栈**。

有关如何删除 CloudFormation 中堆栈的信息，请参阅《AWS CloudFormation 用户指南》**中的[在 CloudFormation 控制台上删除堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。

## （可选）将您的数据库实例连接到 Lambda 函数
<a name="CHAP_GettingStarted.ComputeConnect.SQLServer"></a>

您也可以将您的 RDS for SQL Server 数据库实例连接到 Lambda 无服务器计算资源。Lambda 函数支持在不预调配或管理基础设施的情况下运行代码。Lambda 函数还支持自动响应任何规模的代码执行请求，从每天十几个事件到每秒数百个事件。有关更多信息，请参阅 [自动连接 Lambda 函数和数据库实例](lambda-rds-connect.md)。

# 创建并连接到 MySQL 数据库实例
<a name="CHAP_GettingStarted.CreatingConnecting.MySQL"></a>

本教程创建一个 EC2 实例和一个 RDS for MySQL 数据库实例。本教程向您展示如何使用标准 MySQL 客户端从 EC2 实例访问数据库实例。作为最佳实践，本教程在虚拟私有云（VPC）中创建了私有数据库实例。在大多数情况下，同一 VPC 中的其他资源（例如 EC2 实例）可以访问数据库实例，但 VPC 之外的资源无法访问该实例。

完成本教程后，VPC 的每个可用区中都有一个公有和私有子网。在一个可用区中，EC2 实例在公有子网中，数据库实例在私有子网中。

**重要**  
创建 AWS 账户并不会收费；但是，在完成本教程过程中使用 AWS 资源可能会产生费用。完成本教程后，如果不再需要这些资源，可以将其删除。

下图显示了教程完成时的配置。

![\[EC2 实例和 MySQL 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-mysql.png)


本教程可帮助您通过以下方法之一创建资源：

1. 使用 AWS 管理控制台 ‑ [创建 MySQL 数据库实例](#CHAP_GettingStarted.Creating.MySQL) 和 [创建 EC2 实例](#CHAP_GettingStarted.Creating.MySQL.EC2) 

1. 使用 CloudFormation 创建数据库实例和 EC2 实例 - [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 MySQL 实例](#CHAP_GettingStarted.CFN.MySQL) 

第一种方法使用**轻松创建**，通过 AWS 管理控制台 创建私有 MySQL 数据库实例。您可以仅指定数据库引擎类型、数据库实例大小和数据库实例标识符。**轻松创建**为其他配置选项使用默认设置。

如果改用**标准创建**，则在创建数据库实例时可以指定更多配置选项。这些选项包括可用性、安全性、备份和维护设置。要创建公有数据库实例，必须使用**标准创建**。有关信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

**Topics**
+ [先决条件](#CHAP_GettingStarted.Prerequisites.MySQL)
+ [创建 EC2 实例](#CHAP_GettingStarted.Creating.MySQL.EC2)
+ [创建 MySQL 数据库实例](#CHAP_GettingStarted.Creating.MySQL)
+ [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 MySQL 实例](#CHAP_GettingStarted.CFN.MySQL)
+ [连接到 MySQL 数据库实例](#CHAP_GettingStarted.Connecting.MySQL)
+ [删除 EC2 实例和数据库实例](#CHAP_GettingStarted.Deleting.MySQL)
+ [（可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例](#CHAP_GettingStarted.DeletingCFN.MySQL)
+ [（可选）将您的数据库实例连接到 Lambda 函数](#CHAP_GettingStarted.ComputeConnect.MySQL)

## 先决条件
<a name="CHAP_GettingStarted.Prerequisites.MySQL"></a>

在开始之前，请完成以下各节中的步骤：
+ [注册 AWS 账户](CHAP_SettingUp.md#sign-up-for-aws)
+ [创建具有管理访问权限的用户](CHAP_SettingUp.md#create-an-admin)

## 创建 EC2 实例
<a name="CHAP_GettingStarted.Creating.MySQL.EC2"></a>

创建将用于连接到数据库的 Amazon EC2 实例。

**创建 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

1. 在 AWS 管理控制台的右上角，选择要在其中创建 EC2 实例的 AWS 区域。

1. 选择 **EC2 控制面板**，然后选择**启动实例**，如下图所示。  
![\[EC2 控制面板。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **启动实例**页面打开。

1. 在**启动实例**页面上选择以下设置。

   1. 在 **Name and tags**（名称和标签）下，对于 **Name**（名称），输入 **ec2-database-connect**。

   1. 在**应用程序和操作系统映像（Amazon 机器映像）**下，选择 **Amazon Linux**，然后选择 **Amazon Linux 2023 AMI**。对于其他选项，保留默认选择。  
![\[选择 Amazon 机器映像。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. 在 **Instance type**（实例类型）下，选择 **t2.micro**。

   1. 在 **Key pair (login)** [密钥对（登录）] 下，选择 **Key pair name**（密钥对名称）以使用现有密钥对。要为 Amazon EC2 实例创建新的密钥对，请选择 **Create new key pair**（创建新的密钥对），然后使用 **Create key pair**（创建密钥对）窗口来创建它。

      有关创建新的密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的[创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)。

   1. 对于**网络设置**中的**允许 SSH 流量**，选择 EC2 实例的 SSH 连接来源。

      如果显示的 IP 地址对于 SSH 连接是正确的，您可以选择 **My IP**（我的 IP）。否则，您可以确定要用来通过 Secure Shell（SSH）连接到 VPC 中的 EC2 实例的 IP 地址。要确定您的公有 IP 地址，请在新的浏览器窗口或标签页中，使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/) 上的服务。IP 地址的示例为 192.0.2.1/32。

       在许多情况下，您可能通过互联网服务提供商（ISP）进行连接，或者在不使用静态 IP 地址的情况下从防火墙之后进行连接。如果是这样，请确保确定客户端计算机使用的 IP 地址范围。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

      下图显示了**网络设置**部分的示例。  
![\[EC2 实例的网络设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 对于其余部分保留默认值。

   1. 查看**摘要**面板中您的 EC2 实例配置的摘要，当您准备好后，选择**启动实例**。

1. 在**启动状态**页面上，记下新 EC2 实例的标识符，例如：`i-1234567890abcdef0`。  
![\[“启动状态”页面上的 EC2 实例标识符。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. 选择 EC2 实例标识符以打开 EC2 实例列表，然后选择您的 EC2 实例。

1. 在**详细信息**选项卡中，记下使用 SSH 进行连接时所需的以下值：

   1. 在**实例摘要**中，记下**公有 IPv4 DNS** 的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 公有 DNS 名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. 在**实例详细信息**中，记下**密钥对名称**的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 密钥对名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 等待 EC2 实例的**实例状态**变为**正在运行**，然后继续。

## 创建 MySQL 数据库实例
<a name="CHAP_GettingStarted.Creating.MySQL"></a>

Amazon RDS 的基本构建基块是数据库实例。这是您将要在其中运行 MySQL 数据库的环境。

在该示例中，您使用**轻松创建**创建一个数据库实例，它运行带有 db.t3.micro 数据库实例类的 MySQL 数据库引擎。

**在启用“Easy create (轻松创建)”的情况下创建 MySQL 数据库实例**

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

1. 在 Amazon RDS 控制台的右上角，选择以前用于 EC2 实例的 AWS 区域。

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

1. 选择 **Create database (创建数据库)**，并确保已选择 **Easy create (轻松创建)**。  
![\[“轻松创建”选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. 在**配置**中，选择 **MySQL**。

1. 对于**数据库实例大小**，选择**免费套餐**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。

1. 对于 **DB instance identifier**（数据库实例标识符），输入 **database-test1**。

1. 对于**主用户名**，输入主用户的名称，或者保留默认名称。

   **创建数据库**页面应类似于以下图像。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。  
![\[“创建数据库”页面。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-mysql.png)

1. 要为数据库实例使用自动生成的主密码，请选择**自动生成密码**。

   要输入主密码，请确保清除**自动生成密码**，然后在**主密码**和**确认密码**中输入相同的密码。

1. 要设置与您之前创建的 EC2 实例的连接，请打开**设置 EC2 连接 - *可选***。

   选择**连接到 EC2 计算资源**。选择您之前创建的 EC2 实例。  
![\[设置 EC2 连接选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. （可选）打开**查看轻松创建的默认设置**。  
![\[轻松创建默认设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-view-default-mysql.png)

   您可以检查在启用 **Easy create (轻松创建)** 时使用的默认设置。**可在创建数据库后编辑**列显示在创建数据库后可以更改的选项。
   + 如果该列中的某个设置为**否**，而您想要不同的设置，则可以使用**标准创建**来创建数据库实例。
   + 如果某个设置在该列中为**是**，您可以使用**标准创建**来创建数据库实例，也可以在创建后修改数据库实例以更改该设置。

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

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

   您可以使用显示的用户名和密码，以主用户身份连接到数据库实例。
**重要**  
您无法再次查看主用户密码。如果您不记录它，您可能需要更改它。  
如果需要在数据库实例可用后更改主用户密码，则可以修改数据库实例以执行此操作。有关修改 数据库实例的更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

1. 在**数据库**列表中，选择新的 MySQL 数据库实例的名称以显示其详细信息。

   数据库实例具有**正在创建**状态，直到此实例就绪可供使用。  
![\[数据库实例详细信息。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MySQL-Launch06.png)

   当状态变为 **Available**（可用）时，您便可以连接到该数据库实例。根据数据库实例类和存储量，新实例可能需要等待 20 分钟时间才可用。

## （可选）使用 CloudFormation 创建 VPC、EC2 实例和 MySQL 实例
<a name="CHAP_GettingStarted.CFN.MySQL"></a>

您可以使用 CloudFormation 通过将基础设施视为代码来配置 AWS 资源，而无需使用控制台创建 VPC、EC2 实例和 MySQL 实例。为了帮助您将 AWS 资源组织成更小、更易于管理的单元，您可以使用 CloudFormation 嵌套堆栈功能。有关更多信息，请参阅[在 CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)和[使用嵌套堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)。

**重要**  
CloudFormation 是免费的，但 CloudFormation 创建的资源是实时的。您需要为这些资源支付标准使用费，直到您终止使用它们为止。有关更多信息，请参阅 [RDS for MySQL 定价](https://aws.amazon.com//rds/mysql/pricing)。

要使用 CloudFormation 控制台创建资源，请执行以下步骤：
+ 下载 CloudFormation 模板
+ 使用 CloudFormation 配置资源

### 下载 CloudFormation 模板
<a name="CHAP_GettingStarted.CFN.MySQL.Step1"></a>

CloudFormation 模板是一个 JSON 或 YAML 文本文件，其中包含有关您希望在堆栈中创建的资源的配置信息。此模板还为您创建 VPC 和堡垒主机以及 RDS 实例。

要下载模板文件，请打开以下链接 [MySQL CloudFormation 模板](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-mysql-main.template.yaml)。

在 Github 页面中，单击 *Download raw file* 按钮以保存模板 YAML 文件。

### 使用 CloudFormation 配置资源
<a name="CHAP_GettingStarted.CFN.MySQL.Step2"></a>

**注意**  
在开始此过程之前，请确保您的 AWS 账户中具有 EC2 实例密钥对。有关更多信息，请参阅 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

使用 CloudFormation 模板时，必须选择正确的参数以确保正确创建资源。按以下步骤操作：

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择**创建堆栈**。

1. 在“指定模板”部分，选择**从您的计算机上传模板文件**，然后选择**下一步**。

1. 在**指定堆栈详细信息**页面上，设置以下参数：

   1. 将**堆栈名称**设置为 **MySQLTestStack**。

   1. 在**参数**下，通过选择三个可用区来设置**可用区**。

   1. 在 **Linux 堡垒主机配置**下，在**密钥名称**中，选择用于登录您的 EC2 实例的密钥对。

   1. 在 **Linux 堡垒主机配置**设置中，将**允许的 IP 范围**设置为您的 IP 地址。要使用 Secure Shell（SSH）连接到 VPC 中的 EC2 实例，请通过 [https://checkip.amazonaws.com](https://checkip.amazonaws.com) 上的服务确定您的公有 IP 地址。IP 地址的示例为 192.0.2.1/32。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

   1. 在**数据库常规配置**下，将**数据库实例类**设置为 **db.t3.micro**。

   1. 将**数据库名称**设置为 **database-test1**。

   1. 在**数据库主用户名**中，输入主用户的名称。

   1. 在本教程中，将**使用 Secrets Manager 管理数据库主用户密码**设置为 `false`。

   1. 在**数据库密码**中，设置所选密码。请记住此密码以便在教程中的后续步骤中使用。

   1. 在**数据库存储配置**下，将**数据库存储类型**设置为 **gp2**。

   1. 在**数据库监控配置**下，将**启用 RDS 性能详情**设置为 false。

   1. 将所有其他设置保留为默认值。单击**下一步**继续。

1. 在**配置堆栈选项**页面中，保留所有默认选项。单击**下一步**继续。

1. 在**查看堆栈**页面中，在检查数据库和 Linux 堡垒主机选项后，选择**提交**。

堆栈创建过程完成后，查看名为 *BastionStack* 和 *RDSNS* 的堆栈，记下连接到数据库所需的信息。有关更多信息，请参阅[在 AWS 管理控制台 上查看 CloudFormation 堆栈数据和资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)。

## 连接到 MySQL 数据库实例
<a name="CHAP_GettingStarted.Connecting.MySQL"></a>

您可以使用任何标准 SQL 客户端应用程序连接到数据库实例。在该示例中，您使用 mysql 命令行客户端连接到 MySQL 数据库实例。

**连接到 MySQL 数据库实例**

1. 找到您的数据库实例的端点（DNS 名称）和端口号。

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

   1. 在 Amazon RDS 控制台的右上角，选择数据库实例的 AWS 区域。

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

   1. 选择 MySQL 数据库实例名称以显示其详细信息。

   1. 在**连接和安全性**选项卡上，复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。  
![\[连接到 MySQL 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MySQLConnect1.png)

1. 按照《Amazon EC2 用户指南》**中的[连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)中的步骤操作，连接到您之前创建的 EC2 实例。

   建议您使用 SSH 连接到 EC2 实例。如果 SSH 客户端实用程序安装在 Windows、Linux 或 Mac 上，则可以使用以下命令格式连接到该实例：

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   例如，假设在 Linux 上 `ec2-database-connect-key-pair.pem` 存储在 `/dir1` 中，而 EC2 实例的公有 IPv4 DNS 为 `ec2-12-345-678-90.compute-1.amazonaws.com`。SSH 命令将如下所示：

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. 通过更新 EC2 实例上的软件，获取最新的错误修复和安全更新。要执行此操作，请使用以下命令。
**注意**  
`-y` 选项安装更新时不提示确认。要在安装前检查更新，请忽略该选项。

   ```
   sudo dnf update -y
   ```

1.  要在 Amazon Linux 2023 上安装 MariaDB 中的 mysql 命令行客户端，请运行以下命令：

   ```
   sudo dnf install mariadb105
   ```

1. 连接到 MySQL 数据库实例。例如，输入以下命令。此操作可让您使用 MySQL 客户端连接到 MySQL 数据库实例。

   将 `endpoint` 替换为数据库实例端点（DNS 名称），并替换用于 `admin` 的主用户名。提示输入密码时，提供所使用的主密码。

   ```
   mysql -h endpoint -P 3306 -u admin -p
   ```

   在输入用户的密码后，您应该会看到类似于以下内容的输出。

   ```
   Welcome to the MariaDB monitor.  Commands end with ; or \g.
   Your MySQL connection id is 3082
   Server version: 8.0.28 Source distribution
   
   Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
   
   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
   
   MySQL [(none)]>
   ```

   有关连接到数据库实例的更多信息，请参阅[连接到 MySQL 数据库实例](USER_ConnectToInstance.md)。如果您无法连接到数据库实例，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

   出于安全考虑，最佳做法是使用加密连接。仅当客户端和服务器位于同一 VPC 中，并且网络受信任时，才会使用未加密的 MySQL 连接。有关使用加密连接的信息，请参阅 [从 MySQL 命令行客户端使用 SSL/TLS 连接到 Amazon RDS 上的 MySQL 数据库实例（已加密）](USER_ConnectToInstanceSSL.CLI.md)。

1. 运行 SQL 命令。

   例如，以下 SQL 命令显示了当前日期和时间：

   ```
   SELECT CURRENT_TIMESTAMP;
   ```

## 删除 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.Deleting.MySQL"></a>

在连接到并浏览您创建的示例 EC2 实例和数据库实例之后，删除它们，以便不再为其付费。

如果您使用 CloudFormation 创建了资源，请跳过此步骤，转至下一步。

**删除 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

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

1. 选择 EC2 实例，然后依次选择**实例状态、终止实例**。

1. 当系统提示您确认时，选择**终止**。

有关删除 EC2 实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

**删除无最终数据库快照的数据库实例**

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

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

1. 选择要删除的数据库实例。

1. 对于 ** Actions**，选择 **Delete**。

1. 清除**是否创建最终快照？**和**保留自动备份**。

1. 完成确认并选择**删除**。

## （可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.DeletingCFN.MySQL"></a>

如果您使用 CloudFormation 创建了资源，请在连接并浏览 EC2 实例和数据库实例示例之后，删除 CloudFormation 堆栈，以便不再为其付费。

**删除 CloudFormation 资源**

1. 打开 CloudFormation 控制台。

1. 在 CloudFormationconsole 的**堆栈**页面上，选择根堆栈（名称不是 VPCStack、BastionStack 或 RDSNS 的堆栈）。

1. 选择**删除**。

1. 提示进行确认时，选择**删除堆栈**。

有关如何删除 CloudFormation 中堆栈的信息，请参阅《AWS CloudFormation 用户指南》**中的[在 CloudFormation 控制台上删除堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。

## （可选）将您的数据库实例连接到 Lambda 函数
<a name="CHAP_GettingStarted.ComputeConnect.MySQL"></a>

您也可以将您的 RDS for MySQL 数据库实例连接到 Lambda 无服务器计算资源。Lambda 函数支持在不预调配或管理基础设施的情况下运行代码。Lambda 函数还支持自动响应任何规模的代码执行请求，从每天十几个事件到每秒数百个事件。有关更多信息，请参阅 [自动连接 Lambda 函数和数据库实例](lambda-rds-connect.md)。

# 创建并连接到 Oracle 数据库实例
<a name="CHAP_GettingStarted.CreatingConnecting.Oracle"></a>

本教程创建一个 EC2 实例和一个 RDS for Oracle 数据库实例。本教程向您展示如何使用标准 Oracle 客户端从 EC2 实例访问数据库实例。作为最佳实践，本教程在虚拟私有云（VPC）中创建了私有数据库实例。在大多数情况下，同一 VPC 中的其他资源（例如 EC2 实例）可以访问数据库实例，但 VPC 之外的资源无法访问该实例。

完成本教程后，VPC 的每个可用区中都有一个公有和私有子网。在一个可用区中，EC2 实例在公有子网中，数据库实例在私有子网中。

**重要**  
创建 AWS 账户并不会收费；但是，在完成本教程过程中使用 AWS 资源可能会产生费用。完成本教程后，如果不再需要这些资源，可以将其删除。

下图显示了教程完成时的配置。

![\[EC2 实例和 Oracle 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-oracle.png)


本教程可帮助您通过以下方法之一创建资源：

1. 使用 AWS 管理控制台 ‑ [步骤 2：创建 Oracle 数据库实例](#CHAP_GettingStarted.Creating.Oracle) 和 [步骤 1：创建 EC2 实例](#CHAP_GettingStarted.Creating.Oracle.EC2) 

1. 使用 CloudFormation 创建数据库实例和 EC2 实例 - [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 Oracle 数据库实例](#CHAP_GettingStarted.CFN.Oracle) 

第一种方法使用**轻松创建**，通过 AWS 管理控制台 创建私有 Oracle 数据库实例。您可以仅指定数据库引擎类型、数据库实例大小和数据库实例标识符。**轻松创建**为其他配置选项使用默认设置。

如果改用**标准创建**，则在创建数据库实例时可以指定更多配置选项。这些选项包括可用性、安全性、备份和维护设置。要创建公有数据库实例，必须使用**标准创建**。有关信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

**Topics**
+ [先决条件](#CHAP_GettingStarted.Prerequisites.Oracle)
+ [步骤 1：创建 EC2 实例](#CHAP_GettingStarted.Creating.Oracle.EC2)
+ [步骤 2：创建 Oracle 数据库实例](#CHAP_GettingStarted.Creating.Oracle)
+ [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 Oracle 数据库实例](#CHAP_GettingStarted.CFN.Oracle)
+ [步骤 3：将 SQL 客户端连接到 Oracle 数据库实例](#CHAP_GettingStarted.Connecting.Oracle)
+ [步骤 4：删除 EC2 实例和数据库实例](#CHAP_GettingStarted.Deleting.Oracle)
+ [（可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例](#CHAP_GettingStarted.DeletingCFN.Oracle)
+ [（可选）将您的数据库实例连接到 Lambda 函数](#CHAP_GettingStarted.ComputeConnect.Oracle)

## 先决条件
<a name="CHAP_GettingStarted.Prerequisites.Oracle"></a>

在开始之前，请完成以下各节中的步骤：
+ [注册 AWS 账户](CHAP_SettingUp.md#sign-up-for-aws)
+ [创建具有管理访问权限的用户](CHAP_SettingUp.md#create-an-admin)

## 步骤 1：创建 EC2 实例
<a name="CHAP_GettingStarted.Creating.Oracle.EC2"></a>

创建将用于连接到数据库的 Amazon EC2 实例。

**创建 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

1. 在 AWS 管理控制台的右上角，选择要在其中创建 EC2 实例的 AWS 区域。

1. 选择 **EC2 控制面板**，然后选择**启动实例**，如下图所示。  
![\[EC2 控制面板。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **启动实例**页面打开。

1. 在**启动实例**页面上选择以下设置。

   1. 在 **Name and tags**（名称和标签）下，对于 **Name**（名称），输入 **ec2-database-connect**。

   1. 在**应用程序和操作系统映像（Amazon 机器映像）**下，选择 **Amazon Linux**，然后选择 **Amazon Linux 2023 AMI**。对于其他选项，保留默认选择。  
![\[选择 Amazon 机器映像。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. 在 **Instance type**（实例类型）下，选择 **t2.micro**。

   1. 在 **Key pair (login)** [密钥对（登录）] 下，选择 **Key pair name**（密钥对名称）以使用现有密钥对。要为 Amazon EC2 实例创建新的密钥对，请选择 **Create new key pair**（创建新的密钥对），然后使用 **Create key pair**（创建密钥对）窗口来创建它。

      有关创建新的密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的[创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)。

   1. 对于**网络设置**中的**允许 SSH 流量**，选择 EC2 实例的 SSH 连接来源。

      如果显示的 IP 地址对于 SSH 连接是正确的，您可以选择 **My IP**（我的 IP）。否则，您可以确定要用来通过 Secure Shell（SSH）连接到 VPC 中的 EC2 实例的 IP 地址。要确定您的公有 IP 地址，请在新的浏览器窗口或标签页中，使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/) 上的服务。IP 地址的示例为 192.0.2.1/32。

       在许多情况下，您可能通过互联网服务提供商（ISP）进行连接，或者在不使用静态 IP 地址的情况下从防火墙之后进行连接。如果是这样，请确保确定客户端计算机使用的 IP 地址范围。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

      下图显示了**网络设置**部分的示例。  
![\[EC2 实例的网络设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 对于其余部分保留默认值。

   1. 查看**摘要**面板中您的 EC2 实例配置的摘要，当您准备好后，选择**启动实例**。

1. 在**启动状态**页面上，记下新 EC2 实例的标识符，例如：`i-1234567890abcdef0`。  
![\[“启动状态”页面上的 EC2 实例标识符。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. 选择 EC2 实例标识符以打开 EC2 实例列表，然后选择您的 EC2 实例。

1. 在**详细信息**选项卡中，记下使用 SSH 进行连接时所需的以下值：

   1. 在**实例摘要**中，记下**公有 IPv4 DNS** 的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 公有 DNS 名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. 在**实例详细信息**中，记下**密钥对名称**的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 密钥对名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 等待 EC2 实例的**实例状态**变为**正在运行**，然后继续。

## 步骤 2：创建 Oracle 数据库实例
<a name="CHAP_GettingStarted.Creating.Oracle"></a>

Amazon RDS 的基本构建基块是数据库实例。这是您将要在其中运行 Oracle 数据库的环境。

在该示例中，您使用**轻松创建**来创建一个数据库实例，它运行带有 db.m5.large 数据库实例类的 Oracle 数据库引擎。

**使用“轻松创建”创建 Oracle 数据库实例**

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

1. 在 Amazon RDS 控制台的右上角，选择要在其中创建数据库实例的 AWS 区域。

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

1. 选择 **Create database (创建数据库)**，并确保已选择 **Easy create (轻松创建)**。  
![\[“轻松创建”选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. 在**配置**中，选择 **Oracle**。

1. 对于**数据库实例大小**，选择**设备/测试**。

1. 对于 **DB instance identifier**（数据库实例标识符），输入 **database-test1**。

1. 对于**主用户名**，输入主用户的名称，或者保留默认名称。

   **创建数据库**页面应类似于以下图像。  
![\[“创建数据库”页面。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-oracle2.png)

1. 要为数据库实例使用自动生成的主密码，请选择**自动生成密码**。

   要输入主密码，请确保清除**自动生成密码**，然后在**主密码**和**确认密码**中输入相同的密码。

1. 要设置与您之前创建的 EC2 实例的连接，请打开**设置 EC2 连接 - *可选***。

   选择**连接到 EC2 计算资源**。选择您之前创建的 EC2 实例。  
![\[设置 EC2 连接选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. 打开**查看轻松创建的默认设置**。  
![\[轻松创建默认设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-view-default-Oracle.png)

   您可以检查在启用 **Easy create (轻松创建)** 时使用的默认设置。**可在创建数据库后编辑**列显示在创建数据库后可以更改的选项。
   + 如果该列中的某个设置为**否**，而您想要不同的设置，则可以使用**标准创建**来创建数据库实例。
   + 如果某个设置在该列中为**是**，您可以使用**标准创建**来创建数据库实例，也可以在创建后修改数据库实例以更改该设置。

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

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

   您可以使用显示的用户名和密码，以主用户身份连接到数据库实例。
**重要**  
您无法再次查看主用户密码。如果您不记录它，您可能需要更改它。  
如果需要在数据库实例可用后更改主用户密码，则可以修改数据库实例以执行此操作。有关修改 数据库实例的更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

1. 在**数据库**列表中，选择新的 Oracle 数据库实例的名称以显示其详细信息。

   数据库实例具有**正在创建**状态，直到此实例就绪可供使用。  
![\[数据库实例详细信息。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Oracle-Launch05.png)

   当状态变为 **Available**（可用）时，您便可以连接到该数据库实例。根据数据库实例类和存储量，新实例可能需要等待 20 分钟时间才可用。在创建数据库实例时，您可以继续执行下一步并创建 EC2 实例。

## （可选）使用 CloudFormation 创建 VPC、EC2 实例和 Oracle 数据库实例
<a name="CHAP_GettingStarted.CFN.Oracle"></a>

您可以使用 CloudFormation 通过将基础设施视为代码来配置 AWS 资源，而无需使用控制台创建 VPC、EC2 实例和 Oracle 数据库实例。为了帮助您将 AWS 资源组织成更小、更易于管理的单元，您可以使用 CloudFormation 嵌套堆栈功能。有关更多信息，请参阅[在 CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)和[使用嵌套堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)。

**重要**  
CloudFormation 是免费的，但 CloudFormation 创建的资源是实时的。您需要为这些资源支付标准使用费，直到您终止使用它们为止。有关更多信息，请参阅 [RDS for Oracle 定价](https://aws.amazon.com//rds/oracle/pricing)。

要使用 CloudFormation 控制台创建资源，请执行以下步骤：
+ 步骤 1：下载 CloudFormation 模板
+ 步骤 2：使用 CloudFormation 配置资源

### 下载 CloudFormation 模板
<a name="CHAP_GettingStarted.CFN.Oracle.Step1"></a>

CloudFormation 模板是一个 JSON 或 YAML 文本文件，其中包含有关您希望在堆栈中创建的资源的配置信息。此模板还为您创建 VPC 和堡垒主机以及 RDS 实例。

要下载模板文件，请打开以下链接 [Oracle CloudFormation 模板](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-oracle-main.template.yaml)。

在 Github 页面中，单击 *Download raw file* 按钮以保存模板 YAML 文件。

### 使用 CloudFormation 配置资源
<a name="CHAP_GettingStarted.CFN.Oracle.Step2"></a>

**注意**  
在开始此过程之前，请确保您的 AWS 账户中具有 EC2 实例密钥对。有关更多信息，请参阅 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

使用 CloudFormation 模板时，必须选择正确的参数以确保正确创建资源。按以下步骤操作：

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择**创建堆栈**。

1. 在“指定模板”部分，选择**从您的计算机上传模板文件**，然后选择**下一步**。

1. 在**指定堆栈详细信息**页面上，设置以下参数：

   1. 将**堆栈名称**设置为 **OracleTestStack**。

   1. 在**参数**下，通过选择三个可用区来设置**可用区**。

   1. 在 **Linux 堡垒主机配置**下，在**密钥名称**中，选择用于登录您的 EC2 实例的密钥对。

   1. 在 **Linux 堡垒主机配置**设置中，将**允许的 IP 范围**设置为您的 IP 地址。要使用 Secure Shell（SSH）连接到 VPC 中的 EC2 实例，请通过 [https://checkip.amazonaws.com](https://checkip.amazonaws.com) 上的服务确定您的公有 IP 地址。IP 地址的示例为 192.0.2.1/32。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

   1. 在**数据库常规配置**下，将**数据库实例类**设置为 **db.t3.micro**。

   1. 将**数据库名称**设置为 **database-test1**。

   1. 在**数据库主用户名**中，输入主用户的名称。

   1. 在本教程中，将**使用 Secrets Manager 管理数据库主用户密码**设置为 `false`。

   1. 在**数据库密码**中，设置所选密码。请记住此密码以便在教程中的后续步骤中使用。

   1. 在**数据库存储配置**下，将**数据库存储类型**设置为 **gp2**。

   1. 在**数据库监控配置**下，将**启用 RDS 性能详情**设置为 false。

   1. 将所有其他设置保留为默认值。单击**下一步**继续。

1. 在**配置堆栈选项**页面中，保留所有默认选项。单击**下一步**继续。

1. 在**查看堆栈**页面中，在检查数据库和 Linux 堡垒主机选项后，选择**提交**。

堆栈创建过程完成后，查看名为 *BastionStack* 和 *RDSNS* 的堆栈，记下连接到数据库所需的信息。有关更多信息，请参阅[在 AWS 管理控制台 上查看 CloudFormation 堆栈数据和资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)。

## 步骤 3：将 SQL 客户端连接到 Oracle 数据库实例
<a name="CHAP_GettingStarted.Connecting.Oracle"></a>

您可以使用任何标准 SQL 客户端应用程序连接到数据库实例。在该示例中，您使用 Oracle 命令行客户端连接到 Oracle 数据库实例。

**连接到 Oracle 数据库实例**

1. 找到您的数据库实例的端点（DNS 名称）和端口号。

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

   1. 在 Amazon RDS 控制台的右上角，选择数据库实例的 AWS 区域。

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

   1. 选择 Oracle 数据库实例名称以显示其详细信息。

   1. 在**连接和安全性**选项卡上，复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。  
![\[连接到 Oracle 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/OracleConnect1.png)

1. 按照《Amazon EC2 用户指南》**中的[连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)中的步骤操作，连接到您之前创建的 EC2 实例。

   建议您使用 SSH 连接到 EC2 实例。如果 SSH 客户端实用程序安装在 Windows、Linux 或 Mac 上，则可以使用以下命令格式连接到该实例：

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   例如，假设在 Linux 上 `ec2-database-connect-key-pair.pem` 存储在 `/dir1` 中，而 EC2 实例的公有 IPv4 DNS 为 `ec2-12-345-678-90.compute-1.amazonaws.com`。SSH 命令将如下所示：

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. 通过更新 EC2 实例上的软件，获取最新的错误修复和安全更新。为此，请使用以下命令。
**注意**  
`-y` 选项安装更新时不提示确认。要在安装前检查更新，请忽略该选项。

   ```
   sudo dnf update -y
   ```

1. 在 Web 浏览器中，转到 [https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)。

1. 对于网页上显示的最新数据库版本，请复制 Instant Client 基本软件包和 SQL\$1Plus 软件包的 .rpm 链接（不是 .zip 链接）。例如，以下链接适用于 Oracle Database 21.9 版本：
   + https://download.oracle.com/otn\$1software/linux/instantclient/219000/oracle-instantclient-basic-21.9.0.0.0-1.el8.x86\$164.rpm
   + https://download.oracle.com/otn\$1software/linux/instantclient/219000/oracle-instantclient-sqlplus-21.9.0.0.0-1.el8.x86\$164.rpm

1. 在 SSH 会话中，运行 `wget` 命令以从您在上一步中获得的链接下载 .rpm 文件。以下示例下载 Oracle Database 21.9 版本的 .rpm 文件：

   ```
   wget https://download.oracle.com/otn_software/linux/instantclient/219000/oracle-instantclient-basic-21.9.0.0.0-1.el8.x86_64.rpm
   wget https://download.oracle.com/otn_software/linux/instantclient/219000/oracle-instantclient-sqlplus-21.9.0.0.0-1.el8.x86_64.rpm
   ```

1. 通过运行 `dnf` 命令安装软件包，如下所示：

   ```
   sudo dnf install oracle-instantclient-*.rpm
   ```

1. 启动 SQL\$1\$1Pus，然后连接到 Oracle 数据库实例。例如，输入以下命令。

   将 `oracle-db-instance-endpoint` 替换为数据库实例端点（DNS 名称），并将 `admin` 替换为您使用的主用户名。对于 Oracle 使用**轻松创建**时，数据库名称为 `DATABASE`。提示输入密码时，提供所使用的主密码。

   ```
   sqlplus admin@oracle-db-instance-endpoint:1521/DATABASE
   ```

   在输入用户的密码后，您应该会看到类似于以下内容的输出。

   ```
   SQL*Plus: Release 21.0.0.0.0 - Production on Wed Mar 1 16:41:28 2023
   Version 21.9.0.0.0
   
   Copyright (c) 1982, 2022, Oracle.  All rights reserved.
   
   Enter password: 
   Last Successful login time: Wed Mar 01 2023 16:30:52 +00:00
   
   Connected to:
   Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
   Version 19.18.0.0.0
   
   SQL>
   ```

   有关连接到 RDS for Oracle 数据库实例的更多信息，请参阅[连接到 Oracle 数据库实例](USER_ConnectToOracleInstance.md)。如果您无法连接到数据库实例，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

   出于安全考虑，最佳做法是使用加密连接。仅当客户端和服务器位于同一 VPC 中，并且网络受信任时，才会使用未加密的 Oracle 连接。有关使用加密连接的信息，请参阅 [保护 Oracle 数据库实例连接安全](Oracle.Concepts.RestrictedDBAPrivileges.md)。

1. 运行 SQL 命令。

   例如，以下 SQL 命令显示了当前日期：

   ```
   SELECT SYSDATE FROM DUAL;
   ```

## 步骤 4：删除 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.Deleting.Oracle"></a>

在连接到并浏览您创建的示例 EC2 实例和数据库实例之后，删除它们，以便不再为其付费。

如果您使用 CloudFormation 创建了资源，请跳过此步骤，转至下一步。

**删除 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

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

1. 选择 EC2 实例，然后依次选择**实例状态、终止实例**。

1. 当系统提示您确认时，选择**终止**。

有关删除 EC2 实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

**删除无最终数据库快照的数据库实例**

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

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

1. 选择要删除的数据库实例。

1. 对于 ** Actions**，选择 **Delete**。

1. 清除**是否创建最终快照？**和**保留自动备份**。

1. 完成确认并选择**删除**。

## （可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.DeletingCFN.Oracle"></a>

如果您使用 CloudFormation 创建了资源，请在连接并浏览 EC2 实例和数据库实例示例之后，删除 CloudFormation 堆栈，以便不再为其付费。

**删除 CloudFormation 资源**

1. 打开 CloudFormation 控制台。

1. 在 CloudFormationconsole 的**堆栈**页面上，选择根堆栈（名称不是 VPCStack、BastionStack 或 RDSNS 的堆栈）。

1. 选择**删除**。

1. 提示进行确认时，选择**删除堆栈**。

有关如何删除 CloudFormation 中堆栈的信息，请参阅《AWS CloudFormation 用户指南》**中的[在 CloudFormation 控制台上删除堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。

## （可选）将您的数据库实例连接到 Lambda 函数
<a name="CHAP_GettingStarted.ComputeConnect.Oracle"></a>

您也可以将您的 RDS for Oracle 数据库实例连接到 Lambda 无服务器计算资源。Lambda 函数支持在不预调配或管理基础设施的情况下运行代码。Lambda 函数还支持自动响应任何规模的代码执行请求，从每天十几个事件到每秒数百个事件。有关更多信息，请参阅 [自动连接 Lambda 函数和数据库实例](lambda-rds-connect.md)。

# 创建 PostgreSQL 数据库实例并连接到该实例
<a name="CHAP_GettingStarted.CreatingConnecting.PostgreSQL"></a>

本教程创建一个 EC2 实例和一个 RDS for PostgreSQL 数据库实例。本教程向您展示如何使用标准 PostgreSQL 客户端从 EC2 实例访问数据库实例。作为最佳实践，本教程在虚拟私有云（VPC）中创建了私有数据库实例。在大多数情况下，同一 VPC 中的其他资源（例如 EC2 实例）可以访问数据库实例，但 VPC 之外的资源无法访问该实例。

完成本教程后，VPC 的每个可用区中都有一个公有和私有子网。在一个可用区中，EC2 实例在公有子网中，数据库实例在私有子网中。

**重要**  
创建 AWS 账户并不会收费；但是，在完成本教程过程中使用 AWS 资源可能会产生费用。完成本教程后，如果不再需要这些资源，可以将其删除。

下图显示了教程完成时的配置。

![\[EC2 实例和 PostgreSQL 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-postgresql.png)


本教程可帮助您通过以下方法之一创建资源：

1. 使用 AWS 管理控制台 ‑ [创建 EC2 实例](#CHAP_GettingStarted.Creating.RDSPostgreSQL.EC2) 和 [创建 PostgreSQL 数据库实例](#CHAP_GettingStarted.Creating.PostgreSQL) 

1. 使用 CloudFormation 创建数据库实例和 EC2 实例 - [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 PostgreSQL 实例](#CHAP_GettingStarted.CFN.PostgreSQL) 

第一种方法使用**轻松创建**，通过 AWS 管理控制台 创建私有 PostgreSQL 数据库实例。您可以仅指定数据库引擎类型、数据库实例大小和数据库实例标识符。**轻松创建**为其他配置选项使用默认设置。

如果改用**标准创建**，则在创建数据库实例时可以指定更多配置选项。这些选项包括可用性、安全性、备份和维护设置。要创建公有数据库实例，必须使用**标准创建**。有关信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

**Topics**
+ [先决条件](#CHAP_GettingStarted.Prerequisites.RDSPostgreSQL)
+ [创建 EC2 实例](#CHAP_GettingStarted.Creating.RDSPostgreSQL.EC2)
+ [创建 PostgreSQL 数据库实例](#CHAP_GettingStarted.Creating.PostgreSQL)
+ [（可选）使用 CloudFormation 创建 VPC、EC2 实例和 PostgreSQL 实例](#CHAP_GettingStarted.CFN.PostgreSQL)
+ [连接到 PostgreSQL 数据库实例](#CHAP_GettingStarted.Connecting.PostgreSQL)
+ [删除 EC2 实例和数据库实例](#CHAP_GettingStarted.Deleting.PostgreSQL)
+ [（可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例](#CHAP_GettingStarted.DeletingCFN.PostgreSQL)
+ [（可选）将您的数据库实例连接到 Lambda 函数](#CHAP_GettingStarted.ComputeConnect.PostreSQL)

## 先决条件
<a name="CHAP_GettingStarted.Prerequisites.RDSPostgreSQL"></a>

在开始之前，请完成以下各节中的步骤：
+ [注册 AWS 账户](CHAP_SettingUp.md#sign-up-for-aws)
+ [创建具有管理访问权限的用户](CHAP_SettingUp.md#create-an-admin)

## 创建 EC2 实例
<a name="CHAP_GettingStarted.Creating.RDSPostgreSQL.EC2"></a>

创建将用于连接到数据库的 Amazon EC2 实例。

**创建 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

1. 在 AWS 管理控制台的右上角，选择要在其中创建 EC2 实例的 AWS 区域。

1. 选择 **EC2 控制面板**，然后选择**启动实例**，如下图所示。  
![\[EC2 控制面板。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **启动实例**页面打开。

1. 在**启动实例**页面上选择以下设置。

   1. 在 **Name and tags**（名称和标签）下，对于 **Name**（名称），输入 **ec2-database-connect**。

   1. 在**应用程序和操作系统映像（Amazon 机器映像）**下，选择 **Amazon Linux**，然后选择 **Amazon Linux 2023 AMI**。对于其他选项，保留默认选择。  
![\[选择 Amazon 机器映像。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. 在 **Instance type**（实例类型）下，选择 **t2.micro**。

   1. 在 **Key pair (login)** [密钥对（登录）] 下，选择 **Key pair name**（密钥对名称）以使用现有密钥对。要为 Amazon EC2 实例创建新的密钥对，请选择 **Create new key pair**（创建新的密钥对），然后使用 **Create key pair**（创建密钥对）窗口来创建它。

      有关创建新的密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的[创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)。

   1. 对于**网络设置**中的**允许 SSH 流量**，选择 EC2 实例的 SSH 连接来源。

      如果显示的 IP 地址对于 SSH 连接是正确的，您可以选择 **My IP**（我的 IP）。否则，您可以确定要用来通过 Secure Shell（SSH）连接到 VPC 中的 EC2 实例的 IP 地址。要确定您的公有 IP 地址，请在新的浏览器窗口或标签页中，使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/) 上的服务。IP 地址的示例为 192.0.2.1/32。

       在许多情况下，您可能通过互联网服务提供商（ISP）进行连接，或者在不使用静态 IP 地址的情况下从防火墙之后进行连接。如果是这样，请确保确定客户端计算机使用的 IP 地址范围。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

      下图显示了**网络设置**部分的示例。  
![\[EC2 实例的网络设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 对于其余部分保留默认值。

   1. 查看**摘要**面板中您的 EC2 实例配置的摘要，当您准备好后，选择**启动实例**。

1. 在**启动状态**页面上，记下新 EC2 实例的标识符，例如：`i-1234567890abcdef0`。  
![\[“启动状态”页面上的 EC2 实例标识符。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. 选择 EC2 实例标识符以打开 EC2 实例列表，然后选择您的 EC2 实例。

1. 在**详细信息**选项卡中，记下使用 SSH 进行连接时所需的以下值：

   1. 在**实例摘要**中，记下**公有 IPv4 DNS** 的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 公有 DNS 名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. 在**实例详细信息**中，记下**密钥对名称**的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 密钥对名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 等待 EC2 实例的**实例状态**变为**正在运行**，然后继续。

## 创建 PostgreSQL 数据库实例
<a name="CHAP_GettingStarted.Creating.PostgreSQL"></a>

Amazon RDS 的基本构建基块是数据库实例。这是您将要在其中运行 PostgreSQL 数据库的环境。

在该示例中，您使用**轻松创建**来创建一个数据库实例，该实例运行带有 db.t3.micro 数据库实例类的 PostgreSQL 数据库引擎。

**在启用“Easy create (轻松创建)”的情况下创建 PostgreSQL 数据库实例**

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

1. 在 Amazon RDS 控制台的右上角，选择要在其中创建数据库实例的AWS区域。

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

1. 选择 **Create database (创建数据库)**，并确保已选择 **Easy create (轻松创建)**。  
![\[“轻松创建”选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. 在**配置**中，选择 **PostgreSQL**。

1. 对于**数据库实例大小**，选择**免费套餐**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。

1. 对于 **DB instance identifier**（数据库实例标识符），输入 **database-test1**。

1. 对于**主用户名**，输入主用户的名称，或者保留默认名称（**postgres**）。

   **创建数据库**页面应类似于以下图像。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。  
![\[“创建数据库”页面。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-postgresql.png)

1. 要为数据库实例使用自动生成的主密码，请选择**自动生成密码**。

   要输入主密码，请确保清除**自动生成密码**，然后在**主密码**和**确认密码**中输入相同的密码。

1. 要设置与您之前创建的 EC2 实例的连接，请打开**设置 EC2 连接 - *可选***。

   选择**连接到 EC2 计算资源**。选择您之前创建的 EC2 实例。  
![\[设置 EC2 连接选项。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. 打开**查看轻松创建的默认设置**。  
![\[RDS for PostgreSQL 的“轻松创建”默认设置。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-view-default-postgres.png)

   您可以检查在启用 **Easy create (轻松创建)** 时使用的默认设置。**可在创建数据库后编辑**列显示在创建数据库后可以更改的选项。
   + 如果该列中的某个设置为**否**，而您想要不同的设置，则可以使用**标准创建**来创建数据库实例。
   + 如果某个设置在该列中为**是**，您可以使用**标准创建**来创建数据库实例，也可以在创建后修改数据库实例以更改该设置。

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

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

   您可以使用显示的用户名和密码，以主用户身份连接到数据库实例。
**重要**  
您无法再次查看主用户密码。如果您不记录它，您可能需要更改它。  
如果需要在数据库实例可用后更改主用户密码，则可以修改数据库实例以执行此操作。有关修改 数据库实例的更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

1. 在**数据库**列表中，选择新的 PostgreSQL 数据库实例的名称以显示其详细信息。

   数据库实例具有**正在创建**状态，直到此实例就绪可供使用。  
![\[数据库实例详细信息。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Postgres-Launch06.png)

   当状态变为 **Available**（可用）时，您便可以连接到该数据库实例。根据数据库实例类和存储量，新实例可能需要等待 20 分钟时间才可用。

## （可选）使用 CloudFormation 创建 VPC、EC2 实例和 PostgreSQL 实例
<a name="CHAP_GettingStarted.CFN.PostgreSQL"></a>

您可以使用 CloudFormation 通过将基础设施视为代码来配置 AWS 资源，而无需使用控制台来创建 VPC、EC2 实例和 PostgreSQL 实例。为了帮助您将 AWS 资源组织成更小、更易于管理的单元，您可以使用 CloudFormation 嵌套堆栈功能。有关更多信息，请参阅[在 CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)和[使用嵌套堆栈](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)。

**重要**  
CloudFormation 是免费的，但 CloudFormation 创建的资源是实时的。您需要为这些资源支付标准使用费，直到您终止使用它们为止。有关更多信息，请参阅 [RDS for PostgreSQL 定价](https://aws.amazon.com//rds/postgresql/pricing)。

要使用 CloudFormation 控制台创建资源，请执行以下步骤：
+ 下载 CloudFormation 模板
+ 使用 CloudFormation 配置资源

### 下载 CloudFormation 模板
<a name="CHAP_GettingStarted.CFN.PostgreSQL.Step1"></a>

CloudFormation 模板是一个 JSON 或 YAML 文本文件，其中包含有关您希望在堆栈中创建的资源的配置信息。此模板还为您创建 VPC 和堡垒主机以及 RDS 实例。

要下载模板文件，请打开以下链接 [PostgreSQL CloudFormation 模板](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-postgres-main.template.yaml)。

在 Github 页面中，单击 *Download raw file* 按钮以保存模板 YAML 文件。

### 使用 CloudFormation 配置资源
<a name="CHAP_GettingStarted.CFN.PostgreSQL.Step2"></a>

**注意**  
在开始此过程之前，请确保您的 AWS 账户中具有 EC2 实例密钥对。有关更多信息，请参阅 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

使用 CloudFormation 模板时，必须选择正确的参数以确保正确创建资源。按以下步骤操作：

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择**创建堆栈**。

1. 在“指定模板”部分，选择**从您的计算机上传模板文件**，然后选择**下一步**。

1. 在**指定堆栈详细信息**页面上，设置以下参数：

   1. 将**堆栈名称**设置为 **PostgreSQLTestStack**。

   1. 在**参数**下，通过选择三个可用区来设置**可用区**。

   1. 在 **Linux 堡垒主机配置**下，在**密钥名称**中，选择用于登录您的 EC2 实例的密钥对。

   1. 在 **Linux 堡垒主机配置**设置中，将**允许的 IP 范围**设置为您的 IP 地址。要使用 Secure Shell（SSH）连接到 VPC 中的 EC2 实例，请通过 [https://checkip.amazonaws.com](https://checkip.amazonaws.com) 上的服务确定您的公有 IP 地址。IP 地址的示例为 192.0.2.1/32。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有 EC2 实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的 EC2 实例。

   1. 在**数据库常规配置**下，将**数据库实例类**设置为 **db.t3.micro**。

   1. 将**数据库名称**设置为 **database-test1**。

   1. 在**数据库主用户名**中，输入主用户的名称。

   1. 在本教程中，将**使用 Secrets Manager 管理数据库主用户密码**设置为 `false`。

   1. 在**数据库密码**中，设置所选密码。请记住此密码以便在教程中的后续步骤中使用。

   1. 在**数据库存储配置**下，将**数据库存储类型**设置为 **gp2**。

   1. 在**数据库监控配置**下，将**启用 RDS 性能详情**设置为 false。

   1. 将所有其他设置保留为默认值。单击**下一步**继续。

1. 在**配置堆栈选项**页面中，保留所有默认选项。单击**下一步**继续。

1. 在**查看堆栈**页面中，在检查数据库和 Linux 堡垒主机选项后，选择**提交**。

堆栈创建过程完成后，查看名为 *BastionStack* 和 *RDSNS* 的堆栈，记下连接到数据库所需的信息。有关更多信息，请参阅[在 AWS 管理控制台 上查看 CloudFormation 堆栈数据和资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)。

## 连接到 PostgreSQL 数据库实例
<a name="CHAP_GettingStarted.Connecting.PostgreSQL"></a>

您可以使用 pgadmin 或 psql 连接到数据库实例。此示例说明如何使用 psql 命令行客户端连接到 PostgreSQL 数据库实例。

**使用 psql 连接到 PostgreSQL 数据库实例**

1. 找到您的数据库实例的端点（DNS 名称）和端口号。

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

   1. 在 Amazon RDS 控制台的右上角，选择数据库实例的 AWS 区域。

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

   1. 选择 PostgreSQL 数据库实例名称以显示其详细信息。

   1. 在**连接和安全性**选项卡上，复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。  
![\[连接到 PostgreSQL 数据库实例。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/PostgreSQL-endpoint.png)

1. 按照《Amazon EC2 用户指南》**中的[连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)中的步骤操作，连接到您之前创建的 EC2 实例。

   建议您使用 SSH 连接到 EC2 实例。如果 SSH 客户端实用程序安装在 Windows、Linux 或 Mac 上，则可以使用以下命令格式连接到该实例：

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   例如，假设在 Linux 上 `ec2-database-connect-key-pair.pem` 存储在 `/dir1` 中，而 EC2 实例的公有 IPv4 DNS 为 `ec2-12-345-678-90.compute-1.amazonaws.com`。SSH 命令将如下所示：

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. 通过更新 EC2 实例上的软件，获取最新的错误修复和安全更新。要执行此操作，请使用以下命令。
**注意**  
`-y` 选项安装更新时不提示确认。要在安装前检查更新，请忽略该选项。

   ```
   sudo dnf update -y
   ```

1. 要在 Amazon Linux 2023 上安装 PostgreSQL 中的 psql 命令行客户端，请运行以下命令：

   ```
   sudo dnf install postgresql15
   ```

1. 连接到 PostgreSQL 数据库实例。例如，在客户端计算机上的命令提示符处输入以下命令。此操作可让您使用 psql 客户端连接到 PostgreSQL 数据库实例。

   用数据库实例端点（DNS 名称）替换 `endpoint`，用要连接到的数据库名称 `--dbname` 替换 `postgres`，并用您使用的主用户名替换 `postgres`。提示输入密码时，提供所使用的主密码。

   ```
   psql --host=endpoint --port=5432 --dbname=postgres --username=postgres
   ```

   在输入用户的密码后，您应该会看到类似于以下内容的输出：

   ```
   psql (14.3, server 14.6)
   SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
   Type "help" for help.
   
   postgres=>
   ```

   有关连接到 PostgreSQL 数据库实例的更多信息，请参阅[连接到运行 PostgreSQL 数据库引擎的数据库实例](USER_ConnectToPostgreSQLInstance.md)。如果您无法连接到数据库实例，请参阅 [排除与您的 RDS for PostgreSQL 实例的连接故障](USER_ConnectToPostgreSQLInstance.Troubleshooting.md)。

   出于安全考虑，最佳做法是使用加密连接。仅当客户端和服务器位于同一 VPC 中，并且网络受信任时，才会使用未加密的 PostgreSQL 连接。有关使用加密连接的信息，请参阅 [通过 SSL 连接到 PostgreSQL 数据库实例](PostgreSQL.Concepts.General.SSL.md#PostgreSQL.Concepts.General.SSL.Connecting)。

1. 运行 SQL 命令。

   例如，以下 SQL 命令显示了当前日期和时间：

   ```
   SELECT CURRENT_TIMESTAMP;
   ```

## 删除 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.Deleting.PostgreSQL"></a>

在连接到并浏览您创建的示例 EC2 实例和数据库实例之后，删除它们，以便不再为其付费。

如果您使用 CloudFormation 创建了资源，请跳过此步骤，转至下一步。

**删除 EC2 实例**

1. 登录到 AWS 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)）。

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

1. 选择 EC2 实例，然后依次选择**实例状态、终止实例**。

1. 当系统提示您确认时，选择**终止**。

有关删除 EC2 实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

**删除无最终数据库快照的数据库实例**

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

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

1. 选择要删除的数据库实例。

1. 对于 ** Actions**，选择 **Delete**。

1. 清除**是否创建最终快照？**和**保留自动备份**。

1. 完成确认并选择**删除**。

## （可选）删除使用 CloudFormation 创建的 EC2 实例和数据库实例
<a name="CHAP_GettingStarted.DeletingCFN.PostgreSQL"></a>

如果您使用 CloudFormation 创建了资源，请在连接并浏览 EC2 实例和数据库实例示例之后，删除 CloudFormation 堆栈，以便不再为其付费。

**删除 CloudFormation 资源**

1. 打开 CloudFormation 控制台。

1. 在 CloudFormationconsole 的**堆栈**页面上，选择根堆栈（名称不是 VPCStack、BastionStack 或 RDSNS 的堆栈）。

1. 选择**删除**。

1. 提示进行确认时，选择**删除堆栈**。

有关如何删除 CloudFormation 中堆栈的信息，请参阅《AWS CloudFormation 用户指南》**中的[在 CloudFormation 控制台上删除堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。

## （可选）将您的数据库实例连接到 Lambda 函数
<a name="CHAP_GettingStarted.ComputeConnect.PostreSQL"></a>

您也可以将您的 RDS for PostgreSQL 数据库实例连接到 Lambda 无服务器计算资源。Lambda 函数支持在不预调配或管理基础设施的情况下运行代码。Lambda 函数还支持自动响应任何规模的代码执行请求，从每天十几个事件到每秒数百个事件。有关更多信息，请参阅 [自动连接 Lambda 函数和数据库实例](lambda-rds-connect.md)。

# 教程：创建 Web 服务器和 Amazon RDS 数据库实例
<a name="TUT_WebAppWithRDS"></a>

本教程说明如何使用 PHP 安装 Apache Web 服务器并创建 MariaDB、MySQL 或 PostgreSQL 数据库。Web 服务器在使用 Amazon Linux 2023 的 Amazon EC2 实例上运行，您可以在 MySQL 或 PostgreSQL 数据库实例之间进行选择。Amazon EC2 实例和数据库实例均在基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 中运行。

**重要**  
创建 AWS 账户并不会收费；但是，在完成本教程过程中使用 AWS 资源可能会产生费用。完成本教程后，如果不再需要这些资源，可以将其删除。

**注意**  
本教程适用于 Amazon Linux 2023，可能不适用于其他版本的 Linux。

在下面的教程中，您将创建一个对您的 AWS 账户使用默认 VPC、子网和安全组的 EC2 实例。本教程说明如何创建数据库实例，并自动设置与您创建的 EC2 实例的连接。然后，本教程向您展示如何在 EC2 实例上安装 Web 服务器。您使用数据库实例端点，将 Web 服务器连接到 VPC 中的数据库实例。

1. [启动 EC2 实例以连接数据库实例](CHAP_Tutorials.WebServerDB.LaunchEC2.md)

1. [创建 Amazon RDS 数据库实例](CHAP_Tutorials.WebServerDB.CreateDBInstance.md)

1. [在 EC2 实例上安装 Web 服务器](CHAP_Tutorials.WebServerDB.CreateWebServer.md)

下图显示了教程完成时的配置。

![\[单个 VPC 方案\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp.png)


**注意**  
完成本教程后，VPC 的每个可用区中都有一个公有和私有子网。本教程对您的 AWS 账户使用默认 VPC，并自动设置您的 EC2 实例与数据库实例之间的连接。如果您更愿意为此场景配置新的 VPC，请完成[教程：创建 VPC 以用于数据库实例（仅限 IPv4）](CHAP_Tutorials.WebServerDB.CreateVPC.md)中的任务。

# 启动 EC2 实例以连接数据库实例
<a name="CHAP_Tutorials.WebServerDB.LaunchEC2"></a>

在您的 VPC 的公有子网中创建 Amazon EC2 实例。

**启动 EC2 实例**

1. 登录 AWS 管理控制台，打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在 AWS 管理控制台的右上角，选择要在其中创建 EC2 实例的 AWS 区域。

1. 选择 **EC2 控制面板**，然后选择**启动实例**，如下所示。  
![\[EC2 Dashboard\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

1. 在**启动实例**页面中选择以下设置。

   1. 在 **Name and tags**（名称和标签）下，对于 **Name**（名称），输入 **tutorial-ec2-instance-web-server**。

   1. 在**应用程序和操作系统映像（Amazon 机器映像）**下，选择 **Amazon Linux**，然后选择 **Amazon Linux 2023 AMI**。对于其他选项保留原定设置值。  
![\[选择一个 Amazon Machine Image\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. 在 **Instance type**（实例类型）下，选择 **t2.micro**。

   1. 在 **Key pair (login)** [密钥对（登录）] 下，选择 **Key pair name**（密钥对名称）以使用现有密钥对。要为 Amazon EC2 实例创建新的密钥对，请选择 **Create new key pair**（创建新的密钥对），然后使用 **Create key pair**（创建密钥对）窗口来创建它。

      有关创建新的密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的[创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)。

   1. 在 **Network settings**（网络设置）下，设置以下值并将其他值保留为其原定设置值：
      + 对于 **Allow SSH traffic from**（允许 SSH 流量来自），选择 EC2 实例的 SSH 连接来源。

        如果显示的 IP 地址对于 SSH 连接是正确的，您可以选择 **My IP**（我的 IP）。

        否则，您可以确定要用来通过 Secure Shell（SSH）连接到 VPC 中的 EC2 实例的 IP 地址。要确定您的公有 IP 地址，请在新的浏览器窗口或标签页中，使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com) 上的服务。IP 地址的一个示例为 `203.0.113.25/32`。

        在许多情况下，您可能通过互联网服务提供商（ISP）进行连接，或者在不使用静态 IP 地址的情况下从防火墙之后进行连接。如果是这样，请确保确定客户端计算机使用的 IP 地址范围。
**警告**  
如果您使用 `0.0.0.0/0` 进行 SSH 访问，则所有 IP 地址可能能够使用 SSH 访问您的公有实例。在测试环境下短时间内，此方法尚可接受，但它对于生产环境并不安全。在生产环境中，将仅向特定 IP 地址或地址范围授权使用 SSH 访问您的实例。
      + 开启 **Allow HTTPs traffic from the internet**（允许来自互联网的 HTTPs 流量）。
      + 开启 **Allow HTTP traffic from the internet**（允许来自互联网的 HTTP 流量）。  
![\[配置实例详细信息\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_14.png)

   1. 对于其余部分保留原定设置值。

   1. 查看 **Summary**（摘要）面板中您的实例配置的摘要，当您准备好后，选择 **Launch instance**（启动实例）。

1. 在**启动状态**页面上，记下新 EC2 实例的标识符，例如：`i-1234567890abcdef0`。  
![\[“启动状态”页面上的 EC2 实例标识符。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. 选择 EC2 实例标识符以打开 EC2 实例列表，然后选择您的 EC2 实例。

1. 在**详细信息**选项卡中，记下使用 SSH 进行连接时所需的以下值：

   1. 在**实例摘要**中，记下**公有 IPv4 DNS** 的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 公有 DNS 名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. 在**实例详细信息**中，记下**密钥对名称**的值。  
![\[“实例”页面的“详细信息”选项卡上的 EC2 密钥对名称。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 一直等到实例的 **Instance state**（实例状态）变为 **Running**（正在运行），才能继续。

1. 完成 [创建 Amazon RDS 数据库实例](CHAP_Tutorials.WebServerDB.CreateDBInstance.md)。

# 创建 Amazon RDS 数据库实例
<a name="CHAP_Tutorials.WebServerDB.CreateDBInstance"></a>

创建维护 Web 应用程序所用数据的 RDS for MariaDB、RDS for MySQL 或 RDS for PostgreSQL 数据库实例。

------
#### [ RDS for MariaDB ]

**创建 MariaDB 实例**

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

1. 在 AWS 管理控制台的右上角，检查 AWS 区域。它应与您在其中创建了 EC2 实例的区域相同。

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

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

1. 在**创建数据库**页面上，选择**标准创建**。

1. 对于**引擎选项**，选择 **MariaDB**。  
![\[选择引擎类型\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/tutorial-create-mariadb.png)

1. 对于**模板**，选择**免费套餐**或**沙盒**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。  
![\[选择模板\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. 在 **Availability and durability**（可用性和持久性）部分中，保留默认值。

1. 在**设置**部分中，选择这些值：
   + **DB instance identifier**（数据库实例标识符）– 键入 **tutorial-db-instance**。
   + **Master username**（主用户名）– 键入 **tutorial\$1user**。
   + **Auto generate a password**（自动生成密码）– 将该选项保留为关闭状态。
   + **Master password**（主密码）– 键入密码。
   + **确认密码** – 重新键入密码。  
![\[“设置”部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. 在 **Instance configuration**（实例配置）部分中，设置以下值：
   + **可突增类（包括 t 类）**
   + **db.t3.micro**  
![\[实例配置部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. 在 **Storage**（存储）部分中，保留默认值。

1. 在 **Connectivity**（连接）部分中，设置以下值并将其他值保留为其默认值：
   + 对于 **Compute resource**（计算资源），选择 **Connect to an EC2 compute resource**（连接到 EC2 计算资源）。
   + 对于 **EC2 instance**（EC2 实例），选择您之前创建的 EC2 实例，例如 **tutorial-ec2-instance-web-server**。  
![\[“连接”部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. 在 **Database authentication**（数据库身份验证）部分中，确保选择了 **Password authentication**（密码身份验证）。

1. 打开**附加配置**部分，然后为**初始数据库名称**输入 **sample**。保留其他选项的默认设置。

1. 要创建 MariaDB 实例，请选择**创建数据库**。

   您的新数据库实例显示在**数据库**列表中，状态为**正在创建**。

1. 等待新数据库实例的**状态**显示为**可用**。然后选择数据库实例名称以显示其详细信息。

1. 在**连接性和安全性**部分中，查看数据库实例的**终端节点**和**端口**。  
![\[数据库实例详细信息\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port.png)

   记下数据库实例的终端节点和端口。您使用这些信息将 Web 服务器连接到数据库实例。

1. 完成[在 EC2 实例上安装 Web 服务器](CHAP_Tutorials.WebServerDB.CreateWebServer.md)。

------
#### [ RDS for MySQL ]

**创建 MySQL 数据库实例**

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

1. 在 AWS 管理控制台的右上角，检查 AWS 区域。它应与您在其中创建了 EC2 实例的区域相同。

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

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

1. 在**创建数据库**页面上，选择**标准创建**。

1. 对于**引擎选项**，选择 **MySQL**。  
![\[选择引擎类型\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/tutorial-create-mysql.png)

1. 对于**模板**，选择**免费套餐**或**沙盒**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。  
![\[选择模板\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. 在 **Availability and durability**（可用性和持久性）部分中，保留默认值。

1. 在**设置**部分中，选择这些值：
   + **DB instance identifier**（数据库实例标识符）– 键入 **tutorial-db-instance**。
   + **Master username**（主用户名）– 键入 **tutorial\$1user**。
   + **Auto generate a password**（自动生成密码）– 将该选项保留为关闭状态。
   + **Master password**（主密码）– 键入密码。
   + **确认密码** – 重新键入密码。  
![\[“设置”部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. 在 **Instance configuration**（实例配置）部分中，设置以下值：
   + **可突增类（包括 t 类）**
   + **db.t3.micro**  
![\[实例配置部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. 在 **Storage**（存储）部分中，保留默认值。

1. 在 **Connectivity**（连接）部分中，设置以下值并将其他值保留为其默认值：
   + 对于 **Compute resource**（计算资源），选择 **Connect to an EC2 compute resource**（连接到 EC2 计算资源）。
   + 对于 **EC2 instance**（EC2 实例），选择您之前创建的 EC2 实例，例如 **tutorial-ec2-instance-web-server**。  
![\[“连接”部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. 在 **Database authentication**（数据库身份验证）部分中，确保选择了 **Password authentication**（密码身份验证）。

1. 打开**附加配置**部分，然后为**初始数据库名称**输入 **sample**。保留其他选项的默认设置。

1. 要创建 MySQL 数据库实例，请选择 **Create database**（创建数据库）。

   您的新数据库实例显示在**数据库**列表中，状态为**正在创建**。

1. 等待新数据库实例的**状态**显示为**可用**。然后选择数据库实例名称以显示其详细信息。

1. 在**连接性和安全性**部分中，查看数据库实例的**终端节点**和**端口**。  
![\[数据库实例详细信息\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port.png)

   记下数据库实例的终端节点和端口。您使用这些信息将 Web 服务器连接到数据库实例。

1. 完成[在 EC2 实例上安装 Web 服务器](CHAP_Tutorials.WebServerDB.CreateWebServer.md)。

------
#### [ RDS for PostgreSQL ]

**创建 PostgreSQL 数据库实例**

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

1. 在 AWS 管理控制台的右上角，检查 AWS 区域。它应与您在其中创建了 EC2 实例的区域相同。

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

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

1. 在**创建数据库**页面上，选择**标准创建**。

1. 对于**引擎选项**，选择 **PostgreSQL**。  
![\[选择引擎类型\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/tutorial-create-postgres.png)

1. 对于**模板**，选择**免费套餐**或**沙盒**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。  
![\[选择模板\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. 在 **Availability and durability**（可用性和持久性）部分中，保留默认值。

1. 在**设置**部分中，选择这些值：
   + **DB instance identifier**（数据库实例标识符）– 键入 **tutorial-db-instance**。
   + **Master username**（主用户名）– 键入 **tutorial\$1user**。
   + **Auto generate a password**（自动生成密码）– 将该选项保留为关闭状态。
   + **Master password**（主密码）– 键入密码。
   + **确认密码** – 重新键入密码。  
![\[“设置”部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. 在 **Instance configuration**（实例配置）部分中，设置以下值：
   + **可突增类（包括 t 类）**
   + **db.t3.micro**  
![\[实例配置部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. 在 **Storage**（存储）部分中，保留默认值。

1. 在 **Connectivity**（连接）部分中，设置以下值并将其他值保留为其默认值：
   + 对于 **Compute resource**（计算资源），选择 **Connect to an EC2 compute resource**（连接到 EC2 计算资源）。
   + 对于 **EC2 instance**（EC2 实例），选择您之前创建的 EC2 实例，例如 **tutorial-ec2-instance-web-server**。  
![\[“连接”部分\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. 在 **Database authentication**（数据库身份验证）部分中，确保选择了 **Password authentication**（密码身份验证）。

1. 打开**附加配置**部分，然后为**初始数据库名称**输入 **sample**。保留其他选项的默认设置。

1. 要创建 PostgreSQL 数据库实例，请选择**创建数据库**。

   您的新数据库实例显示在**数据库**列表中，状态为**正在创建**。

1. 等待新数据库实例的**状态**显示为**可用**。然后选择数据库实例名称以显示其详细信息。

1. 在**连接性和安全性**部分中，查看数据库实例的**终端节点**和**端口**。  
![\[数据库实例详细信息\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port_postgres.png)

   记下数据库实例的终端节点和端口。您使用这些信息将 Web 服务器连接到数据库实例。

1. 完成[在 EC2 实例上安装 Web 服务器](CHAP_Tutorials.WebServerDB.CreateWebServer.md)。

------

# 在 EC2 实例上安装 Web 服务器
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer"></a>

在您在[启动 EC2 实例以连接数据库实例](CHAP_Tutorials.WebServerDB.LaunchEC2.md)中创建的 EC2 实例上安装 Web 服务器。Web 服务器连接到您在[创建 Amazon RDS 数据库实例](CHAP_Tutorials.WebServerDB.CreateDBInstance.md)中创建的 Amazon RDS 数据库实例。

## 使用 PHP 和 MariaDB 安装 Apache Web 服务器
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer.Apache"></a>

连接到 EC2 实例并安装 Web 服务器。

**连接到 EC2 实例并安装带有 PHP 的 Apache Web 服务器**

1. 按照《Amazon EC2 用户指南》**中的[连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)中的步骤操作，连接到您之前创建的 EC2 实例。

   建议您使用 SSH 连接到 EC2 实例。如果 SSH 客户端实用程序安装在 Windows、Linux 或 Mac 上，则可以使用以下命令格式连接到该实例：

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   例如，假设在 Linux 上 `ec2-database-connect-key-pair.pem` 存储在 `/dir1` 中，而 EC2 实例的公有 IPv4 DNS 为 `ec2-12-345-678-90.compute-1.amazonaws.com`。SSH 命令将如下所示：

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. 通过更新 EC2 实例上的软件，获取最新的错误修复和安全更新。要执行此操作，请使用以下命令。
**注意**  
`-y` 选项安装更新时不提示确认。要在安装前检查更新，请忽略该选项。

   ```
   sudo dnf update -y
   ```

1. 更新完成后，使用以下命令安装 Apache Web 服务器、PHP 和 MariaDB 或 PostgreSQL 软件。此命令同时安装多个软件包和相关依赖项。

------
#### [ MariaDB & MySQL ]

   ```
   sudo dnf install -y httpd php php-mysqli mariadb105
   ```

------
#### [ PostgreSQL ]

   ```
   sudo dnf install -y httpd php php-pgsql postgresql15
   ```

------

   如果您收到错误，则您的实例可能不是使用 Amazon Linux 2023 AMI 启动的。您可能使用的是 Amazon Linux 2 AMI。您可以使用以下命令查看 Amazon Linux 的版本。

   ```
   cat /etc/system-release
   ```

   有关更多信息，请参阅[更新实例软件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-updates.html)。

1. 使用下面所示的命令启动 Web 服务器。

   ```
   sudo systemctl start httpd
   ```

   您可以测试 Web 服务器是否已正确安装和启动。为此，请在 Web 浏览器的地址栏中输入 EC2 实例的公有域名系统 (DNS) 名称，例如：`http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com`。如果 Web 服务器正在运行，您将看到 Apache 测试页面。

   如果您没有看到 Apache 测试页面，请检查您在[教程：创建 VPC 以用于数据库实例（仅限 IPv4）](CHAP_Tutorials.WebServerDB.CreateVPC.md)中创建的 VPC 安全组的入站规则。确保入站规则包括一条允许 HTTP（端口 80）访问 IP 地址以连接到 Web 服务器的规则。
**注意**  
Apache 测试页面仅在文档根目录 `/var/www/html` 中无内容时才显示。将内容添加到文档根目录后，您的内容将显示在 EC2 实例的公有 DNS 地址处。在此之前，它出现在 Apache 测试页面上。

1. 使用 `systemctl` 命令配置 Web 服务器以使其在每次系统启动时启动。

   ```
   sudo systemctl enable httpd
   ```

要允许 `ec2-user` 在 Apache Web 服务器的默认根目录中管理文件，请修改 `/var/www` 目录的所有权和权限。有多种方式可以完成此任务。在本教程中，可将 `ec2-user` 添加到 `apache` 组，将 `apache` 目录的所有权授予 `/var/www` 组，并为该组指定写入权限。

**设置 Apache Web 服务器的文件权限**

1. 将 `ec2-user` 用户添加到 `apache` 组。

   ```
   sudo usermod -a -G apache ec2-user
   ```

1. 注销以刷新您的权限并包含新的 `apache` 组。

   ```
   exit
   ```

1. 再重新登录并使用 `apache` 命令验证 `groups` 组是否存在。

   ```
   groups
   ```

   输出看上去类似于以下内容：

   ```
   ec2-user adm wheel apache systemd-journal
   ```

1. 将 `/var/www` 目录的组所有权及其内容更改到 `apache` 组。

   ```
   sudo chown -R ec2-user:apache /var/www
   ```

1. 更改 `/var/www` 及其子目录的目录权限，以添加组写入权限并设置未来创建的子目录上的组 ID。

   ```
   sudo chmod 2775 /var/www
   find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. 递归地更改 `/var/www` 目录及其子目录中的文件的权限，以添加组写入权限。

   ```
   find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

现在，`ec2-user`（和 `apache` 组的任何将来成员）可以添加、删除和编辑 Apache 文档根目录中的文件。这使您可以添加内容，例如静态网站或 PHP 应用程序。

**注意**  
运行 HTTP 协议的 Web 服务器不为其发送或接收的数据提供传输安全。当您使用 Web 浏览器连接 HTTP 服务器时，窃取者可在沿网络路径的任何位置看到许多信息。这些信息包括您访问的 URL、您接收的网页内容以及任何 HTML 表单的内容（包括密码）。  
保护您的 Web 服务器的最佳实践是安装对于 HTTPS（HTTP Secure）的支持。此协议利用 SSL/TLS 加密保护您的数据。有关更多信息，请参阅在*Amazon EC2用户指南*中的[教程：使用 Amazon Linux AMI 配置 SSL/TLS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-ami.html)。

## 将您的 Apache Web 服务器连接到数据库实例
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer.PHPContent"></a>

接着，将内容添加到连接到 Amazon RDS 数据库实例的 Apache Web 服务器。

**将内容添加到连接到数据库实例的 Apache Web 服务器**

1. 在仍连接到 EC2 实例时，将目录更改到 `/var/www` 并创建名为 `inc` 的新子目录。

   ```
   cd /var/www
   mkdir inc
   cd inc
   ```

1. 在名为 `inc` 的 `dbinfo.inc` 目录中新建文件，然后通过调用 nano（或您选择的编辑器）编辑文件。

   ```
   >dbinfo.inc
   nano dbinfo.inc
   ```

1. 将以下内容添加到 `dbinfo.inc` 文件。在这里，*db\$1instance\$1endpoint* 是数据库集群的不带端口的数据库集群写入器端点。
**注意**  
我们建议将用户名和密码信息放在不属于 Web 服务器的文档根目录的文件夹中。这样做会减少您的安全信息被泄露的可能性。  
确保在应用程序中将 `master password` 更改为合适的密码。

   ```
   <?php
   
   define('DB_SERVER', 'db_instance_endpoint');
   define('DB_USERNAME', 'tutorial_user');
   define('DB_PASSWORD', 'master password');
   define('DB_DATABASE', 'sample');
   ?>
   ```

1. 保存并关闭 `dbinfo.inc` 文件。如果您使用的是 nano，请使用 Ctrl\$1S 和 Ctrl\$1X 保存并关闭文件。

1. 将目录更改为 `/var/www/html`。

   ```
   cd /var/www/html
   ```

1. 在名为 `html` 的 `SamplePage.php` 目录中新建文件，然后通过调用 nano（或您选择的编辑器）编辑文件。

   ```
   >SamplePage.php
   nano SamplePage.php
   ```

1. 将以下内容添加到 `SamplePage.php` 文件：

------
#### [ MariaDB & MySQL ]

   ```
   <?php include "../inc/dbinfo.inc"; ?>
   <html>
   <body>
   <h1>Sample page</h1>
   <?php
   
     /* Connect to MySQL and select the database. */
     $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
   
     if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();
   
     $database = mysqli_select_db($connection, DB_DATABASE);
   
     /* Ensure that the EMPLOYEES table exists. */
     VerifyEmployeesTable($connection, DB_DATABASE);
   
     /* If input fields are populated, add a row to the EMPLOYEES table. */
     $employee_name = htmlentities($_POST['NAME']);
     $employee_address = htmlentities($_POST['ADDRESS']);
   
     if (strlen($employee_name) || strlen($employee_address)) {
       AddEmployee($connection, $employee_name, $employee_address);
     }
   ?>
   
   <!-- Input form -->
   <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
     <table border="0">
       <tr>
         <td>NAME</td>
         <td>ADDRESS</td>
       </tr>
       <tr>
         <td>
           <input type="text" name="NAME" maxlength="45" size="30" />
         </td>
         <td>
           <input type="text" name="ADDRESS" maxlength="90" size="60" />
         </td>
         <td>
           <input type="submit" value="Add Data" />
         </td>
       </tr>
     </table>
   </form>
   
   <!-- Display table data. -->
   <table border="1" cellpadding="2" cellspacing="2">
     <tr>
       <td>ID</td>
       <td>NAME</td>
       <td>ADDRESS</td>
     </tr>
   
   <?php
   
   $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");
   
   while($query_data = mysqli_fetch_row($result)) {
     echo "<tr>";
     echo "<td>",$query_data[0], "</td>",
          "<td>",$query_data[1], "</td>",
          "<td>",$query_data[2], "</td>";
     echo "</tr>";
   }
   ?>
   
   </table>
   
   <!-- Clean up. -->
   <?php
   
     mysqli_free_result($result);
     mysqli_close($connection);
   
   ?>
   
   </body>
   </html>
   
   
   <?php
   
   /* Add an employee to the table. */
   function AddEmployee($connection, $name, $address) {
      $n = mysqli_real_escape_string($connection, $name);
      $a = mysqli_real_escape_string($connection, $address);
   
      $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
   
      if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
   }
   
   /* Check whether the table exists and, if not, create it. */
   function VerifyEmployeesTable($connection, $dbName) {
     if(!TableExists("EMPLOYEES", $connection, $dbName))
     {
        $query = "CREATE TABLE EMPLOYEES (
            ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            NAME VARCHAR(45),
            ADDRESS VARCHAR(90)
          )";
   
        if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");
     }
   }
   
   /* Check for the existence of a table. */
   function TableExists($tableName, $connection, $dbName) {
     $t = mysqli_real_escape_string($connection, $tableName);
     $d = mysqli_real_escape_string($connection, $dbName);
   
     $checktable = mysqli_query($connection,
         "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");
   
     if(mysqli_num_rows($checktable) > 0) return true;
   
     return false;
   }
   ?>
   ```

------
#### [ PostgreSQL ]

   ```
   <?php include "../inc/dbinfo.inc"; ?>
   
   <html>
   <body>
   <h1>Sample page</h1>
   <?php
   
   /* Connect to PostgreSQL and select the database. */
   $constring = "host=" . DB_SERVER . " dbname=" . DB_DATABASE . " user=" . DB_USERNAME . " password=" . DB_PASSWORD ;
   $connection = pg_connect($constring);
   
   if (!$connection){
    echo "Failed to connect to PostgreSQL";
    exit;
   }
   
   /* Ensure that the EMPLOYEES table exists. */
   VerifyEmployeesTable($connection, DB_DATABASE);
   
   /* If input fields are populated, add a row to the EMPLOYEES table. */
   $employee_name = htmlentities($_POST['NAME']);
   $employee_address = htmlentities($_POST['ADDRESS']);
   
   if (strlen($employee_name) || strlen($employee_address)) {
     AddEmployee($connection, $employee_name, $employee_address);
   }
   
   ?>
   
   <!-- Input form -->
   <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
     <table border="0">
       <tr>
         <td>NAME</td>
         <td>ADDRESS</td>
       </tr>
       <tr>
         <td>
       <input type="text" name="NAME" maxlength="45" size="30" />
         </td>
         <td>
       <input type="text" name="ADDRESS" maxlength="90" size="60" />
         </td>
         <td>
       <input type="submit" value="Add Data" />
         </td>
       </tr>
     </table>
   </form>
   <!-- Display table data. -->
   <table border="1" cellpadding="2" cellspacing="2">
     <tr>
       <td>ID</td>
       <td>NAME</td>
       <td>ADDRESS</td>
     </tr>
   
   <?php
   
   $result = pg_query($connection, "SELECT * FROM EMPLOYEES");
   
   while($query_data = pg_fetch_row($result)) {
     echo "<tr>";
     echo "<td>",$query_data[0], "</td>",
          "<td>",$query_data[1], "</td>",
          "<td>",$query_data[2], "</td>";
     echo "</tr>";
   }
   ?>
   </table>
   
   <!-- Clean up. -->
   <?php
   
     pg_free_result($result);
     pg_close($connection);
   ?>
   </body>
   </html>
   
   
   <?php
   
   /* Add an employee to the table. */
   function AddEmployee($connection, $name, $address) {
      $n = pg_escape_string($name);
      $a = pg_escape_string($address);
      echo "Forming Query";
      $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
   
      if(!pg_query($connection, $query)) echo("<p>Error adding employee data.</p>"); 
   }
   
   /* Check whether the table exists and, if not, create it. */
   function VerifyEmployeesTable($connection, $dbName) {
     if(!TableExists("EMPLOYEES", $connection, $dbName))
     {
        $query = "CREATE TABLE EMPLOYEES (
            ID serial PRIMARY KEY,
            NAME VARCHAR(45),
            ADDRESS VARCHAR(90)
          )";
   
        if(!pg_query($connection, $query)) echo("<p>Error creating table.</p>"); 
     }
   }
   /* Check for the existence of a table. */
   function TableExists($tableName, $connection, $dbName) {
     $t = strtolower(pg_escape_string($tableName)); //table name is case sensitive
     $d = pg_escape_string($dbName); //schema is 'public' instead of 'sample' db name so not using that
   
     $query = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t';";
     $checktable = pg_query($connection, $query);
   
     if (pg_num_rows($checktable) >0) return true;
     return false;
   
   }
   ?>
   ```

------

1. 保存并关闭 `SamplePage.php` 文件。

1. 打开 Web 浏览器并浏览到 `http://EC2 instance endpoint/SamplePage.php`（例如：`http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com/SamplePage.php`）来验证 Web 服务器是否已成功连接到数据库实例。

您可以使用 `SamplePage.php` 将数据添加到数据库实例。您添加的数据之后将显示在该页面上。要验证数据是否已插入到表中，请在 Amazon EC2 实例上安装 MySQL 客户端。然后，连接到数据库实例并查询表。

有关安装 MySQL 客户端并连接到数据库实例的信息，请参阅 [连接到 MySQL 数据库实例](USER_ConnectToInstance.md)。

要确保您的数据库实例尽可能安全，请验证 VPC 外部的源是否无法连接到您的数据库实例。

在您完成 Web 服务器和数据库测试后，应删除您的数据库实例 和 Amazon EC2 实例。
+ 要删除数据库实例，请按照 [删除数据库实例](USER_DeleteInstance.md) 中的说明操作。您无需创建最终快照。
+ 要终止 Amazon EC2 实例，请按照 *Amazon EC2 用户指南*中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)中的说明操作。

# 教程：使用 Lambda 函数访问 Amazon RDS 数据库
<a name="rds-lambda-tutorial"></a>

在本教程中，您使用 Lambda 函数通过 RDS 代理将数据写入 [Amazon Relational Database Service](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)（Amazon RDS）数据库。您的 Lambda 函数在 Amazon Simple Queue Service（Amazon SQS）队列中读取记录，每当添加消息时，都将新的项目写入您数据库的表中。在此示例中，您使用 AWS 管理控制台 手动向队列添加消息。下图显示了您用于完成教程的 AWS 资源。

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_1.png)


借助 Amazon RDS，您可以使用 Microsoft SQL Server、MariaDB、MySQL、Oracle Database 和 PostgreSQL 等常见数据库产品在云中运行托管式关系数据库。通过使用 Lambda 访问您的数据库，您可以读取和写入数据以响应事件，例如在您的网站上注册的新客户。您的函数、数据库实例和代理可以自动扩展以满足高需求时段。

要完成本教程，请执行以下任务：

1. 在您的 AWS 账户的原定设置 VPC 中启动 RDS for MySQL 数据库实例和代理。

1. 创建并测试 Lambda 函数，该函数在您的数据库中创建新表并将数据写入其中。

1. 创建 Amazon SQS 队列并将其配置为在添加新消息时调用您的 Lambda 函数。

1. 使用 AWS 管理控制台向队列添加消息并使用 CloudWatch Logs 监控结果，来测试完整设置。

通过完成这些步骤，您将学习：
+ 如何使用 Amazon RDS 创建数据库实例和代理，并将 Lambda 函数连接到代理。
+ 如何使用 Lambda 对 Amazon RDS 数据库执行创建和读取操作。
+ 如何使用 Amazon SQS 调用 Lambda 函数。

您可以使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 完成此教程。

## 先决条件
<a name="vpc-rds-prereqs"></a>

在开始之前，请完成以下各节中的步骤：
+ [注册 AWS 账户](CHAP_SettingUp.md#sign-up-for-aws)
+ [创建具有管理访问权限的用户](CHAP_SettingUp.md#create-an-admin)

## 创建 Amazon RDS 数据库实例
<a name="vpc-rds-create-RDS-instance"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step1.png)


Amazon RDS 数据库实例是在 AWS 云 中运行的独立数据库环境。实例可以包含一个或多个由用户创建的数据库。除非您另行指定，否则 Amazon RDS 会在您的 AWS 账户包含的原定设置 VPC 中创建新的数据库实例。有关 Amazon VPC 的更多信息，请参阅 [Amazon Virtual Private Cloud 用户指南](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)。

在本教程中，您在您 AWS 账户 的默认 VPC 中创建一个新实例，并在该实例中创建一个名为 `ExampleDB` 的数据库。您可以使用 AWS 管理控制台或 AWS CLI 创建数据库实例和数据库。

**创建数据库实例**

1. 打开 Amazon RDS 控制台并选择**创建数据库**。

1. 保持**标准创建**选项处于选中状态，然后在**引擎选项**中选择 **MySQL**。

1. 在**模板**中，选择**免费套餐**或**沙盒**。对于免费套餐账户，将显示**免费套餐**。对于付费套餐账户，将显示**沙盒**。

1. 在**设置**中，为 **DB 实例标识符**输入 **MySQLForLambda**。

1. 请通过执行以下操作设置用户名和密码：

   1. 在**凭证设置**中，将**主用户名**设置为 `admin`。

   1. 对于**主密码**，输入并确认密码以访问您的数据库。

1. 通过执行以下操作指定数据库名称：
   + 将所有剩余的原定设置选项保持选中状态，然后向下滚动到**其他配置**部分。
   + 展开此部分并输入 **ExampleDB** 作为**初始数据库名称**。

1. 保持所有其余默认选项处于选中状态，然后选择**创建队列**。

## 创建 Lambda 函数和代理
<a name="auto-create-Lambda"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step2.png)


您可以使用 RDS 控制台在与数据库相同的 VPC 中创建 Lambda 函数和代理。

**注意**  
只有在数据库完成创建并处于**可用**状态时，才能创建这些关联的资源。

**创建关联函数和代理**

1. 从**数据库**页面，检查您的数据库是否处于**可用**状态。如果是，请继续执行下一步。否则，请等到您的数据库变为可用。

1. 选择您的数据库，并从**操作**中选择**设置 Lambda 连接**。

1. 在**设置 Lambda 连接**页面上，选择**创建新函数**。

   将**新的 Lambda 函数名称**设置为 **LambdaFunctionWithRDS**。

1. 在 **RDS 代理**部分，选择**使用 RDS 代理进行连接**选项。进一步选择**创建新代理**。
   + 对于**数据库凭证**，选择**数据库用户名和密码**。
   + 对于**用户名**，指定 `admin`。
   + 对于**密码**，输入您为数据库实例创建的密码。

1. 选择**设置**以完成代理和 Lambda 函数的创建。

向导完成设置，并提供指向 Lambda 控制台的链接以查看您的新函数。在切换到 Lambda 控制台之前，请记下代理端点。

## 创建函数执行角色
<a name="vpc-rds-create-execution-role"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step3.png)


在创建 Lambda 函数之前，您需要创建一个执行角色来为您的函数提供必要的权限。在本教程中，Lambda 需要权限来管理与包含您数据库实例的 VPC 的网络连接，以及轮询来自 Amazon SQS 队列的消息。

为了向您的 Lambda 函数提供其所需的权限，本教程使用 IAM 托管策略。这些策略可授予许多常见使用案例的权限，可在您的 AWS 账户 中使用。有关使用托管策略的更多信息，请参阅 [策略最佳实践](security_iam_id-based-policy-examples.md#security_iam_service-with-iam-policy-best-practices)。

**创建 Lambda 执行角色**

1. 打开 IAM 控制台的[角色](https://console.aws.amazon.com/iamv2/home#/roles)页面，然后选择**创建角色**。

1. 对于**受信任的实体类型**，选择 **AWS 服务**，对于**使用案例**，选择 **Lambda**。

1. 选择**下一步**。

1. 通过执行以下操作添加 IAM 托管策略：

   1. 使用策略搜索框，搜索 **AWSLambdaSQSQueueExecutionRole**。

   1. 在结果列表中，选中角色旁的复选框，然后选择**清除筛选条件**。

   1. 使用策略搜索框，搜索 **AWSLambdaVPCAccessExecutionRole**。

   1. 在结果列表中，选中角色旁的复选框，然后选择**下一步**。

1. 对于**角色名称**，输入 **lambda-vpc-sqs-role**，然后选择**创建角色**。

在本教程的后面部分，您需要提供刚刚创建的执行角色的 Amazon 资源名称（ARN）。

**查找执行角色 ARN**

1. 打开 IAM 控制台的[角色](https://console.aws.amazon.com/iamv2/home#/roles)页面，然后选择您的角色（`lambda-vpc-sqs-role`）。

1.  复制**摘要**部分中显示的 **ARN**。

## 创建 Lambda 部署包
<a name="vpc-rds-create-deployment-package"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step4.png)


以下示例 Python 代码使用 [PyMySQL](https://pymysql.readthedocs.io/en/latest/) 包打开与您的数据库的连接。首次调用函数时，它还会创建一个名为 `Customer` 的新表。该表使用以下架构，其中 `CustID` 是主键：

```
Customer(CustID, Name)
```

该函数还使用 PyMySQL 向该表添加记录。该函数使用您将添加到 Amazon SQS 队列的消息中指定的客户 ID 和名称来添加记录。

该代码在处理程序函数之外创建了与数据库的连接。在初始化代码中创建连接，使后续调用能够重用该连接并提高性能。在生产应用程序中，您还可以使用[预置并发](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html)来初始化所请求数量的数据库连接。调用函数后，这些连接即可用。

```
import sys
import logging
import pymysql
import json
import os

# rds settings
user_name = os.environ['USER_NAME']
password = os.environ['PASSWORD']
rds_proxy_host = os.environ['RDS_PROXY_HOST']
db_name = os.environ['DB_NAME']

logger = logging.getLogger()
logger.setLevel(logging.INFO)

# create the database connection outside of the handler to allow connections to be
# re-used by subsequent function invocations.
try:
        conn = pymysql.connect(host=rds_proxy_host, user=user_name, passwd=password, db=db_name, connect_timeout=5)
except pymysql.MySQLError as e:
    logger.error("ERROR: Unexpected error: Could not connect to MySQL instance.")
    logger.error(e)
    sys.exit(1)

logger.info("SUCCESS: Connection to RDS for MySQL instance succeeded")

def lambda_handler(event, context):
    """
    This function creates a new RDS database table and writes records to it
    """
    message = event['Records'][0]['body']
    data = json.loads(message)
    CustID = data['CustID']
    Name = data['Name']

    item_count = 0
    sql_string = f"insert into Customer (CustID, Name) values(%s, %s)"

    with conn.cursor() as cur:
        cur.execute("create table if not exists Customer ( CustID  int NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (CustID))")
        cur.execute(sql_string, (CustID, Name))
        conn.commit()
        cur.execute("select * from Customer")
        logger.info("The following items have been added to the database:")
        for row in cur:
            item_count += 1
            logger.info(row)
    conn.commit()

    return "Added %d items to RDS for MySQL table" %(item_count)
```

**注意**  
在此示例中，您的数据库访问凭证将存储为环境变量。在生产应用程序中，建议您将 [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 用作更安全的选项。请注意，如果 Lambda 函数位于 VPC 中，您需要创建 VPC 端点才能连接到 Secrets Manager。要了解更多信息，请参阅[如何在虚拟私有云中连接到 Secrets Manager 服务](https://aws.amazon.com/blogs/security/how-to-connect-to-aws-secrets-manager-service-within-a-virtual-private-cloud/)。

 要在函数代码中包含 PyMySQL 依赖关系，请创建一个 .zip 部署包。以下命令适用于 Linux、macOS 或 Unix：

**创建 .zip 部署包**

1. 将代码示例保存为名为 `lambda_function.py` 的文件。

1. 在创建 `lambda_function.py` 文件的同一目录中，创建一个名为 `package` 的新目录并安装 PyMySQL 库。

   ```
   mkdir package
   pip install --target package pymysql
   ```

1. 创建一个包含您的应用程序代码和 PyMySQL 库的 zip 文件。在 Linux 或 MacOS 中，运行以下 CLI 命令。在 Windows 中，使用您首选的压缩工具来创建 `lambda_function.zip` 文件。您的 `lambda_function.py` 源代码文件和包含依赖项的文件夹必须安装在.zip 文件的根目录下。

   ```
   cd package
   zip -r ../lambda_function.zip .
   cd ..
   zip lambda_function.zip lambda_function.py
   ```

   您也可以使用 Python 虚拟环境创建部署包。参阅[使用 .zip 文件归档部署 Python Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-create-package-with-dependency)。

## 更新 Lambda 函数
<a name="vpc-rds-update-function"></a>

现在，您可以使用刚创建的 .zip 程序包，通过 Lambda 控制台更新 Lambda 函数。要支持函数访问数据库，您还需要使用访问凭证配置环境变量。

**更新 Lambda 函数**

1. 打开 Lambda 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面，然后选择您的函数 `LambdaFunctionWithRDS`。

1. 在**运行时系统设置**选项卡中，选择**编辑**，以将函数的**运行时系统**更改为 **Python 3.10**。

1. 将**处理程序**更改为 `lambda_function.lambda_handler`。

1. 在**代码**选项卡中，选择**上传自**，然后选择 **.zip 文件**。

1. 选择您在前一阶段创建的 `lambda_function.zip` 文件，然后选择**保存**。

现在，使用您之前创建的执行角色来配置该函数。这会授予该函数访问您的数据库实例和轮询 Amazon SQS 队列所需的权限。

**配置函数的执行角色**

1. 在 Lambda 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面中，选择**配置**选项卡，然后选择**权限**。

1. 在**执行角色**中，选择**编辑**。

1. 在**现有角色**中，选择您的执行角色（`lambda-vpc-sqs-role`）。

1. 选择**保存**。

**配置函数的环境变量**

1. 在 Lambda 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面中，选择**配置**选项卡，然后选择**环境变量**。

1. 选择**编辑**。

1. 要添加数据库访问凭证，请执行以下操作：

   1. 选择**添加环境变量**，然后为**键**输入 **USER\$1NAME**，并为**值**输入 **admin**。

   1. 选择**添加环境变量**，然后为**键**输入 **DB\$1NAME**，并为**值**输入 **ExampleDB**。

   1. 选择**添加环境变量**，然后对于**键**输入 **PASSWORD**，对于**值**输入您在创建数据库时选择的密码。

   1. 选择**添加环境变量**，然后对于**键**输入 **RDS\$1PROXY\$1HOST**，对于**值**输入您之前记下的 RDS 代理端点。

   1. 选择**保存**。

## 在控制台中测试 Lambda 函数。
<a name="vpc-rds-test-function"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step5.png)


您现在可以使用 Lambda 控制台测试您的函数。您可以创建一个测试事件，该事件模仿您在教程的最后阶段使用 Amazon SQS 调用函数时将收到的数据。您的测试事件包含一个 JSON 对象，该对象指定要添加到您的函数创建的 `Customer` 表中的客户 ID 和客户名称。

**测试 Lambda 函数**

1. 打开 Lambda 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面，然后选择一个函数。

1. 选择**测试**部分。

1. 选择**创建新事件**，然后输入 **myTestEvent** 作为事件名称。

1. 将以下代码复制到**事件 JSON** 中，然后选择**保存**。

   ```
   {
     "Records": [
       {
         "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
         "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
         "body": "{\n     \"CustID\": 1021,\n     \"Name\": \"Martha Rivera\"\n}",
         "attributes": {
           "ApproximateReceiveCount": "1",
           "SentTimestamp": "1545082649183",
           "SenderId": "AIDAIENQZJOLO23YVJ4VO",
           "ApproximateFirstReceiveTimestamp": "1545082649185"
         },
         "messageAttributes": {},
         "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
         "eventSource": "aws:sqs",
         "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue",
         "awsRegion": "us-west-2"
       }
     ]
   }
   ```

1. 选择**测试**。

在**执行结果**选项卡中，您应该看到与**函数日志**中显示的以下内容类似的结果：

```
[INFO] 2023-02-14T19:31:35.149Z bdd06682-00c7-4d6f-9abb-89f4bbb4a27f The following items have been added to the database:
[INFO] 2023-02-14T19:31:35.149Z bdd06682-00c7-4d6f-9abb-89f4bbb4a27f (1021, 'Martha Rivera')
```

## 创建 Amazon SQS 队列
<a name="vpc-rds-create-queue"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step6.png)


您已成功测试了您的 Lambda 函数和 Amazon RDS 数据库实例的集成。现在，您创建了 Amazon SQS 队列，用于在本教程的最后阶段调用 Lambda 函数。

**创建 Amazon SQS 队列（控制台）。**

1. 打开 Amazon SQS 控制台的[队列](https://console.aws.amazon.com/sqs/v2/home#/queues)页面，然后选择**创建队列**。

1. 将**类型**保留为**标准**，然后为您的队列名称输入 **LambdaRDSQueue**。

1. 保持所有默认选项处于选中状态，然后选择**创建队列**。

## 创建一个事件源映射以调用您的 Lambda 函数
<a name="vpc-rds-create-event-source-mapping"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step7.png)


[事件源映射](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html)是 Lambda 中的一种资源，它从流或队列中读取项目并调用 Lambda 函数。配置事件源映射时，可以指定批处理大小，以便可以将来自您的流或队列的记录批处理成单个负载。在此示例中，您将批处理大小设置为 1，这样每次向队列发送消息时都会调用 Lambda 函数。您可以使用 AWS CLI 或 Lambda 控制台配置事件源映射。

**创建事件源映射（控制台）**

1. 打开 Lambda 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面，然后选择一个函数 (`LambdaFunctionWithRDS`)。

1. 在**函数概述**部分中，选择**添加触发器**。

1. 对于源，选择 **Amazon SQS**，然后选择队列的名称（`LambdaRDSQueue`）。

1. 对于**批处理大小**，输入 **1**。

1. 将所有其他选项设置为默认值，然后选择**添加**。

现在，您可以通过向 Amazon SQS 队列添加一条消息来测试您的完整设置。

## 测试和监控您的设置
<a name="vpc-rds-test-setup"></a>

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step8.png)


要测试您的完整设置，请使用控制台向 Amazon SQS 队列添加消息。然后，您可以使用 CloudWatch Logs 确认您的 Lambda 函数正在按预期将记录写入数据库。

**测试和监控您的设置**

1. 打开 Amazon SQS 控制台的[队列](https://console.aws.amazon.com/sqs/v2/home#/queues)页面，然后选择创建队列 (`LambdaRDSQueue`)。

1. 选择**发送和接收消息**，然后将以下 JSON 粘贴到**发送消息**部分的**消息正文**中。

   ```
   {
       "CustID": 1054,
       "Name": "Richard Roe"
   }
   ```

1. 选择**发送消息**。

   将您的消息发送到队列将导致 Lambda 通过您的事件源映射调用您的函数。要确认 Lambda 已按预期调用您的函数，请使用 CloudWatch Logs 验证该函数是否已将客户名称和 ID 写入您的数据库表。

1. 打开 CloudWatch 控制台的[日志组](https://console.aws.amazon.com/cloudwatch/home#logsV2:log-groups)页面，为您的函数选择日志组 (`/aws/lambda/LambdaFunctionWithRDS`)。

1. 在**日志流**部分中，选择最新的日志流。

   您的表应包含两条客户记录，每次调用您的函数都有一条记录。在日志流中，您应看到类似以下内容的消息：

   ```
   [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 The following items have been added to the database:
   [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 (1021, 'Martha Rivera')
   [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 (1054, 'Richard Roe')
   ```

## 清除资源
<a name="rds-tutorial-cleanup"></a>

除非您想要保留为本教程创建的资源，否则可立即将其删除。通过删除您不再使用的 AWS 资源，可防止您的 AWS 账户产生不必要的费用。

**删除 Lambda 函数**

1. 打开 Lamba 控制台的 [Functions（函数）页面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 选择您创建的函数。

1. 依次选择 **Actions** 和 **Delete**。

1. 选择 **Delete**。

**删除执行角色**

1. 打开 IAM 控制台的[角色页面](https://console.aws.amazon.com/iam/home#/roles)。

1. 选择您创建的执行角色。

1. 选择**删除角色**。

1. 选择 **Yes, delete**（是，删除）。

**删除 MySQL 数据库实例**

1. 打开 Amazon RDS 控制台的 [Databases（数据库）页面](https://console.aws.amazon.com//rds/home#databases:)。

1. 选择您创建的数据库。

1. 依次选择 **Actions**（操作）和 **Delete**（删除）。

1. 清除 **Create final snapshot**（创建最终快照）复选框。

1. 在文本框中输入 **delete me**。

1. 选择**删除**。

**删除 Amazon SQS 队列**

1. 登录到 AWS 管理控制台 并打开 Amazon SQS 控制台，网址：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/sqs/)。

1. 选择创建的队列。

1. 选择 **Delete**（删除）。

1. 在文本框中输入 **delete**。

1. 选择 **Delete**。