Amazon-Web-Services
由 Elastic Beanstalk 創建的 EC2 連接到外部 RDS 的權限
我對 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 埠,所以我猜它被防火牆阻止了。
這是我在權限方面嘗試過的:
- 我轉到 RDS Dashboard -> Security Groups 並創建了 myapp-mysql-security-group,其中 EC2 安全組連接類型指向 Elastic Beanstalk EC2 實例“awseb-e-…”使用的 EC2 安全組。
- 我去了 EC2 -> 安全組,對於“awseb-e-…”,我將 Inbound MySQL 埠設置為源 0.0.0.0/0
- 我去了 VPC Dashboard -> Security Groups 並使用源 0.0.0.0/0 的 MySQL 埠的入站規則創建了 myapp-mysql-security-group。
然後我嘗試重新部署,重新啟動伺服器甚至重建環境,但沒有任何幫助。MySQL 埠 3306 在 Elastic Beanstalk 創建的 EC2 實例中仍未打開。
我做錯了什麼或缺少什麼?
配置中似乎有兩個缺失點:
- 我必須重新創建 Elastic Beanstalk 環境,使其位於與 RDS 數據庫相同的虛擬私有云 (VPC) 中。這可以通過以下方式完成:
eb create myapp-staging --vpc
然後回答一些問題,例如 VPC id 是什麼。
- 我必須在“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>