2

Google Cloud SQL에서 Postgres에 연결하는 Google App Engine (유연한)에서 작동하는 Python 3 앱이 있습니다. 나는 어떤 시점에서 당신은 내가 어떻게 호스트 이름 /cloudsql/project:us-central1:dbhost 작품을 이해하기 위해 노력하고있어이Google App Engine python + Google Cloud SQL에서 데이터베이스 연결은 어떻게 작동합니까?

postgresql://postgres:[email protected]/dbname?host=/cloudsql/project:us-central1:dbhost 

같은 데이터베이스 지정에 psycopg2을 통해 연결 한 following the docs에 의해 작업을 얻었다. Google은 이것을 "인스턴스 연결 문자열"이라고 부르며 일반 호스트 이름의 역할을하는 것처럼 보입니다. /: 인 경우에만 DNS 확인자의 유효한 이름이 아닙니다.

Google의 유연한 Python 환경이 어떻게 든 특수 호스트 이름을 지원하도록 수정 되었습니까? Python 3 및 psycopg2의 재고가있는 것 같습니다. 그러나 어쨌든 수정되었습니다. 그렇다면 그 변경 사항은 어디서나 문서화되어 있습니까? docs for the Python runtime에는 이에 대한 내용이 없습니다.

+1

Cloud SQL 프록시를 지원하는 UNIX 소켓입니다. https://en.wikipedia.org/wiki/Unix_domain_socket – Vadim

+1

오 그 말이 맞아! 그래서 앱 엔진 머신에는'/ cloudsql/project : us-central1-dbhost'라는 실제 파일 (소켓)이 있습니까? – Nelson

+1

예, SSH를 사용하여 유연한 VM을 확인하고 직접 볼 수 있습니다. – Vadim

답변

2

host=/cloudsql/project:us-central1:dbhost은 파일 시스템의 디렉토리 이름을 지정합니다. 그 디렉토리 안에는 유닉스 도메인 소켓 인 .s.PGSQL.5432이라는 파일이있다. Cloud SQL Proxy의 인스턴스는 해당 Unix 도메인 소켓에서 수신 대기하고 TCP를 통해 실제 데이터베이스 서버로 데이터베이스 요청을 전달합니다. DB 연결 문자열이 host= 임에도 불구하고 실제로는 그 안에 유닉스 소켓이있는 디렉토리의 이름을 지정합니다. 이것은 libpq의 기능으로 Postgres 연결 라이브러리입니다.

내 의견을 신속하게 답변 해 준 덕분에 Vadim에게 감사 드리며, 향후 독자를 위해보다 완벽한 답변을 작성해주십시오.