Я создал свой экземпляр RDS до создания среды Elastic Beanstalk. Эти двое работают вместе без проблем, но я бы хотел, чтобы они были связаны вместе и чтобы параметры RDS были доступны через RDS_*
переменные среды.
На странице конфигурации Elastic Beanstalk говорится:
Хотя первая ссылка создает экземпляр RDS на месте и связывает его с текущей средой, вторая ссылка просто перенаправляет на эту страницу документации., который, к сожалению, объясняет только, как создать новый экземпляр RDS, но не как связать существующий.
Как я могу связать существующий экземпляр RDS с моей средой Elastic Beanstalk?
«Выбранный» ответ правильный, но я хотел бы добавить дополнительную информацию, так как у большинства людей, использующих EB и RDS вместе, должны быть те же требования, даже если они еще этого не знают.
Первый вопрос: Почему вы хотите, чтобы экземпляр RDS существовал вне среды EB? Ответ: Чтобы время жизни экземпляра RDS не было привязано к времени жизни среды EB. т.е. когда вы удаляете среду, вы не хотите уничтожать ею БД. Есть очень мало причин, по которым вы действительно хотите привязать свой экземпляр RDS к своей среде.
Проблема с настройкой RDS независимо от EB заключается в том, что вы не получаете автоматическое заполнение переменных RDS_ * и, следовательно, вам нужно получать их значения и заполнять их самостоятельно через веб-консоль или .ebextensions. Однако не рекомендуется добавлять учетные данные в код, так как это может быть дырой в безопасности.
Но тогда следующая проблема заключается в том, что если вы хотите программно создавать среды (например, для сине-зеленых развертываний с нулевым временем простоя), вам нужно решение, как каждый раз заполнять конфиденциальные значения RDS (например, пароль). К сожалению, это требует, чтобы вы опустились ниже в стеке AWS и использовали шаблон CloudFormation.
Идеальным решением является усовершенствование EB, так что ссылка «использовать существующую базу данных», упомянутая в вопросе, фактически позволяет вам вручную связать существующую базу данных RDS, а затем автоматически заполнить переменные среды RDS_ *, а не перенаправлять вас к бесполезной документации . AWS Support заявила, что это было подано как запрос функции, но, конечно, не указаны сроки.
Ответ от Поддержка AWS:
Чтобы связать существующую базу данных со средой EB, вы должны сделать ее снимок через консоль управления, а затем выбрать «создать новую базу данных RDS» на уровне данных. Похоже, что нет способа связать работающий экземпляр RDS с существующей средой EB без запуска нового из моментального снимка из-за того, как экземпляр RDS привязан к базовому стеку Cloudformation среды Beanstalk. Если вы сделаете снимок текущего экземпляра RDS, вы можете запустить его заново в EB, если хотите.
Если вы хотите, чтобы экземпляр RDS существовал вне среды, вы можете просто указать параметры подключения как переменные среды через консоль EB: Configuration -> Web Layer -> Software Configuration. Тогда ты можешь прочитать переменную окружения через PHP.
Мне это было нужно недавно, и я также хотел автоматизировать шаги с помощью AWS CLI / EB CLI. В любом случае, вот основные шаги, которые я выполнил (при условии, что вы уже создали экземпляр RDS):
aws ec2 create-security-group
(AWS CLI) для этого и свяжите его с экземпляром RDS, используя aws rds modify-db-instance
(AWS CLI).eb init
(EB CLI) для этого).aws rds describe-db-instances
для этого.RDS_*
переменные среды в экземпляре EB при создании среды (или развертывании среды позже). Вы можете сделать это с помощью eb create
/eb deploy
(EB CLI). При первоначальном создании среды она будет ухудшена, поскольку группы безопасности для доступа к базе данных RDS не настроены должным образом.aws elasticbeanstalk describe-configuration-settings
(AWS CLI) для этого.aws ec2 authorize-security-group-ingress
(AWS CLI), который использует группы безопасности VPC (а не группы безопасности БД). Вероятно, вы сможете добиться того же с группами безопасности БД, если они поддерживаются в вашем регионе. При настройке правила входящего трафика убедитесь, что вы используете правильный протокол и порт для ядра базы данных.aws rds modify-db-instance
(AWS CLI)).eb deploy
(EB CLI)). Мне пришлось выполнить повторное развертывание, поскольку я запускаю миграции при развертывании.Это в основном это. Теперь у вас должна быть возможность увеличивать / уменьшать свои экземпляры RDS, не заботясь об экземплярах EB, если вы сохраняете одинаковое имя хоста и учетные данные БД. Вы также можете выполнять сине-зеленые развертывания с этим подходом (но вам может потребоваться выполнить некоторые дополнительные шаги, чтобы также отменить доступ к группе безопасности).
Самый простой способ добавить существующую группу безопасности в экземпляры 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) Перейдите в экземпляр EC2 и обратите внимание на свой пример группы безопасности «sg-121212121212».
2) GO to RDS Security Group ad = nd входящий трафик
3) Отредактируйте правило, выберите весь трафик и добавьте новую группу безопасности ebs "sg-121212121212"
Надеюсь, это поможет
создать RDS под Elastic; добавит новую правильную группу безопасности; изменить группу безопасности старой существующей RDS; установите правильную строку подключения в веб-конфигурации, и все будет работать ...