Ошибка истечения времени ожидания соединения в Heroku при подключении к RDS MySQL - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь подключиться к Amazon RDS MySQL от Heroku с помощью CodeIgniter PHP Framework версии 3. Я выполнил все шаги, перечисленные в Документация Heroku об Amazon RDS , но не могу понять, что я делаю неправильно?

Вот мои настройки базы данных CodeIgniter:

$db['rds'] = array(
  'dsn' => '',
  'dbdriver' => 'mysqli',
  'dbprefix' => '',
  'pconnect' => FALSE,
  'db_debug' => (ENVIRONMENT !== 'production'),
  'cache_on' => FALSE,
  'cachedir' => '',
  'char_set' => 'utf8',
  'dbcollat' => 'utf8_general_ci',
  'swap_pre' => '',
  'compress' => FALSE,
  'stricton' => FALSE,
  'failover' => array(),
  'save_queries' => TRUE,
  'port' => 3306,
  'encrypt' => [
    'ssl_ca' => APPPATH."../.config/rds-combined-ca-bundle.pem",
    'ssl_verify' => TRUE
  ]
);
$db['rds']['hostname'] = getenv('RDS_DATABASE_HOSTNAME');
$db['rds']['username'] = getenv('RDS_DATABASE_USERNAME');
$db['rds']['password'] = getenv('RDS_DATABASE_PASSWORD');
$db['rds']['database'] = getenv('RDS_DATABASE_DBNAME');

Но я продолжаю получать эту ошибку:

mysqli::real_connect(): (HY000/2002): Connection timed out /app/vendor/codeigniter/framework/system/database/drivers/mysqli/mysqli_driver.php 201

Вот что я проверил:

  1. Я проверил в группах безопасности RDS и CIDR / IP - есть исходящий 0.0.0.0/0
  2. Я добавил отдельного пользователя MySQL с привилегиями GRANT SELECT, UPDATE, INSERT, DELETE и REQUIRE SSL
  3. Добавлен объединенный файл сертификата в корневой каталог проекта .config/rds-combined-ca-bundle.pem и развернут на Heroku
  4. На локальном компьютере тот же код работает нормально
  5. Попытка перезапуска экземпляра RDS

Куда еще мне обратиться, если какая-то настройка неверна?

1 Ответ

0 голосов
/ 03 октября 2018

Ваш код CodeIgniter должен подключаться к вашей базе данных, а не наоборот.Исходящее правило в вашей группе безопасности RDS не поможет;вам нужно правило входящего (выделено жирным шрифтом):

Вы должны предоставить династии Heroku доступ к вашему экземпляру RDS.Рекомендуемый способ сделать это - настроить экземпляр RDS так, чтобы он принимал только зашифрованные SSL-соединения от авторизованных пользователей, и настроить группу безопасности для вашего экземпляра, чтобы разрешить вход со всех IP-адресов, например, 0.0.0.0/0. * 1009.*

Поскольку это эффективно открывает дыру в брандмауэре для всего Интернета, очень важно следовать остальным инструкциям и принимать зашифрованные соединения только от авторизованных пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...