Ошибка установления соединения с базой данных AWS Elastic Beanstalk с RDS - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь настроить простой сайт Wordpress, используя AWS Elastic Beanstalk с отключенной базой данных RDS (не является частью экземпляра ELB в случае, если я хочу подключить несколько сайтов к БД), примерно следуя этому руководству: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html.

Тем не менее, я получаю следующую ошибку при загрузке установки Wordpress:

Error establishing a database connection

До сих пор я пытался устранить проблему с помощью:

  1. Проверка того, что и RDS, и EC2 находятся в одном и том же VPC с одной и той же группой безопасности, для которой установлены надлежащие правила для входящих вызовов:

EC2 Security Group Inbound Rules RDS Security Group

  1. Я убедился, что RDS доступен следующим образом:
nrb$ nc -zv <***masked-connection-string***> 3306
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif en0
    src 192.168.20.149 port 58825
    dst 3.215.127.182 port 3306
    rank info not available
    TCP aux info available

Connection to <***masked-connection-string***> port 3306 [tcp/mysql] succeeded!
  1. Я проверил, что мой EC2 может подключаться к RDS, подключившись к нему по SSH и используя команду mysql и скопировав / вставив мои переменные env, чтобы убедиться в отсутствии опечаток, как рекомендовано @littleforest, что успешно подключен к базе данных.

  2. Я обновил пример PHP-приложения, поставляемого с AWS, для вывода переменных env, чтобы убедиться, что сервер их читает. Выводят как надо.

Мой файл wp_config.php выглядит как рекомендованный турториалом:

<?php
define('DB_NAME', $_SERVER['RDS_DB_NAME']);
define('DB_USER', $_SERVER['RDS_USERNAME']);
define('DB_PASSWORD', $_SERVER['RDS_PASSWORD']);
define('DB_HOST', $_SERVER['RDS_HOSTNAME'] . ':' . $_SERVER['RDS_PORT']);
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY',         $_SERVER['AUTH_KEY']);
define('SECURE_AUTH_KEY',  $_SERVER['SECURE_AUTH_KEY']);
define('LOGGED_IN_KEY',    $_SERVER['LOGGED_IN_KEY']);
define('NONCE_KEY',        $_SERVER['NONCE_KEY']);
define('AUTH_SALT',        $_SERVER['AUTH_SALT']);
define('SECURE_AUTH_SALT', $_SERVER['SECURE_AUTH_SALT']);
define('LOGGED_IN_SALT',   $_SERVER['LOGGED_IN_SALT']);
define('NONCE_SALT',       $_SERVER['NONCE_SALT']);
$table_prefix  = 'wp_';
define('WP_DEBUG', false);
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');

И в программном обеспечении config> моего Elastic Beanstalk я проверил эти переменные:

  • RDS_DB_NAME
  • RDS_HOSTNAME
  • RDS_PASSWORD
  • RDS_PORT
  • RDS_USERNAME

Я знаю, что мне не хватает чего-то глупого, что гуру AWS поймает сразу, но это сводит меня с ума.

1 Ответ

0 голосов
/ 18 мая 2019

Хорошо! После нескольких мигреней и криков на клавиатуре я понял, что происходит.

Так как я смог подключиться к серверу RDS через SSH, я предположил, что проблема должна быть с Wordpress. Конечно же, когда я включил режим DEBUG, Wordpress не смог найти мою базу данных на сервере RDS.

Оказывается, при настройке RDS идентификатор экземпляра БД не является именем БД . Однако даже при указании имени в дополнительных параметрах конфигурации RDS никогда не настраивает эту БД при запуске.

Итак, чтобы решить эту проблему, мне пришлось:

  1. SSH в мой экземпляр EC2 и подключитесь к RDS, используя команду mysql, как предложено @littleforest
  2. Создайте базу данных внутри консоли mysql.

Затем, убедившись, что БД существует в консоли mysql, я смог запустить знаменитую 5-минутную установку Wordpress.

...