Mysql

從同一 VPC 上的 EC2 連接到 RDS

  • February 3, 2017

我有一個在沒有 NAT 的子網上執行的 RDS 實例,以及在另一個配置了 Internet 網關的子網上執行的 EC2 實例,兩者都位於同一個 VPC 中。我已將 RDS 實例配置為不可公開訪問。

我在遠端 EC2(在第二個子網上執行)中使用以下命令連接到 RDS 實例:

mysql -h xxxx.eu-central-1.rds.amazonaws.com -P 3306 -u root -p

我輸入了配置 RDS 時設置的正確密碼,但出現以下錯誤:

錯誤 2003 (HY000):無法連接到“XXX.eu-central-1.rds.amazonaws.com”上的 MySQL 伺服器 (110)

我已經檢查過了,這不是名稱解析問題。ec2 將端點轉換為正確的內部 ip。


這是我的設置:

RDS

VPC : 與 EC2 相同

可用區eu-central-1b

SUBNET:在 RDS 面板中,我可以看到所有子網,但我可以看到區域 b 的私有子網中的可用 ip 少一個

SECURITY GROUP:私有安全組(無出站規則,入站單條規則,以mysql埠和公共安全組為源)

可公開訪問:否

多可用區:沒有

EC2

VPC:與 RDS 相同

可用區eu-central-1b

SUBNET : 區域 b 的公共子網

SECURITY GROUP:公共安全組(任意來源的所有埠為入站規則,任意來源的ssh、http、https埠為出站規則)

我可以使用 http 和 ssh 訪問 EC2 實例。它按預期工作。

專有網路

VPC:RDS 和 EC2 使用相同

SUBNETS : 每個 AZ 一個公有一個私有,總共 4 個

DHCP : 預設 ( domain-name = eu-central-1.compute.internal domain-name-servers = AmazonProvidedDNS)

路由表:對於公共子網,路由到local(自動)和網際網路度假,對於私有,只有local(自動)

ACL:公共:allow all入站和出站。私人:allow all僅在入站。在入站和出站的兩個 ACL 上,還有一條帶有 id 的行*deny all但我很確定它應該在那裡,我無法刪除它。

我究竟做錯了什麼?我錯過了什麼嗎?

檢查您的安全組,這可能是罪魁禍首。VPC 內使用 DNS 名稱的主機將始終使用遠端資源的私有 IP,因此 NAT / IG 部分並不重要。

您需要確保您的 VPC/EC2 安全組和 NACL 允許適當的訪問。

我有一個涵蓋 EC2/RDS 安全組設置的教程,您可能會發現它很有用。

您還應該在 SO 上查看此答案

引用自:https://serverfault.com/questions/830239