如何将我的aws ec2 IIS应用程序连接到我的aws rds sql server?

时间:2017-10-04 13:23:35

标签: sql-server iis amazon-ec2 amazonads

我在AWS RDS上安装了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" />

我有以下错误

找不到网络路径 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问......

1 个答案:

答案 0 :(得分:1)

如果您添加了更多详细信息,例如(服务器位于相同/不同的VPC,安全组入站和OutBound规则,网络ACL),那么我可以更好地帮助您。

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

数据库实例访问者 在VPC中同一VPC中的EC2实例 不同VPC中的EC2实例 不在VPC中的EC2实例 通过Internet的客户端应用程序 不在VPC中VPC中的EC2实例 不在VPC中的EC2实例 通过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实例。例如,您可以在此安全组上设置规则,以允许通过端口22访问EC2实例。 在数据库实例的安全组中创建自定义规则,以允许来自为EC2实例创建的安全组的连接。这将允许安全组的任何成员访问数据库实例。 有关如何使用此方案创建包含公有子网和私有子网的VPC的教程,请参阅教程:创建用于Amazon RDS数据库实例的Amazon VPC。

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

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

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

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

从“类型”中,选择“所有ICMP”。在“源”框中,开始键入安全组的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文档。

当您需要连接到与EC2实例不同的VPC和区域中的数据库实例时,请使用数据库实例的公共IP。数据库实例必须允许公共访问,必须位于公有子网中,并且子网必须具有Internet网关。当您在创建数据库实例时将VPC选项设置为“创建新VPC和公共可访问”选项为“是”时,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实例。

对于Actions菜单,选择ClassicLink,然后选择Link to VPC。

在“链接到VPC”页面上,选择要使用的安全组,然后选择“链接到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地址。 Internet网关,用于将VPC连接到Internet以及其他AWS产品。 子网范围内具有专用IP地址的实例(例如:10.0.0.6),该实例允许实例与VPC中的其他实例进行通信,以及弹性IP地址(例如:198.51.100.2),该实例启用从互联网上传达的实例。 路由表条目,允许子网中的实例与VPC中的其他实例通信,以及路由表条目,使子网中的实例能够直接通过Internet进行通信。 有关更多信息,请参阅VPC文档中的方案1。

VPC中的EC2实例访问的VPC中没有数据库实例

如果您在VPC中有EC2实例且VDS中没有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数据库实例的入口规则,以及CIDR / IP范围203.0.113.25/32。有关更多信息,请参阅从IP范围授予对数据库安全组的网络访问权限。 注意 如果您对将现有数据库实例移动到VPC感兴趣,可以使用AWS管理控制台轻松完成。欲获得更多信息。请参阅将不在VPC中的数据库实例移动到VPC中。 不在VPC中的VPC访问的数据库实例不在VPC中

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

下图显示了这种情况。

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

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

复制 PROMPT&gt; sqlplus&#39; mydbusr @(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST =)     (PORT =))(CONNECT_DATA =(SID =)))&#39; 有关更多信息,请参阅以下文档。

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

New 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数据库实例的入口规则,以及CIDR / IP范围203.0.113.25/32。有关更多信息,请参阅从IP范围授予对数据库安全组的网络访问权限。

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

检查http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html的详细信息以了解各种情况。

请注意 如果您对将现有数据库实例移动到VPC感兴趣,可以使用AWS管理控制台轻松完成。欲获得更多信息。请参阅将不在VPC中的数据库实例移动到VPC中。