

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

# 教程：使用接口 VPC 终端节点连接到 Amazon Keyspaces
<a name="vpc-endpoints-tutorial"></a>

本教程介绍了如何针对 Amazon Keyspaces 设置和使用接口 VPC 端点。

*接口 VPC 端点*可以在 Amazon VPC 中运行的虚拟私有云 (VPC) 与 Amazon Keyspaces 之间实现私有通信。接口 VPC 终端节点由提供支持 AWS PrivateLink，这是一项支持 VPCs 和 AWS 服务之间私有通信的 AWS 服务。有关更多信息，请参阅 [将 Amazon Keyspaces 与接口 VPC 端点结合使用](vpc-endpoints.md)。

**Topics**
+ [教程先决条件和注意事项](vpc-endpoints-tutorial.before-you-begin.md)
+ [步骤 1：启动 Amazon EC2 实例](vpc-endpoints-tutorial.launch-ec2-instance.md)
+ [第 2 步：配置 Amazon EC2 实例](vpc-endpoints-tutorial.configure-ec2-instance.md)
+ [步骤 3：为 Amazon Keyspaces 创建 VPC 端点](vpc-endpoints-tutorial.create-endpoint.md)
+ [步骤 4：为 VPC 端点连接配置权限](vpc-endpoints-tutorial.permissions.md)
+ [步骤 5：使用配置监控 CloudWatch](vpc-endpoints-tutorial.monitoring.md)
+ [步骤 6：（可选）为应用程序配置连接池大小的最佳实践](vpc-endpoints-tutorial.connections.md)
+ [步骤 7：（可选）清理](vpc-endpoints-tutorial.clean-up.md)

# 教程先决条件和注意事项
<a name="vpc-endpoints-tutorial.before-you-begin"></a>

在开始本教程之前，请按照中的 AWS 设置说明进行操作[访问 Amazon Keyspaces（Apache Cassandra 兼容）](accessing.md)。这些步骤包括注册 AWS 和创建有权访问 Amazon Keyspaces 的 AWS Identity and Access Management (IAM) 委托人。记下 IAM 用户的姓名和访问密钥，因为您稍后需要用到这些信息。

创建一个名为 `myKeyspace` 的键空间和至少一个表，以便稍后测试 VPC 端点连接。您可以在[Amazon Keyspaces（Apache Cassandra 兼容）](getting-started.md)中找到详细说明。

完成先决条件步骤后，继续执行[步骤 1：启动 Amazon EC2 实例](vpc-endpoints-tutorial.launch-ec2-instance.md)。

# 步骤 1：启动 Amazon EC2 实例
<a name="vpc-endpoints-tutorial.launch-ec2-instance"></a>

在此步骤中，您将在默认 Amazon VPC 中启动 Amazon EC2 实例。然后，您可以为 Amazon Keyspaces 创建和使用 VPC 端点。

**启动 Amazon EC2 实例**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 选择**启动实例**，然后执行以下操作：

   从 EC2 控制台控制面板中，在**启动实例**框中选择 **启动实例**，然后从显示的选项中选择**启动实例**。

   在**名称与标签**下，针对**名称**，为实例输入一个描述性名称。

   在**应用程序和操作系统映像（亚马逊机器映像）下**：
   + 选择**快速启动**，然后选择 Ubuntu。这是适用于您的实例的操作系统 (OS)。
   + 在**亚马逊机器映像 (AMI)** 下，您可以使用标记为**符合免费套餐条件**的默认映像。*Amazon Machine Image (AMI)* 是基本配置，用作您的实例的模板。

   在**实例类型**下：
   + 从**实例类型**列表中选择 **t2.micro** 实例类型，这是默认选择的类型。

   在**密钥对（登录）**下，对于**密钥对名称**，选择以下选项之一：
   + 如果没有 Amazon EC2 密钥对，请选择**创建新密钥对**，然后按照说明操作。系统会要求您下载私有密钥文件（*.pem* 文件）。稍后登录 Amazon EC2 实例时，您需要使用此文件，因此请记下文件路径。
   + 如果已经有 Amazon EC2 密钥对，请转至**选择密钥对**，然后从列表中选择您的密钥对。必须已经有可用私有密钥文件（*.pem* 文件）才能登录 Amazon EC2 实例。

   在**网络设置**下：
   + 选择**编辑**。
   + 选择**选择现有安全组**。
   + 在安全组列表中，选择**默认**。这是 VPC 的默认安全组。

   继续打开**摘要**。
   + 在**摘要**窗格中，查看您的实例配置摘要。在您准备就绪后，选择**启动实例**。

1. 在新 Amazon EC2 实例的完成屏幕上，选择**连接到实例**磁贴。下一个屏幕会显示连接到新实例所需的信息和步骤。记下以下信息：
   + 保护密钥文件的示例命令
   + 连接字符串
   + **公 IPv4 有 DNS** 名称

   记下此页上的信息后，您可以继续执行本教程的下一步（[第 2 步：配置 Amazon EC2 实例](vpc-endpoints-tutorial.configure-ec2-instance.md)）。

**注意**  
Amazon EC2 实例需要几分钟才能变为可用。在继续下一步之前，请确保**实例状态**为 `running`，并且已通过其所有**状态检查**。

# 第 2 步：配置 Amazon EC2 实例
<a name="vpc-endpoints-tutorial.configure-ec2-instance"></a>

当您的 Amazon EC2 实例可用时，您可以登录该实例并为首次使用做好准备。

**注意**  
以下步骤假设您从运行 Linux 的计算机连接到您的 Amazon EC2 实例。有关其他连接方式，请参阅《Amazon EC2 用户指南》**中的[连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)。

**配置您的 Amazon EC2 实例**

1. 您需要对进入您的 Amazon EC2 实例的入站 SSH 流量进行授权。为此，请创建一个新的 EC2 安全组，然后将该安全组分配给您的 EC2 实例。

   1. 在导航窗格中，选择 **Security Groups**（安全组）。

   1. 选择**创建安全组**。在**创建安全组**窗口中，执行以下操作：
      + **安全组名称** – 输入安全组的名称。例如：`my-ssh-access`
      + **描述** - 输入对安全组的简短描述。
      + **VPC** - 选择默认 VPC。
      + 在**入站规则**部分，选择**添加规则**并执行以下操作：
        + **类型** - 选择 **SSH**。
        + **来源** - 选择**我的 IP**。
        + 选择**添加规则**。

      在页面底部，确认配置设置并选择**创建安全组**。

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

   1. 选择在 [步骤 1：启动 Amazon EC2 实例](vpc-endpoints-tutorial.launch-ec2-instance.md) 中启动的 Amazon EC2 实例。

   1. 选择**操作**，选择**安全**，然后选择**更改安全组**。

   1. 在 “**更改安全组**” 中，转至 “**关联的安全组**”，然后输入您之前在此过程中创建的安全组（例如`my-ssh-access`）。还应选择现有 `default` 安全组。确认配置设置并选择**保存**。

1. 使用以下命令保护您的私有密钥文件不被访问。如果跳过此步骤，则连接将会失败。

   ```
   chmod 400 path_to_file/my-keypair.pem
   ```

1. 使用 `ssh` 命令登录您的 Amazon EC2 实例，如以下示例所示。

   ```
   ssh -i path_to_file/my-keypair.pem ubuntu@public-dns-name
   ```

   您需要指定私有密钥文件（*.pem* 文件）和实例的公有 DNS 名称。（请参阅 [步骤 1：启动 Amazon EC2 实例](vpc-endpoints-tutorial.launch-ec2-instance.md)。） 

   登录 ID 为 `ubuntu`。不需要密码。

   有关允许连接 Amazon EC2 实例的更多信息以及有关 AWS CLI 的说明，请参阅《Amazon EC2 用户指南》**中的[为 Linux 实例授权入站流量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)。

1. 下载并安装最新版本的 AWS Command Line Interface。

   1. 安装 `unzip`。

      ```
      sudo apt install unzip
      ```

   1. 使用 AWS CLI下载 `zip` 文件。

      ```
      curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
      ```

   1. 解压缩该文件。

      ```
      unzip awscliv2.zip
      ```

   1. 安装 AWS CLI。

      ```
      sudo ./aws/install
      ```

   1. 确认 AWS CLI 安装版本。

      ```
      aws --version
      ```

      输出应该如下所示：

      ```
      aws-cli/2.9.19 Python/3.9.11 Linux/5.15.0-1028-aws exe/x86_64.ubuntu.22 prompt/off
      ```

1. 配置您的 AWS 证书，如以下示例所示。出现提示时，输入您的 AWS 访问密钥 ID、密钥和默认区域名称。

   ```
   aws configure
    
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-east-1
   Default output format [None]:
   ```

1. 向您的 VPCs 安全组添加允许从 IPv6 地址进行入站 HTTP、HTTPS 和 SSH 访问的规则。

1. 要确认您的 VPC 终端节点已正确配置，您必须使用与 Amazon Keyspaces 的`cqlsh`连接。如果您在中使用本地环境或使用 Amazon Keyspaces CQL 编辑器 AWS 管理控制台，则连接将自动通过公有终端节点而不是您的 VPC 终端节点进行。要使用 `cqlsh` 来测试本教程中的 VPC 端点连接，请按照[使用 `cqlsh` 连接 Amazon Keyspaces](programmatic.cqlsh.md)中的设置说明操作。

现在，您可以为 Amazon Keyspaces 创建双栈 VPC 终端节点了。

# 步骤 3：为 Amazon Keyspaces 创建 VPC 端点
<a name="vpc-endpoints-tutorial.create-endpoint"></a>

在此步骤中，您将使用为 Amazon Keyspaces 创建双栈 VPC 终端节点。 AWS CLI要使用 VPC 控制台创建 VPC 端点，您可以按照 *AWS PrivateLink 指南*中的[创建 VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)进行操作。筛选**服务名称**时，请输入 **Cassandra**。

**使用创建 VPC 终端节点 AWS CLI**

1. 在开始之前，请验证您是否可以使用 Amazon Keyspaces 的公共端点与其进行通信。

   ```
   aws keyspaces list-tables --keyspace-name 'myKeyspace'
   ```

   输出显示了包含在指定键空间中的 Amazon Keyspaces 表的列表。如果您没有任何表，该列表将为空。

   ```
   {
       "tables": [
           {
               "keyspaceName": "myKeyspace",
               "tableName": "myTable1",
               "resourceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/catalog/table/myTable1"
           },
           {
               "keyspaceName": "myKeyspace",
               "tableName": "myTable2",
               "resourceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/catalog/table/myTable2"
           }
       ]
   }
   ```

1. 验证 Amazon Keyspaces 是否为在当前 AWS 区域创建 VPC 终端节点的可用服务。（命令以粗体文本显示，后面是示例输出。）

   ```
   aws ec2 describe-vpc-endpoint-services
    
   {
       "ServiceNames": [
           "com.amazonaws.us-east-1.cassandra", 
           "com.amazonaws.us-east-1.cassandra-fips"
           "api.aws.us-east-1.cassandra-streams"
       ]
   }
   ```

   如果 Amazon Keyspaces 是命令输出中的可用服务之一，则可以继续创建 VPC 终端节点。

1. 要使用 IPv6 已启用的双堆栈终端节点连接到 Amazon Keyspaces，请确认您的 VPC 是否支持 IPv6 并配置支持子网。 IPv6 要增加对当前仅 IPv6 支持的现有 VPC 的[ IPv6 支持 IPv4，请参阅 Amazon VPC 用户指南中对您](https://docs.aws.amazon.com/vpc/latest/userguide/)*的 VPC 的支持；*。

1. 确定您的 VPC 标识符。

   ```
   aws ec2 describe-vpcs
    
   {
       "Vpcs": [
           {
               "OwnerId": "111122223333",
               "InstanceTenancy": "default",
               "Ipv6CidrBlockAssociationSet": [
                   {
                       "AssociationId": "vpc-cidr-assoc-0000aaa0a00a00aa0",
                       "Ipv6CidrBlock": "2600:1f18:e19:7d00::/56",
                       "Ipv6CidrBlockState": {
                           "State": "associated"
                       },
                       "NetworkBorderGroup": "us-east-1",
                       "Ipv6Pool": "Amazon",
                       "Ipv6AddressAttribute": "public",
                       "IpSource": "amazon"
                   }
               ],
               "CidrBlockAssociationSet": [
                   {
                       "AssociationId": "vpc-cidr-assoc-00a0000a",
                       "CidrBlock": "111.11.0.0/16",
                       "CidrBlockState": {
                           "State": "associated"
                       }
                   }
               ],
               "IsDefault": true,
               "BlockPublicAccessStates": {
                   "InternetGatewayBlockMode": "off"
               },
               "VpcId": "vpc-a1234bcd",
               "State": "available",
               "CidrBlock": "111.11.0.0/16",
               "DhcpOptionsId": "dopt-a00aaaaa"
           }
       ]
   }
   ```

   在示例输出中，VPC ID 为 `vpc-a1234bcd`。

1. 使用筛选条件来收集有关 VPC 子网的详细信息。

   ```
   aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-a1234bcd"
    
   {
       "Subnets": [
           {
               "AvailabilityZoneId": "use1-az1",
               "MapCustomerOwnedIpOnLaunch": false,
               "OwnerId": "111122223333",
               "AssignIpv6AddressOnCreation": false,
               "Ipv6CidrBlockAssociationSet": [
                   {
                       "AssociationId": "subnet-cidr-assoc-05d75732736740283",
                       "Ipv6CidrBlock": "***********************",
                       "Ipv6CidrBlockState": {
                           "State": "associated"
                       },
                       "Ipv6AddressAttribute": "public",
                       "IpSource": "amazon"
                   }
               ],
               "SubnetArn": "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-70b24b16",
               "EnableDns64": false,
               "Ipv6Native": false,
               "PrivateDnsNameOptionsOnLaunch": {
                   "HostnameType": "ip-name",
                   "EnableResourceNameDnsARecord": false,
                   "EnableResourceNameDnsAAAARecord": false
               },
               "BlockPublicAccessStates": {
                   "InternetGatewayBlockMode": "off"
               },
               "SubnetId": "subnet-70b24b16",
               "State": "available",
               "VpcId": "vpc-a1234bcd",
               "CidrBlock": "**********/20",
               "AvailableIpAddressCount": 4089,
               "AvailabilityZone": "us-east-1a",
               "DefaultForAz": true,
               "MapPublicIpOnLaunch": true
           },
           {
               "AvailabilityZoneId": "use1-az2",
               "MapCustomerOwnedIpOnLaunch": false,
               "OwnerId": "111122223333",
               "AssignIpv6AddressOnCreation": false,
               "Ipv6CidrBlockAssociationSet": [
                   {
                       "AssociationId": "subnet-cidr-assoc-0ec6fb253e05b17eb",
                       "Ipv6CidrBlock": "***********************",
                       "Ipv6CidrBlockState": {
                           "State": "associated"
                       },
                       "Ipv6AddressAttribute": "public",
                       "IpSource": "amazon"
                   }
               ],
               "SubnetArn": "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-c63ffbe7",
               "EnableDns64": false,
               "Ipv6Native": false,
               "PrivateDnsNameOptionsOnLaunch": {
                   "HostnameType": "ip-name",
                   "EnableResourceNameDnsARecord": false,
                   "EnableResourceNameDnsAAAARecord": false
               },
               "BlockPublicAccessStates": {
                   "InternetGatewayBlockMode": "off"
               },
               "SubnetId": "subnet-c63ffbe7",
               "State": "available",
               "VpcId": "vpc-a1234bcd",
               "CidrBlock": "***********/20",
               "AvailableIpAddressCount": 4087,
               "AvailabilityZone": "us-east-1b",
               "DefaultForAz": true,
               "MapPublicIpOnLaunch": true
           }
       ]
   }
   ```

   在示例输出中，有两个可用的子网 IDs：`subnet-70b24b16`和`subnet-c63ffbe7`。

1. 创建 VPC 端点。对于 `--vpc-id` 参数，指定上一步中的 VPC ID。对于`--subnet-ids`参数，请指定上一步 IDs 中的子网。使用 `--vpc-endpoint-type` 参数将端点定义为接口。要创建双堆栈终端节点，请使用`--ip-address-type dualstack`。有关命令的更多信息，请参阅 *AWS CLI 命令参考*中的 [https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-endpoint.html)。

   ```
   aws ec2 create-vpc-endpoint \
    --vpc-endpoint-type Interface \
    --vpc-id vpc-a1234bcd \
    --ip-address-type dualstack \
    --service-name com.amazonaws.us-east-1.cassandra \
    --subnet-ids subnet-70b24b16 subnet-c63ffbe7
    
   {
       "VpcEndpoint": {
           "VpcEndpointId": "vpce-000000abc111d2ef3",
           "VpcEndpointType": "Interface",
           "VpcId": "vpc-a1234bcd",
           "ServiceName": "com.amazonaws.us-east-1.cassandra",
           "State": "pending",
           "RouteTableIds": [],
           "SubnetIds": [
               "subnet-70b24b16",
               "subnet-c63ffbe7"
           ],
           "Groups": [
               {
                   "GroupId": "sg-0123456789",
                   "GroupName": "default"
               }
           ],
           "IpAddressType": "dualstack",
           "DnsOptions": {
               "DnsRecordIpType": "dualstack"
           },
           "PrivateDnsEnabled": true,
           "RequesterManaged": false,
           "NetworkInterfaceIds": [
               "eni-08cd525f72ea6f1fa",
               "eni-07b1f6c895169d8fb"
           ],
           "DnsEntries": [
               {
                   "DnsName": "vpce-0000000000-1234567.cassandra.us-east-1.vpce.amazonaws.com",
                   "HostedZoneId": "Z7HUB22UULQXV"
               },
               {
                   "DnsName": "vpce-0000000000-1234567-us-east-1a.cassandra.us-east-1.vpce.amazonaws.com",
                   "HostedZoneId": "Z7HUB22UULQXV"
               },
               {
                   "DnsName": "cassandra.us-east-1.amazonaws.com",
                   "HostedZoneId": "ZONEIDPENDING"
               },
               {
                   "DnsName": "cassandra.us-east-1.api.aws",
                   "HostedZoneId": "ZONEIDPENDING"
               }
           ],
           "CreationTimestamp": "2025-09-19T15:19:19.266000+00:00",
           "OwnerId": "111122223333",
           "ServiceRegion": "us-east-1"
       }
   }
   ```

# 步骤 4：为 VPC 端点连接配置权限
<a name="vpc-endpoints-tutorial.permissions"></a>

本步骤中的过程演示了如何配置规则和权限，以便将 VPC 端点与 Amazon Keyspaces 配合使用。

**为新端点配置入站规则以允许 TCP 入站流量**

1. 在 Amazon VPC 控制台的左侧面板上，选择**端点**，然后选择您在前面的步骤中创建的端点。

1. 选择**管理安全组**，然后选择与此端点关联的安全组。

1. 选择**入站规则**，然后选择 **编辑入站规则**。

1. 添加一条入站规则，**类型**为 **CQLSH/CASSANDRA**。这会将**端口范围**自动设置成 **9142**。

1. 选择**保存规则**以保存新入站规则。

**配置 IAM 用户权限**

1. 确认用于连接 Amazon Keyspaces 的 IAM 用户是否具有相应的权限。在 AWS Identity and Access Management (IAM) 中，您可以使用 AWS 托管策略向 IAM 用户授`AmazonKeyspacesReadOnlyAccess`予对 Amazon Keyspaces 的读取权限。

   1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

   1. 在 IAM 控制台控制面板上，选择 **Users (用户)**，然后从列表中选择您的 IAM 用户。

   1. 在 **Summary (摘要)** 页上，选择 **Add permissions (添加权限)**。

   1. 选择**直接附加现有策略**。

   1. 从策略列表中选择 **AmazonKeyspacesReadOnlyAccess**，然后选择**下一步：查看**。

   1. 选择**添加权限**。

1. 验证您是否可以通过 VPC 端点访问 Amazon Keyspaces。

   ```
   aws keyspaces list-tables --keyspace-name 'my_Keyspace'
   ```

   如果你愿意，你可以尝试使用其他一些针对 Amazon Keyspaces 的 AWS CLI 命令。有关更多信息，请参阅 [AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/)。
**注意**  
IAM 用户或角色访问 Amazon Keyspaces 所需的最低权限是对系统表的读取权限，如以下策略所示。有关基于策略的权限的更多信息，请参阅 [Amazon Keyspaces 基于身份的策略示例](security_iam_id-based-policy-examples.md)。

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "cassandra:Select"
            ],
            "Resource":[
               "arn:aws:cassandra:us-east-1:111122223333:/keyspace/system*"
            ]
         }
      ]
   }
   ```

1. 向 IAM 用户授予对具有 VPC 的 Amazon EC2 实例的读取权限。

   将 Amazon Keyspaces 与 VPC 端点配合使用时，您需要向访问 Amazon Keyspaces 的 IAM 用户或角色授予*对您的 Amazon EC2 实例和 VPC 的只读权限，以收集端点和网络接口数据*。Amazon Keyspaces 将这一信息存储在 `system.peers` 表中，并使用它来管理连接。
**注意**  
托管式策略 `AmazonKeyspacesReadOnlyAccess_v2` 和 `AmazonKeyspacesFullAccess` 包含允许 Amazon Keyspaces 访问 Amazon EC2 实例以读取可用接口 VPC 端点信息所需的权限。

   1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

   1. 在 IAM 控制台控制面板上，选择**策略**。

   1. 选择**创建策略**，然后选择 **JSON** 选项卡。

   1. 复制以下策略并选择**下一步：标签**。

      ```
      {
         "Version":"2012-10-17",		 	 	 
         "Statement":[
            {
               "Sid":"ListVPCEndpoints",
               "Effect":"Allow",
               "Action":[
                  "ec2:DescribeNetworkInterfaces",
                  "ec2:DescribeVpcEndpoints"
               ],
               "Resource": "*"
            }
         ]
      }
      ```

   1. 选择**下一步：查看**，输入策略的名称 `keyspacesVPCendpoint`，然后选择**创建策略**。

   1. 在 IAM 控制台控制面板上，选择 **Users (用户)**，然后从列表中选择您的 IAM 用户。

   1. 在 **Summary (摘要)** 页上，选择 **Add permissions (添加权限)**。

   1. 选择**直接附加现有策略**。

   1. 从策略列表中选择**密钥空间 VPCendpoint**，然后选择**下一步：查看**。

   1. 选择**添加权限**。

1. 要验证 Amazon Keyspaces `system.peers` 表是否更新了 VPC 信息，请从您的 Amazon EC2 实例使用 `cqlsh` 运行以下查询。如果步骤 2 中您没有在 Amazon EC2 实例上安装 `cqlsh`，请按照[使用 `cqlsh-expansion` 连接 Amazon Keyspaces](programmatic.cqlsh.md#using_cqlsh)中的说明进行操作。

   ```
   SELECT * FROM system.peers;
   ```

   输出返回带有私 IPv6 有 IP 地址的节点，具体取决于您所在 AWS 地区的 VPC 和子网设置。

   ```
    peer                                    | data_center | host_id                              | preferred_ip                            | rack      | release_version | rpc_address                             | schema_version                       | tokens
   -----------------------------------------+-------------+--------------------------------------+-----------------------------------------+-----------+-----------------+-----------------------------------------+--------------------------------------+---------------------------------------------
     2600:1111:2222:3333:283b:8e6:d04f      |   us-east-1 | dddddddd-7a22-3582-a73d-49338a686a53 |  2600:1111:2222:3333:283b:8e6:d04f      | us-east-1 |          3.11.2 |  2600:1111:2222:3333:283b:8e6:d04f      | 05deae2d-6405-494d-a965-c0e5836bcb3c |  {'85070591730234615865843651857942052863'}
    2600:1111:2222:4444:7d26:5a09:1b44      |   us-east-1 | 66666666-035d-37ef-a247-19a6a867ab09 | 2600:1111:2222:4444:7d26:5a09:1b44      | us-east-1 |          3.11.2 | 2600:1111:2222:4444:7d26:5a09:1b44      | 05deae2d-6405-494d-a965-c0e5836bcb3c | {'170141183460469231731687303715884105726'}
   ```
**注意**  
您必须使用与 Amazon Keyspaces 的 `cqlsh` 连接来确认您的 VPC 终端节点配置正确。如果您使用本地环境或在 AWS 管理控制台中使用 Amazon Keyspaces CQL 编辑器，则连接将自动通过公有端点而不是您的 VPC 端点进行。如果您看到九个 IP 地址，则这些地址是 Amazon Keyspaces 针对公有端点连接自动写入 `system.peers` 表的条目。

# 步骤 5：使用配置监控 CloudWatch
<a name="vpc-endpoints-tutorial.monitoring"></a>

此步骤向您展示如何使用亚马逊 CloudWatch 监控与 Amazon Keyspaces 的 VPC 终端节点连接。

AWS PrivateLink 向发布 CloudWatch 有关您的接口端点的数据点。您可使用指标来验证系统是否正常运行。中的`AWS/PrivateLinkEndpoints`命名空间 CloudWatch 包括接口端点的指标。有关更多信息，请参阅*AWS PrivateLink 指南 AWS PrivateLink*中的[CloudWatch 指标](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-cloudwatch-metrics.html)。

**创建包含 VPC 终端节点指标的 CloudWatch 控制面板**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择**控制面板**。然后选择**创建控制面板**。输入控制面板的名称，然后选择**创建**。

1. 在**添加小部件**下，选择**数字**。

1. 在 “**指标**” 下，选择 **AWS/PrivateLinkEndpoints**。

1. 选择**端点类型、服务名称、VPC 端点 ID、VPC ID**。

1. 选择 `ActiveConnections` 和 `NewConnections` 指标，然后选择**创建小部件**。

1. 保存控制面板。

`ActiveConnections` 指标的定义为端点在过去一分钟内收到的并发活动连接数。`NewConnections` 指标的定义为过去一分钟内通过端点建立的新连接数。

有关创建仪表板的更多信息，请参阅《*CloudWatch 用户指南》*中的[创建仪表板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create_dashboard.html)。

# 步骤 6：（可选）为应用程序配置连接池大小的最佳实践
<a name="vpc-endpoints-tutorial.connections"></a>

本部分介绍如何根据应用程序的查询吞吐量要求来确定理想的连接池大小。

Amazon Keyspaces 允许每个 TCP 连接每秒最多 3000 次 CQL 查询。因此，驱动程序可以与 Amazon Keyspaces 建立的连接数量几乎不受限制。但是，我们建议您将连接池大小与应用程序的要求相匹配，并在使用 Amazon Keyspaces 和 VPC 端点连接时考虑可用的端点。

您可以在客户端驱动程序中配置连接池的大小。例如，如果本地池大小为 **2**，VPC 接口端点在 **3** 个可用区中创建，那么驱动程序会建立 **6** 个用于查询的连接（总共 7 个，包括一个控制连接）。使用这 6 个连接，您每秒最多可以支持 18000 次 CQL 查询。

如果您的应用程序需要支持每秒 40000 次 CQL 查询，请根据需要的查询数量来确定所需的连接池大小。要支持每秒 40000 次 CQL 查询，您需要将本地池大小至少配置为 5，这样每秒至少可以支持 45000 次 CQL 查询。

您可以使用`AWS/Cassandra`命名空间中的`PerConnectionRequestRateExceeded` CloudWatch指标来监控是否超过每个连接每秒最大操作数的配额。`PerConnectionRequestRateExceeded` 指标可以显示向 Amazon Keyspaces 发出的、超出每连接请求速率限额的请求数量。

本步骤中的代码示例显示了在使用接口 VPC 端点时如何估算和配置连接池。

------
#### [ Java ]

您可以在 Java 驱动程序中配置每个池的连接数。有关 Java 客户端驱动程序连接的完整示例，请参阅[使用 Cassandra 客户端驱动程序以编程方式访问 Amazon Keyspaces](using_java_driver.md)。

客户端驱动程序启动后，首先为管理任务（例如架构和拓扑更改）建立控制连接。然后创建其他连接。

在以下示例中，本地池大小驱动程序配置被指定为 2。如果 VPC 终端节点是在 VPC 内的 3 个子网中创建的，则接口终端节点 CloudWatch 的结果为 7`NewConnections`，如以下公式所示。

```
NewConnections = 3 (VPC subnet endpoints created across) * 2 (pool size) + 1 ( control connection)
```

```
datastax-java-driver {

    basic.contact-points = [ "cassandra.us-east-1.amazonaws.com:9142"]
    advanced.auth-provider{
        class = PlainTextAuthProvider
           username = "ServiceUserName"
           password = "ServicePassword"
    }
    basic.load-balancing-policy {
        local-datacenter = "us-east-1"
        slow-replica-avoidance = false           
    }

    advanced.ssl-engine-factory {
        class = DefaultSslEngineFactory
        truststore-path = "./src/main/resources/cassandra_truststore.jks"
        truststore-password = "my_password"
        hostname-validation = false
      }
    advanced.connection {
        pool.local.size = 2
          }
}
```

如果活动连接的数量与您配置的池大小（跨子网聚合）\$1 1 个控制连接不匹配，则无法创建连接。

------
#### [ Node.js ]

您可以在 Node.js 驱动程序中配置每个池的连接数。有关 Node.js 客户端驱动程序连接的完整示例，请参阅[使用 Cassandra Node.js 客户端驱动程序以编程方式访问 Amazon Keyspaces](using_nodejs_driver.md)。

下面的代码示例使用该*keyspaces-bundle.pem*文件作为数字证书。请参阅[开始前的准备工作](using_nodejs_driver.md#using_nodejs_driver.BeforeYouBegin)了解更多信息。

在以下示例中，本地池大小驱动程序配置被指定为 1。如果 VPC 终端节点是在 VPC 内的 4 个子网中创建的，则接口终端节点将获得 5 个`NewConnections`子网，如以下公式所示。 CloudWatch 

```
NewConnections = 4 (VPC subnet endpoints created across) * 1 (pool size) + 1 ( control connection)
```

```
const cassandra = require('cassandra-driver');
const fs = require('fs');
const types = cassandra.types;
const auth = new cassandra.auth.PlainTextAuthProvider('ServiceUserName', 'ServicePassword');
const sslOptions1 = {
         ca: [
                    fs.readFileSync('/home/ec2-user/keyspaces-bundle.pem', 'utf-8')],
                    host: 'cassandra.us-east-1.amazonaws.com',
                    rejectUnauthorized: true
        };
const client = new cassandra.Client({
                   contactPoints: ['cassandra.us-east-1.amazonaws.com'],
                   localDataCenter: 'us-east-1',
                   pooling: { coreConnectionsPerHost: { [types.distance.local]: 1 } },
                   consistency: types.consistencies.localQuorum,
                   queryOptions: { isIdempotent: true },
                   authProvider: auth,
                   sslOptions: sslOptions1,
                   protocolOptions: { port: 9142 }
        });
```

------

# 步骤 7：（可选）清理
<a name="vpc-endpoints-tutorial.clean-up"></a>

如果要删除您在本教程中创建的资源，请按照以下程序操作。

**删除用于 Amazon Keyspaces 的 VPC 端点**

1. 登录到您的 Amazon EC2 实例。

1. 确定用于 Amazon Keyspaces 的 VPC 端点 ID。如果不使用 `grep` 参数，则系统会显示所有服务的 VPC 端点信息。

   ```
   aws ec2 describe-vpc-endpoint-services | grep ServiceName | grep cassandra
    
   {
       "VpcEndpoint": {
           "PolicyDocument": "{\"Version\":\"2000-00-00",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"*\",\"Resource\":\"*\"}]}", 
           "VpcId": "vpc-a1234bcd", 
           "State": "available", 
           "ServiceName": "com.amazonaws.us-east-1.cassandra", 
           "RouteTableIds": [], 
           "VpcEndpointId": "vpce-1a23b4c5", 
           "CreationTimestamp": "2025-07-26T22:00:14Z"
       }
   }
   ```

   在示例输出中，VPC 端点 ID 为*vpce-1a23b4c5*。请务必用您自己的值替换此值。

1. 删除 VPC 端点。

   ```
   aws ec2 delete-vpc-endpoints --vpc-endpoint-ids vpce-1a23b4c5
    
   {
       "Unsuccessful": []
   }
   ```

   空数组 `[]` 表示成功（没有失败请求）。

**终止 Amazon EC2 实例**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

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

1. 选择您的 Amazon EC2 实例。

1. 选择**操作**，选择**实例状态**，然后选择**终止**。

1. 在确认窗口中，选择**是，终止**。