Як пов’язати існуючий екземпляр RDS з середовищем Elastic Beanstalk?


22

Я створив свій екземпляр RDS перед тим, як створити середовище Elastic Beanstalk. Вони працюють разом без жодних проблем, але я хотів би, щоб вони були пов'язані між собою і мали параметри RDS, доступні через RDS_*змінні середовища.

На сторінці налаштування Elastic Beanstalk написано:

У вас немає бази даних.  Ви можете створити нову базу даних RDS або використовувати існуючу базу даних.

Хоча перше посилання створює екземпляр RDS на місці та посилає його на поточне середовище, друге посилання просто перенаправляє на цю сторінку документації. , який, на жаль, лише пояснює, як створити новий екземпляр RDS, але не як пов’язати існуючий.

Як я можу пов’язати існуючий екземпляр RDS зі своїм середовищем Elastic Beanstalk?

Відповіді:


24

Відповідь "вибраний" правильна, але я хотів додати додаткову інформацію, оскільки більшість людей, які використовують EB та RDS разом, повинні мати однакові вимоги - навіть якщо вони цього ще не знають.

Перше питання : Чому ви хочете, щоб екземпляр RDS існував поза середовищем EB? Відповідь : Отже, термін служби екземпляра RDS не пов'язаний з терміном експлуатації середовища EB. тобто, коли ви видаляєте середовище, ви не хочете знищувати БД за допомогою нього. Є дуже мало причин, чому ви хочете фактично прив’язати свій екземпляр RDS до свого оточення.

Проблема з налаштуванням RDS незалежно від EB полягає в тому, що ви не отримуєте змінні RDS_ * автоматично заповнюватися, і тому вам потрібно отримати їх значення та заповнити їх самостійно через веб-консоль або .ebextensions. Не рекомендується додавати облікові дані до свого коду, оскільки це може бути отвором у безпеці.

Але наступна проблема полягає в тому, що якщо ви хочете програмно створити середовища (наприклад, для синьо-зеленого нульового простою), то вам потрібно вирішити, як заповнити чутливі значення RDS (наприклад, пароль) кожен раз. На жаль, це вимагає від вас ще більше опустити стек AWS та використовувати шаблон CloudFormation.

Ідеальним рішенням є вдосконалення ЕБ, так що посилання "використовувати наявну базу даних", згадане у питанні, фактично дозволяє вам вручну пов'язати існуючу базу даних RDS і потім автоматично змінити змінні середовища RDS_ *, а не перенаправляти вас на непосильну документацію . Служба підтримки AWS заявила, що це було розглянуто як запит на функцію, але, звичайно, не вказано часових рамок.


через рік, і це все ще здається?
lifeofguenter

1
Все-таки справа, наскільки я знаю.
rgareth

Як ми нарікаємо цей AWS?
matthew

через рік, все одно те саме.
Каран Кумар

Крок для додавання rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/… (лише для повноти для таких людей, як я шукаю) Вони не створюють конфігурацію навколишнього середовища та завантажують її через файл конфігурації під час створення. Це повинно додавати env vars, доки вони не змінюються, це повинно бути нормально?
Мануель

18

Відповідь від підтримки AWS :

Для того, щоб пов’язати існуючу базу даних із середовищем EB, вам слід зробити її короткий знімок через консоль управління, а потім вибрати «створити нову базу даних RDS» під шаром даних. Здається, не існує способу пов'язати запущений екземпляр RDS з існуючим середовищем EB, не запускаючи новий з огляду, завдяки тому, що екземпляр RDS прив'язується до базового стеку Cloudformation середовища середовища Beanstalk. Якщо ви зробите знімок свого поточного екземпляра RDS, ви можете запустити його заново в EB, якщо бажаєте.

Якщо ви хочете, щоб екземпляр RDS існував поза середовищем, ви можете просто надати параметри з'єднання як змінні середовища через консоль EB: Конфігурація -> Веб-шар -> Конфігурація програмного забезпечення. Потім ви можете прочитати змінну середовища через PHP .


Я взяв другий підхід, визначивши змінні середовища з іменами RDS_ *, щоб слідувати конвенції. Групи безпеки налаштовані досить жорстко, але все ще залишається трохи вільно ставити пароль БД у змінну середовища.
Джозеф Шеді

@velotron Те саме для мене, але я звик!
Бенджамін

2

Мені це було потрібно нещодавно, а також я хотів автоматизувати дії за допомогою AWS CLI / EB CLI. У будь-якому випадку, це в основному кроки, які я виконував (якщо ви вже створили екземпляр RDS):

  1. Переконайтеся, що у вас є інша настройка групи безпеки для вашого екземпляра RDS (не група за замовчуванням VPC). Ви можете використовувати для цього aws ec2 create-security-group(AWS CLI) і асоціювати його з екземпляром RDS за допомогою aws rds modify-db-instance(AWS CLI).
  2. Ініціалізуйте свою програму beanstalk (для цього я використовував eb init(EB CLI)).
  3. Прочитайте відповідні дані конфігурації з вашої бази даних RDS (ім'я БД, ім'я хоста, порт тощо). Я aws rds describe-db-instancesдля цього використовував .
  4. Використовуючи ці дані, встановіть RDS_*змінні середовища в екземплярі EB під час створення середовища (або розгортання середовища пізніше). Це можна зробити за допомогою eb create/ eb deploy(EB CLI). Коли ви створюєте середовище спочатку, воно буде погіршуватися, оскільки групи безпеки для доступу до бази даних RDS не налаштовані належним чином.
  5. Отримайте відповідні групи безпеки з конфігурації EB. Вам потрібна група для автоматичного масштабування та для пружного балансира навантаження. Ви можете використовувати для цього aws elasticbeanstalk describe-configuration-settings(AWS CLI).
  6. Авторизуйте свою групу автоматичного масштабування для вхідного трафіку до вашої бази даних для групи безпеки, яку ви створили на кроці 1. Я використовував для цього aws ec2 authorize-security-group-ingress(AWS CLI), який використовує групи безпеки VPC (а не групи безпеки DB). Можливо, ви можете домогтися того ж із групами безпеки БД, якщо вони підтримуються у вашому регіоні. Під час налаштування правила вхідного трафіку переконайтеся, що ви використовуєте правильний протокол та порт для двигуна бази даних.
  7. Додайте групу збалансування еластичного навантаження до груп безпеки вашого екземпляра RDS (знову використовуючи aws rds modify-db-instance(AWS CLI)).
  8. Перезавантажте або перезавантажте програму Elastic Beanstalk (наприклад, використовуючи eb deploy(EB CLI)). Мені довелося зробити перерозподіл, оскільки я провожу міграцію на розгортання.

Це здебільшого це. Тепер ви повинні мати змогу масштабувати / зменшувати ваші екземпляри RDS, не піклуючись про екземпляри EB, якщо ви зберігаєте ім'я хоста та дані DB однакові. Ви також можете робити синьо / зелені розгортання з таким підходом (але, можливо, знадобиться зробити кілька додаткових кроків, щоб також відкликати доступ групи безпеки).


0

Найпростіше додати наявну групу безпеки до екземплярів 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

0

Я зіткнувся з тією ж проблемою і вирішив, виконавши наступні кроки:

1) Перейдіть до екземпляра EC2 і відзначте приклад групи безпеки "sg-121212121212"

2) Перейдіть до RDS Security Group ad = другий вхідний трафік

3) Правилом редагування виберіть увесь трафік та додайте нову групу безпеки ebs "sg-121212121212"

Сподіваюсь, це стане в нагоді


-2

створити RDS під Elastic; це додасть нову правильну групу безпеки; змінити групу безпеки старих існуючих RDS; Встановіть правильний рядок підключення на веб-конфігурації та все працюйте ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.