Amazon-Web-Services

由 Elastic Beanstalk 創建的 EC2 連接到外部 RDS 的權限

  • October 20, 2018

我對 Elastic Beanstalk 還很陌生,對伺服器管理不是很精通,但我需要在 Elastic Beanstalk 上設置一個 Django 項目,連接到外部 RDS MySQL 數據庫。

我已經創建了一個單獨的 RDS MySQL 數據庫,我可以在我的電腦上使用 Sequel Pro 連接到它而不會出現問題。然後我有我的 Django 項目,我嘗試將它放到 Elastic Beanstalk 中,但不幸的是沒有運氣。如果我從我的電腦執行本地 Django 伺服器,則可以瀏覽該項目並且可以訪問 Amazon RDS MySQL。但是,當我跑步時

eb deploy

我明白了

django.db.utils.OperationalError: (2003, "Can't connect to MySQL server
on 'myapp-staging.xxx.eu-west-1.rds.amazonaws.com' (110)")
(ElasticBeanstalk::ExternalInvocationError)

如果我通過 SSH 登錄 EC2 伺服器

eb ssh

然後檢查打開的埠

netstat -lntu

我在那裡看不到 MySQL 的 3306 埠,所以我猜它被防火牆阻止了。

這是我在權限方面嘗試過的:

  1. 我轉到 RDS Dashboard -> Security Groups 並創建了 myapp-mysql-security-group,其中 EC2 安全組連接類型指向 Elastic Beanstalk EC2 實例“awseb-e-…”使用的 EC2 安全組。
  2. 我去了 EC2 -> 安全組,對於“awseb-e-…”,我將 Inbound MySQL 埠設置為源 0.0.0.0/0
  3. 我去了 VPC Dashboard -> Security Groups 並使用源 0.0.0.0/0 的 MySQL 埠的入站規則創建了 myapp-mysql-security-group。

然後我嘗試重新部署,重新啟動伺服器甚至重建環境,但沒有任何幫助。MySQL 埠 3306 在 Elastic Beanstalk 創建的 EC2 實例中仍未打開。

我做錯了什麼或缺少什麼?

配置中似乎有兩個缺失點:

  1. 我必須重新創建 Elastic Beanstalk 環境,使其位於與 RDS 數據庫相同的虛擬私有云 (VPC) 中。這可以通過以下方式完成:
eb create myapp-staging --vpc

然後回答一些問題,例如 VPC id 是什麼。

  1. 我必須在“rds-launch-wizard”安全組的 MySQL 允許的傳入連接中輸入 VPC CIDR (IP):

a) 轉到 VPC 儀表板 -> 您的 VPC 並複制 VPC CIDR。

b) 轉到 VPC Dashboard -> Security Groups 並選擇“rds-launch-wizard”組,然後編輯入站規則並添加此規則:

MySQL/Aurora (3306) | TCP (6) | 3306 | <VPC CIDR here>

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