Не удается получить доступ к AWS RDS MySQL + PHP на Heroku

0

Я пытаюсь перенести свое приложение на Heroku, но у меня проблемы с доступом к базе данных через PHP. Я могу получить доступ к базе данных AWS с моей машины локально, но когда я развертываю ее в Heroku, она терпит неудачу.

Я следил за указаниями на главной странице: https://devcenter.heroku.com/articles/amazon-rds

И я пробовал другие потоки на SO/AWS:

Получение Mysql2 :: Ошибка (ошибка соединения SSL: ASN: плохое другое подтверждение подписи) в приложении Heroku с AWS RDS

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.SSLSupport

Я также видел инструкции здесь: https://devcenter.heroku.com/articles/getting-started-with-php#provision-a-database

Но я пытаюсь портировать существующее приложение, поэтому мне нужно придерживаться существующего синтаксиса PDO. Я пытаюсь заставить это работать:

$dbInfo = getenv('DATABASE_URL');
try{
    $dbh = new PDO($dbInfo);
    echo json_encode(array('outcome' => true));
}
catch(PDOException $ex){
    echo json_encode(array('outcome' => false, 'message' => 'Unable to connect'));
}

Я правильно настроил настройку среды и могу запустить parse_url для доступа ко всем элементам массива; У меня также есть amazon-rds-ca-cert.pem, находящийся в папке config.

Я могу войти в систему удаленно (через SequelPro) и запустить в диспетчере запросов следующее, чтобы попытаться принудительно выполнить SSL-сертификат:

GRANT USAGE ON *.* TO 'username'@'%' REQUIRE SSL;

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

Теги:
amazon-web-services
ssl
heroku

1 ответ

0
Лучший ответ

Догадаться; необходимо вручную указать сертификат SSL в PDO-соединении. Также были незначительные ошибки в синтаксисе PDO.

try{
  $dbh = new PDO("mysql:host=$pdohost;dbname=$pdodb", $pdouser, $pdopass, array(
    PDO::MYSQL_ATTR_SSL_CA    =>'path/to/combined-cert.pem'
  ));
  echo json_encode(array('outcome' => true));
}
catch(PDOException $ex){
  echo $ex;
  echo json_encode(array('outcome' => false, 'message' => 'Unable to connect'));
}

Также необходимо обязательно обновить входящие правила AWS до 0.0.0.0/0 чтобы разрешить доступ к Heroku.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню