2017-12-18 4 views
0

응용 프로그램을 Heroku로 이동하려고하는데 PHP를 통해 데이터베이스에 액세스하는 데 문제가 있습니다. 내 컴퓨터에서 AWS 데이터베이스에 로컬로 액세스 할 수 있지만 Heroku에 배포하면 실패합니다.AWS RDS에 액세스 할 수 없습니다. Heroku의 MySQL + PHP

내가 메인 페이지에서 방향을 따랐습니다 : https://devcenter.heroku.com/articles/amazon-rds

을 내가 SO/AWS에 다른 스레드를 시도했다 :

Getting Mysql2::Error (SSL connection error: ASN: bad other signature confirmation) on Heroku App with 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; 

을하지만 의도적으로 인증서 이름을 잘못 입력하면 내 로컬 데이터베이스 수 여전히 연결되어있어 요구 사항이 누락 된 것 같아요.

답변

0

알아 냈어. PDO 연결에서 SSL 인증서를 수동으로 지정하는 데 필요합니다. 또한 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')); 
} 

은 또한 액세스 Heroku가 가능하도록 0.0.0.0/0에 AWS 인바운드 규칙을 업데이트해야 할 필요가 있었다.

관련 문제