使用 VPC 可访问性分析器对 Amazon RDS 数据库的网络连接进行故障排除

2023 年 7 月:这篇文章经过审核以确保准确性。

亚马逊虚拟私有云 (Amazon VPC) 使您能够预置 亚马逊云科技 云的逻辑隔离部分,在其中可以在您定义的虚拟网络中启动 亚马逊关系数据库服务 (Amazon RDS) 数据库实例等 亚马逊云科技 资源。 创建 Amazon RDS 数据库实例 时 ,您可以选择创建新的 VPC 或选择默认 VPC 来预置数据库实例。

一个常见的场景是设置一个 VPC,其中包含一个托管面向公众的 Web 应用程序的 亚马逊弹性计算云 (Amazon EC2) 实例和一个不应公开访问的 Amazon RDS/ Amazon Aurora 数据库。您可以手动或按照使用 EC2 实例 配置自动网络连接指南中的说明自动设置 EC2 实例与 RDS/Aurora 数据库之间的连接 。设置连接后,您可能需要验证您的 EC2 实例是否可以连接到 RDS 数据库实例。

在这篇文章中,我们将向您展示如何使用 VPC 可访问性分析器对从您的计算资源(例如 EC2 实例、 亚马逊云科技 Lam bda 或亚马逊弹性 Kubernetes 服务 (Amazon EK S ))到 RDS 数据库实例的网络连接和可访问性进行验证、跟踪和故障排除。

VPC 可访问性分析器 是 Amazon VPC 中的一项功能,可以帮助您检查 亚马逊云科技 上源资源和目标资源之间的网络可访问性。当可以到达目的地时,可访问性分析器会生成源和目标之间虚拟网络路径的逐跳详细信息。当无法到达目的地时,可访问性分析器会识别阻塞或缺失的配置。

解决方案概述

以下是解决 RDS 实例连接问题的高级步骤:

  1. 查找与 RDS 数据库终端节点(实例、集群或只读终端节点)关联的 IP 地址。
  2. 找到与 RDS 数据库终端节点(实例、集群或只读终端节点)的 IP 地址关联的 ENI。
  3. 使用可访问性分析器在源资源(例如,与 RDS 数据库终端节点关联的 ENI)和目标资源(例如,EC2 实例)之间创建 “网络路径”。
  4. 运行网络路径分析并查看结果以了解网络可达性或排除网络可达性故障。

先决条件

在本练习中,我们使用 nslookup 实用程序来识别您的 RDS 数据库的 IP 地址,因此您必须在工作站或 EC2 等堡垒主机中安装 nslookup 实用程序。此外,请确保您拥有所使用的 IAM 用户或 IAM 角色的 VPC 可访问性分析器 所需的 身份和访问管理 (IAM) 权限

步骤 1:查找与 RDS 数据库关联的 IP 地址

通过提供 RDS 数据库终端节点,使用 Linux nslookup 实用程序查找与 RDS 数据库终端节点(实例、集群或只读端点)关联的 IP 地址。你可以从任何基于 Linux 的工作站上运行 nslookup 命令。

要找到您的 RDS 数据库终端节点,请参阅 查找 Amazon RDS 数据库实例的连接信息 。您可以看到数据库详细信息页面中列出的端点名称,如以下屏幕截图所示。

您可以使用以下命令来查找 IP 地址:

nslookup <RDS endpoint>

以下是示例输出:

nslookup db-instance-1.xxxxuuuu.us-zzzz-1.rds.amazonaws.com

Server: aaa.bb.ccc.dd
Address: aaa.bb.ccc.dd#nn

Non-authoritative answer:
db-instance-1.xxxxuuuu.us-zzzz-1.rds.amazonaws.comcanonical name = ec2-xx-yy-zz-nnn.
compute-1.amazonaws.com.
Name: ec2-xx-yy-zz-nnn.compute-1.amazonaws.com.
Address: xx.yy.zz.nnn

步骤 2:找到与 RDS 数据库实例关联的 ENI。

您可以使用 亚马逊云科技 管理控制台 找到 ENI 。在 亚马逊弹性计算云 (Amazon EC2) 控制台上, 在导航窗格中选择 网络接口,然后搜索您在上一步中获得的 IP 地址。记下与您的 RDS 数据库的 IP 地址关联的 ENI ID。

步骤 3:在可访问性分析器中指定源和目的地

可访问性分析器允许您指定各种 源和目标资源,在这些资源 之间可以分析网络的可访问性。要指定您的源资源和目标资源,请导航到 Amazon VPC 控制台,然后 在导航 窗格中选择可访问性分析器。然后 在可访问性分析器控制台中选择 创建和分析路径

提供源和目标详细信息并选择 创建和分析路径 。在此示例中,我正在检查私有子网中的 RDS 实例与同一 VPC 内公有子网中的 Amazon EC2 实例之间的可访问性。要将 RDS 数据库指定为源或目标,我选择源类型作为 “网络接口”,然后输入根据上述步骤 2 确定的 ENI ID。另外,请确保 “目标端口” 是您的数据库端口。

步骤 4:查看分析任务的结果

要在 Amazon VPC 控制台上查看您的成功网络连接,请在导航 窗格中选择可访问性分析器 。选择路径 ID 并选择正确的分析 ID。

以下屏幕截图显示了 分析浏览器 页面。

如果出现故障,可访问性分析器会识别阻塞组件。您可以详细了解连接故障的原因,这样可以更快地进行故障排除和解决问题。以下屏幕截图显示了流程中的连接故障。

您也可以使用以下脚本以自动方式运行此分析。您必须在调用此脚本的主机上 安装 和配置 AW S 命令行接口 (亚马逊云科技 CLI) v2。

#!/bin/bash

#-----------------------------------------------------------------------------------------

show_usage() {

  echo ""

  echo "Script Usage : $0 RDS_END_POINT DEST_RES_ID [DEST_PORT]"

  echo ""

  echo "     RDS_END_POINT : Fully qualified endpoint of the RDS Database (Cluster/Instance)"

  echo "     DEST_RES_ID   : AWS Resource ID of the Destination Resource (NAT, IGW, TGW, VPCE etc.) "

  echo "     DEST_PORT     : [Optional] Port of the Detination resource"

  echo ""

  echo "script execution failed argument(S) missing"

  echo ""

  exit 1

}

#------------------------------- Send Mail  ----------------------------------------------

# Input validation

if [ $# -eq 2 ]; then

   RDS_EP=$1

   DEST_ID=$2

elif [ $# -eq 3 ]; then

   RDS_EP=$1

   DEST_ID=$2

   DEST_PORT=$3

else

   show_usage

fi

# Get IP of RDS DB Instance using nslookup

DB_HOST_IP=$(nslookup ${RDS_EP} | tail -2 | head -1 | cut -d':' -f 2 | sed 's/ //g')

echo -e "Source IP adderss : ${DB_HOST_IP}"

# Get RDS DB Instance ENI

DB_HOST_ENI=`aws ec2 describe-network-interfaces --filters Name=private-ip-address,Values=${DB_HOST_IP} --query 'NetworkInterfaces[*].[NetworkInterfaceId]' --no-cli-pager --output text`

if [ $? -ne 0 ]; then

  echo -e "Error in fetching ENI details"

  exit 1

else

  echo -e "Source ENI : ${DB_HOST_ENI}"

fi

# Create network insights analysis path

if [ $# -eq 3 ]; then

   NI_PATH_ID=`aws ec2 create-network-insights-path --source ${DB_HOST_ENI} --destination ${DEST_ID} --destination-port ${DEST_PORT} --protocol TCP --query 'NetworkInsightsPath.NetworkInsightsPathId' --no-cli-pager --output text`

else

   NI_PATH_ID=`aws ec2 create-network-insights-path --source ${DB_HOST_ENI} --destination ${DEST_ID} --protocol TCP --query 'NetworkInsightsPath.NetworkInsightsPathId' --no-cli-pager --output text`

fi

echo -e "Network Insights Path ID : ${NI_PATH_ID}"

# Start network insights analysis

NIA_ID=`aws ec2 start-network-insights-analysis --network-insights-path-id ${NI_PATH_ID} --query 'NetworkInsightsAnalysis.NetworkInsightsAnalysisId' --no-cli-pager --output text`

echo -e "Network Insights Analysis ID : ${NIA_ID}"

# Validate Result

STATUS=""

while [ "${STATUS}" == "" ]; do

  echo -e "Analysis in progress, wiating for 10 sec... "

  sleep 10

  STATUS=`aws ec2 describe-network-insights-analyses --network-insights-analysis-ids ${NIA_ID} --query 'NetworkInsightsAnalyses[].NetworkPathFound' --no-cli-pager --output text`

done

echo -e "Network Insights Analysis Status : ${STATUS}"

if [ "${STATUS}" == "True" ]; then

# Success

   echo -e "\nFound path to the destination"

   echo -e "\nForward Path :\n"

   aws ec2 describe-network-insights-analyses --network-insights-analysis-ids ${NIA_ID} \

   --query '[ NetworkInsightsAnalyses[*].ForwardPathComponents[*].SequenceNumber, NetworkInsightsAnalyses[*].ForwardPathComponents[*].Component[].Id ]' \

   --no-cli-pager --output table

   echo -e "\nReturn Path :\n"

   aws ec2 describe-network-insights-analyses --network-insights-analysis-ids ${NIA_ID} \

   --query '[ NetworkInsightsAnalyses[*].ReturnPathComponents[*].SequenceNumber, NetworkInsightsAnalyses[*].ReturnPathComponents[*].Component[].Id ]' \

   --no-cli-pager --output table

else

# Failure

   echo -e "\nNo Path Found to the destination"

   echo -e "\nDetails :\n"

   aws ec2 describe-network-insights-analyses --network-insights-analysis-ids ${NIA_ID} \

   --query 'NetworkInsightsAnalyses[*].Explanations[*]' --no-cli-pager --output table

fi<

结论

RDS 数据库的连接取决于多种网络资源,例如 VPC 安全组、路由表和网关。如果出现连接问题,手动检查所有这些资源可能既困难又耗时。VPC 可访问性分析器可以帮助您:

  • 了解 VPC 中网络可访问性以及 VPC 中源资源和目标资源之间的网络路径
  • 解决由您的 VPC 中 RDS/Aurora 数据库等资源和 EC2 实例等计算资源之间的网络配置错误导致的网络可访问性问题

如果您对这篇文章有任何疑问或建议,请发表评论。


作者简介

Baji Shaik 是 A WS ProServe、GCC AMER 的高级数据库顾问。他的背景涵盖了 SQL/NoSQL 数据库技术方面的广泛专业知识和经验。他是一名数据库迁移专家,开发了许多成功的数据库解决方案,解决了将数据库从本地迁移到 Amazon RDS 和 Aurora PostgreSQL/MySQL 时面临的挑战性业务需求。他是一位杰出的作家,曾写过几本关于 PostgreSQL 的书。 他最近的一些作品包括 PostgreSQL 配置 、《云端入门 PostgreSQL 》 和 《PostgreSQL 开发要 点》 此外,他还举办了几次会议和研讨会。

苏迪普·阿查里亚 是印度 亚马逊云科技 ProServe 团队的高级顾问。他与亚马逊内部和外部客户合作,为数据库项目提供指导和技术援助,帮助他们在使用 亚马逊云科技 时提高解决方案的价值。