Назад | Перейти на главную страницу

Разрешения для EC2, созданные Elastic Beanstalk, подключающимся к внешнему RDS

Я новичок в Elastic Beanstalk и не очень разбираюсь в администрировании серверов, но мне нужно настроить проект Django на Elastic Beanstalk для подключения к внешней базе данных 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)

Если я войду на сервер EC2 через SSH

eb ssh

а затем проверьте открытые порты с помощью

netstat -lntu

Я не вижу там порта 3306 MySQL, поэтому я предполагаю, что он заблокирован брандмауэром.

Вот что я пробовал в отношении разрешений:

  1. Я перешел в панель управления RDS -> Группы безопасности и создал myapp-mysql-security-group с типом подключения группы безопасности EC2, указывающим на группу безопасности EC2, используемую экземпляром Elastic Beanstalk EC2 «awseb-e -...».
  2. Я перешел в EC2 -> Security Groups и для «awseb-e -...» я установил входящий порт MySQL с источником 0.0.0.0/0
  3. Я перешел на панель управления VPC -> Группы безопасности и создал myapp-mysql-security-group с правилами для входящих подключений порта MySQL с источником 0.0.0.0/0.

Затем я попытался выполнить повторное развертывание, перезапустить серверы и даже перестроить среду, но ничего не помогло. Порт 3306 MySQL до сих пор не открыт в экземплярах EC2, созданных Elastic Beanstalk.

Что я делаю не так или чего не хватает?

Без использования настраиваемого VPC, самый простой способ добавить существующую группу безопасности в экземпляры EB EC2 - использовать простую конфигурацию, описанную в https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config

Например:

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1

Похоже, в конфигурации было два недостающих пункта:

  1. Мне пришлось воссоздать среду Elastic Beanstalk, чтобы она находилась в том же виртуальном частном облаке (VPC), что и база данных RDS. Это можно сделать:

    eb create myapp-staging --vpc
    

а затем ответить на несколько вопросов, например, что такое идентификатор VPC.

  1. Мне пришлось ввести VPC CIDR (IP) в разрешенные входящие соединения для MySQL для группы безопасности «rds-launch-wizard»:

    a) Перейдите на панель управления VPC -> Ваши VPC и скопируйте VPC CIDR.

    б) Перейдите в панель управления VPC -> Группы безопасности и выберите группу «rds-launch-wizard», затем отредактируйте правила для входящих подключений и добавьте это правило:

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