-1

我在 AWS EC2 上安装了 Windows 服务器,在 AWS RDS 上安装了 MS SQL 服务器。

我在 AWS EC2 上配置了 IIS,并在上面部署了我的应用程序。产品是我无法将我的应用程序连接到 AWS RDS 上的 MS SQL Server。

我的连接字符串

<add name="DefaultConnection" connectionString="Data Source=welocate-instance.*************.rds.amazonaws.com,1433;Initial Catalog=MyDB;persist security info=True;user id=sa;password=********" providerName="System.Data.SqlClient" />

我有以下错误

The network path was not found 建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问......

4

1 回答 1

0

如果您添加了更多详细信息,例如(相同/不同 VPC 中的两个服务器、安全组入站和出站规则、网络 ACL),那么我可以以更好的方式为您提供帮助。

Amazon RDS 支持以下场景来访问 VPC 中的数据库实例:

VPC 中访问的数据库实例 同一 VPC 中的 EC2 实例 不同 VPC 中的 EC2 实例 不在 VPC 中的 EC2 实例 通过 Internet 的客户端应用程序 不在 VPC 中 VPC 中的 EC2 实例 不在 VPC 中的 EC2 实例VPC 通过 Internet 的客户端应用程序 VPC 中的数据库实例由同一 VPC 中的 EC2 实例访问

VPC 中 RDS 实例的常见用途是与在同一 VPC 中的 EC2 实例中运行的应用程序服务器共享数据。这是您使用 AWS Elastic Beanstalk 在同一 VPC 中创建 EC2 实例和数据库实例时创建的用户场景。

下图显示了这种情况。

                VPC and EC2 security group Scenario

管理同一 VPC 中 EC2 实例和数据库实例之间的访问的最简单方法是执行以下操作:

创建您的数据库实例所在的 VPC 安全组。此安全组可用于限制对数据库实例的访问。例如,您可以为此安全组创建一个自定义规则,允许 TCP 访问使用您在创建数据库实例时分配给它的端口以及您将用于访问数据库实例以进行开发或其他目的的 IP 地址。创建您的 EC2 实例(Web 服务器和客户端)所在的 VPC 安全组。如果需要,此安全组可以允许通过 VPC 的路由表从 Internet 访问 EC2 实例。例如,您可以在此安全组上设置规则以允许 TCP 通过端口 22 访问 EC2 实例。在安全组中为您的数据库实例创建自定义规则,以允许来自您为 EC2 实例创建的安全组的连接。这将允许安全组的任何成员访问数据库实例。有关向您展示如何为此场景创建具有公有子网和私有子网的 VPC 的教程,请参阅教程:创建用于 Amazon RDS 数据库实例的 Amazon VPC。

要在 VPC 安全组中创建允许来自另一个安全组的连接的规则,请执行以下操作:

登录 AWS 管理控制台并在https://console.aws.amazon.com/vpc打开 Amazon VPC 控制台。

在导航窗格中,选择安全组。

选择或创建要允许访问另一个安全组的成员的安全组。在上述场景中,这将是您将用于数据库实例的安全组。选择添加规则。

从类型中,选择所有 ICMP。在 Source 框中,开始输入安全组的 ID;这为您提供了安全组列表。选择具有您希望访问受此安全组保护的资源的成员的安全组。在上述场景中,这将是您将用于 EC2 实例的安全组。

对 TCP 协议重复这些步骤,方法是创建一个规则,其中所有 TCP 作为类型,并在源框中创建您的安全组。如果您打算使用 UDP 协议,请创建一个规则,其中所有 UDP 作为类型,您的安全组在源框中。

创建一个自定义 TCP 规则,允许通过您在创建数据库实例时使用的端口进行访问,例如 MySQL 的端口 3306。在源框中输入您将使用的安全组或 IP 地址。

完成后选择保存。

                adding a security group to another security group's rules

VPC 中的数据库实例被不同 VPC 中的 EC2 实例访问

当您的数据库实例与您用来访问它的 EC2 实例位于不同的 VPC 中时,可以通过多种方式访问​​数据库实例。如果数据库实例和 EC2 实例在不同的 VPC 但在同一个区域,您可以使用 VPC 对等互连。如果数据库实例和 EC2 实例在不同的地域,您必须使用数据库实例的公网 IP 才能访问它。

下图显示了这种情况。

            A DB Instance in a VPC Accessed by an EC2 Instance in a Different VPC

VPC 对等连接是两个 VPC 之间的网络连接,使您能够使用私有 IP 地址在它们之间路由流量。任一 VPC 中的实例都可以相互通信,就好像它们在同一个网络中一样。您可以在自己的 VPC 之间创建 VPC 对等连接,也可以与单个区域内另一个 AWS 账户中的 VPC 创建 VPC 对等连接。要了解有关 VPC 对等互连的更多信息,请参阅 VPC 文档。

当您需要连接到与 EC2 实例不同的 VPC 和区域中的数据库实例时,请使用数据库实例的公共 IP。数据库实例必须允许公共访问,必须位于公共子网中,并且子网必须具有 Internet 网关。当您在创建数据库实例时将 VPC 选项设置为 Create new VPC 并将 Publicly Accessible 选项设置为 Yes 时,Amazon RDS 会自动为您的数据库实例创建一个公有子网。

VPC 中的数据库实例由不在 VPC 中的 EC2 实例访问

您可以使用 ClassicLink 在 VPC 中的 Amazon RDS 数据库实例和不在 Amazon VPC 中的 EC2 实例之间进行通信。当您使用 Classic Link 时,EC2 实例上的应用程序可以使用数据库实例的 RDS 终端节点连接到数据库实例。ClassicLink 可免费使用。

下图显示了这种情况。

                A DB Instance in a VPC Accessed by an EC2 Instance Not in a VPC

使用 ClassicLink,您可以将 EC2 实例连接到逻辑隔离的数据库,您可以在其中定义 IP 地址范围并控制访问控制列表 (ACL) 以管理网络流量。您不必使用公共 IP 地址或隧道与 VPC 中的数据库实例进行通信。这种安排为实例间通信提供了更高的吞吐量和更低的延迟连接。

注意 数据库实例必须位于不向公众开放的私有子网中(即不能设置为可公开访问)。在 VPC 中的数据库实例和不在 VPC 中的 EC2 实例之间启用 ClassicLink

登录 AWS 管理控制台并在https://console.aws.amazon.com/vpc打开 Amazon VPC 控制台。

在导航窗格中,选择您的 VPC。

对于 VPC,选择数据库实例使用的 VPC。

对于操作菜单,选择启用 ClassicLink。在确认对话框中,选择是,启用。

在 EC2 控制台上,选择要连接到 VPC 中的数据库实例的 EC2 实例。

对于操作菜单,选择 ClassicLink,然后选择链接到 VPC。

在 Link to VPC 页面上,选择要使用的安全组,然后选择 Link to VPC。

客户端应用通过 Internet 访问 VPC 中的数据库实例

要通过 Internet 从客户端应用程序访问 VPC 中的数据库实例,您需要为 VPC 配置一个公有子网和一个 Internet 网关以启用 Internet 通信。

下图显示了这种情况。

                A DB Instance in a VPC Accessed by a Client Application Through the Internet

我们推荐以下配置:

大小为 /16 的 VPC(例如 CIDR:10.0.0.0/16)。此大小提供 65,536 个私有 IP 地址。大小为 /24 的子网(例如 CIDR:10.0.0.0/24)。此大小提供 256 个私有 IP 地址。将 VPC 连接到 Internet 和其他 AWS 产品的 Internet 网关。具有子网范围内的私有 IP 地址(例如:10.0.0.6)的实例,使该实例能够与 VPC 中的其他实例通信,以及一个弹性 IP 地址(例如:198.51.100.2),它可以使要从 Internet 访问的实例。使子网中的实例能够与 VPC 中的其他实例通信的路由表条目,以及使子网中的实例能够直接通过 Internet 通信的路由表条目。有关更多信息,请参阅 VPC 文档中的场景 1。

不在 VPC 中的数据库实例被 VPC 中的 EC2 实例访问

如果您有一个 VPC 中的 EC2 实例和一个不在 VPC 中的 RDS 数据库实例,您可以通过公共 Internet 连接它们。

下图显示了这种情况。

                A DB Instance not in a VPC Accessed by an EC2 Instance in a VPC

注意 ClassicLink,如 VPC 中的数据库实例由不在 VPC 中的 EC2 实例访问中所述,不适用于此场景。要通过公共 Internet 连接您的数据库实例和 EC2 实例,请执行以下操作:

确保 EC2 实例位于 VPC 的公有子网中。确保将 RDS 数据库实例标记为可公开访问。关于网络 ACL 的说明在这里。网络 ACL 就像整个子网的防火墙。因此,该子网中的所有实例都受网络 ACL 规则的约束。默认情况下,网络 ACL 允许所有流量,您通常无需担心它们,除非您特别想添加规则作为额外的安全层。另一方面,安全组与单个实例相关联,您确实需要担心安全组规则。将必要的入口规则添加到 RDS 数据库实例的数据库安全组。入口规则指定网络端口和 CIDR/IP 范围。例如,您可以添加允许端口 3306 连接到 MySQL RDS 数据库实例的入口规则,和 203.0.113.25/32 的 CIDR/IP 范围。有关更多信息,请参阅从 IP 范围授权对数据库安全组的网络访问。Note 如果您有兴趣将现有数据库实例移入 VPC,您可以使用 AWS 管理控制台轻松完成。了解更多信息。请参阅将不在 VPC 中的数据库实例移入 VPC。不在 VPC 中的数据库实例由不在 VPC 中的 EC2 实例访问

当您的数据库实例和 EC2 实例上的应用程序均不在 VPC 中时,您可以使用其终端节点和端口访问数据库实例。

下图显示了这种情况。

                A DB Instance Not in a VPC Accessed by an EC2 Instance Not in a VPC

您必须为实例创建一个数据库安全组,允许从您在创建实例时指定的端口进行访问。例如,您可以使用与用于 sqlplus 的连接字符串类似的连接字符串来访问 Oracle 数据库实例:

复制 PROMPT>sqlplus 'mydbusr@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=) (PORT=))(CONNECT_DATA=(SID=)))' 有关详细信息,请参阅以下文档。

数据库引擎相关文档 Amazon Aurora 连接到 Amazon Aurora 数据库集群 MariaDB 连接到运行 MariaDB 数据库引擎的数据库实例 Microsoft SQL Server 连接到运行 Microsoft SQL Server 数据库引擎的数据库实例 MySQL 连接到运行 MySQL 数据库引擎的数据库实例Oracle 连接到运行 Oracle 数据库引擎的数据库实例 PostgreSQL 连接到运行 PostgreSQL 数据库引擎的数据库实例 注意 如果您有兴趣将现有数据库实例移动到 VPC,可以使用 AWS 管理控制台轻松完成。了解更多信息。请参阅将不在 VPC 中的数据库实例移入 VPC。客户端应用通过 Internet 访问的不在 VPC 中的数据库实例

新的 Amazon RDS 客户只能在 VPC 中创建数据库实例。但是,您可能需要通过 Internet 从客户端应用程序连接到不在 VPC 中的现有 Amazon RDS 数据库实例。

下图显示了这种情况。

            A DB Instance not in a VPC Accessed by a Client Application via the Internet

在这种情况下,您必须确保 RDS 数据库实例的数据库安全组包含客户端应用程序连接所需的入口规则。入口规则指定网络端口和 CIDR/IP 范围。例如,您可以添加允许端口 3306 连接到 MySQL RDS 数据库实例的入口规则,以及 203.0.113.25/32 的 CIDR/IP 范围。有关更多信息,请参阅从 IP 范围授权对数据库安全组的网络访问。

警告 如果您打算访问防火墙后的数据库实例,请与您的网络管理员联系以确定您应该使用的 IP 地址。

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html查看各种场景的详细信息。

Note 如果您有兴趣将现有数据库实例移入 VPC,您可以使用 AWS 管理控制台轻松完成。了解更多信息。请参阅将不在 VPC 中的数据库实例移入 VPC。

于 2017-10-04T16:52:45.170 回答