Amazon RDS (CLI) — восстановление экземпляра из моментального снимка — неправильная группа безопасности (нет разрешений на входящие подключения)

Я готовлю небольшой сценарий bash, который считывает имя последнего снимка для данного экземпляра и создает новый экземпляр из этого снимка. Я использую команду

rds-restore-db-instance-from-db-snapshot snapshot-instance --db-snapshot-identifier rds:snapshot-name --region eu-west-1 --availability-zone eu-west-1a --db-instance-class db.t2.micro --multi-az false

Это работает нормально, экземпляр создается. Но экземпляр имеет неправильные назначения группы безопасности, что препятствует доступу к нему извне (что необходимо для стандартного «сброса» sql-данных).

Исходная группа безопасности (VPC) моментального снимка экземпляра была

default (sg-2bc44xxx) ( active )

но когда новый экземпляр из моментального снимка создается через CLI, он получает следующие назначения:

default:vpc-95c10xxx ( active )
rds-default-vpc-95c10-xxxx (sg-9e45bxxx) ( active )

Вы видите разницу группы безопасности (sg) старой группы безопасности и новой.

Но я не могу изменить это соединение через CLI:

rds-modify-db-instance snapshot-instance --region eu-west-1 -sg sg-2bc44xxx

Результат в

"Malformed input-MalformedInput".

Другая попытка:

rds-modify-db-instance snapshot-instance --region eu-west-1 -a sg-2bc44xxx

который дает

Could not find the resource you requested: DBSecurityGroup not found:  sg-2bc44xxx

Когда я меняю группу через веб-консоль на группу по умолчанию, входящее соединение можно использовать, и я могу без проблем получить mysqldump.

В настоящее время неясно, какую опцию использовать: -a или -sg. Кроме того, неясно, какой правильный идентификатор для групп безопасности (id, имя группы, ...).

Любая помощь или информация будут высоко оценены.

С уважением,

Эрик


person TheNightCoder    schedule 28.08.2015    source источник
comment
чтобы узнать больше о своих группах безопасности, вы можете запустить rds-describe-db-security-groups — похоже, что -a используется для ваших групп безопасности БД, а -sg — для VPC. ты пробовал --vpc-security-group-ids sg-2bc44xxx   -  person Frederic Henri    schedule 28.08.2015
comment
Одна вещь, которую я не понимаю, это почему вновь созданные экземпляры привязаны к группам безопасности для БД и VPC отдельно, тогда как исходные экземпляры имеют только соединение VPC. Результат моих попыток: rds-modify-db-instance snapper-1 --region eu-west-1 --vpc-security-group-ids sg-2bc44xxx => нераспознанный параметр (хотя он задокументирован) rds-modify- db-instance snapper-1 --region eu-west-1 -sg sg-2bc44xxx =› Неверный ввод-MalformedInput ---------- rds-modify-db-instance snapper-1 --region eu- west-1 --db-security-groups по умолчанию => SC не принадлежит VPC vpc-95c10xxx   -  person TheNightCoder    schedule 28.08.2015
comment
Добавьте --db-subnet-group-name ‹имя группы подсети› в командную строку.   -  person riffrazor    schedule 22.07.2017


Ответы (2)


Я столкнулся с аналогичной проблемой, поэтому после восстановления базы данных с помощью моментального снимка я вижу, что назначенная группа безопасности по умолчанию не имеет правил для входящего трафика. Если вы перейдете на домашнюю страницу консоли RDS, вы увидите конфигурацию для поддерживаемых платформ как (EC2, VPC) или просто (VPC), как показано здесь

К сожалению, restore-db-instance-from-db-snapshot не включал ни одну из групп vpc-security. Поэтому после восстановления базы данных мне пришлось изменить ее, используя

aws rds modify-db-instance --db-instance-identifier your-db-identifier --vpc-security-group-ids sg-4xxxxxxx

Это сработало для меня.

person Akash Reddy    schedule 22.08.2017

Я вернулся сюда, чтобы сообщить, что я использовал другое решение. Я использовал AWS SDK для PHP и смог легко получить имя последнего снимка через API. Затем я использовал его для запуска временного экземпляра (который привязан к тем же группам безопасности, группам параметров и т. д., что и исходный экземпляр), опросить этот экземпляр до тех пор, пока он не будет в состоянии «готов», а затем выполнить фактический mysqldump, который затем загружен на S3. После этого я уничтожаю временный экземпляр. Все это делается с помощью PHP-скрипта оболочки и использования официального AWS SDK для PHP.

Скрипт работает нормально без ошибок уже почти 2 года каждый день (размер дампов ~15гб). В любом случае спасибо за ваши ответы, они могут быть полезны для тех, кто сталкивается с этой проблемой. Это очень легко сделать с помощью SDK.

person TheNightCoder    schedule 25.08.2017