개요
이 페이지에서는 쓰기 엔드포인트를 사용하여 가상 프라이빗 클라우드 (VPC) 네트워크의 클라이언트에서 비공개 서비스 액세스 (PSA)를 사용하여 Cloud SQL 인스턴스에 연결하는 방법을 보여줍니다.
쓰기 엔드포인트는 현재 기본 인스턴스의 IP 주소로 자동 확인되는 전역 도메인 이름 서비스(DNS) 이름입니다. 복제본 장애 조치 또는 전환 작업의 경우 이 쓰기 엔드포인트는 들어오는 연결을 새 기본 인스턴스로 자동으로 리디렉션합니다. IP 주소 대신 SQL 연결 문자열에서 Cloud SQL 인스턴스의 쓰기 엔드포인트를 사용할 수 있습니다. 쓰기 엔드포인트를 사용하면 리전 서비스 중단 복구 또는 재해 복구 드릴을 위해 복제본 장애 조치 또는 전환 작업을 실행할 때 애플리케이션 연결을 변경하지 않아도 됩니다.
요건을 충족하는 각 Cloud SQL 인스턴스에는 Cloud SQL에서 이름, 생성, 업데이트를 관리하는 단일 내장 쓰기 엔드포인트가 있습니다. 다음 예는 형식을 보여줍니다.
103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
쓰기 엔드포인트는 항상 .global.sql-psa.goog.
접미사로 끝납니다.
Cloud SQL에서 관리하는 이 쓰기 엔드포인트의 이름이나 형식은 수정할 수 없습니다.
삽입, 업데이트, 삭제, DDL 변경 등 기본 인스턴스의 모든 쓰기 작업에 쓰기 엔드포인트를 사용할 수 있습니다. 쿼리와 같은 읽기 작업에 쓰기 엔드포인트를 사용할 수도 있습니다. 복제본 인스턴스를 새 기본 인스턴스로 승격하기 위해 복제본 장애 조치 또는 전환 작업을 수행하면 쓰기 엔드포인트가 가리키는 비공개 IP 주소가 Cloud SQL에 의해 자동으로 변경됩니다.
쓰기 엔드포인트 생성
새 Cloud SQL 인스턴스를 만드는 경우 다음 필수 요건이 충족되면 Cloud SQL에서 쓰기 엔드포인트를 자동으로 만듭니다.
- Cloud SQL 인스턴스가 있는 Google Cloud 프로젝트에서 다음 API가 사용 설정되어 있어야 합니다.
프로젝트에서 Cloud DNS API를 사용 설정하지 않으면 피어링 DNS 영역을 만들 수 없게 되어 DNS 이름을 사용할 수 없게 됩니다.
피어링 DNS 영역이 생성되면 어떤 방식으로든 수정하지 않는 것이 중요합니다. 삭제를 포함한 수정사항이 있으면 데이터베이스 연결에 DNS를 사용할 수 없게 됩니다.
- Cloud SQL 인스턴스는 Cloud SQL Enterprise Plus 버전이어야 합니다.
- Cloud SQL 인스턴스가 비공개 서비스 액세스 (PSA)가 사용 설정된 비공개 IP를 사용하도록 구성되어 있어야 합니다.
- 이 기능을 사용하려면 새 네트워크 아키텍처의 인스턴스가 필요합니다. 대부분의 경우 새 인스턴스는 새 아키텍처로 생성됩니다. 이를 확인하려면 인스턴스의 네트워크 아키텍처를 확인하세요.
기존 Cloud SQL Enterprise 버전 인스턴스를 Cloud SQL Enterprise Plus 버전 인스턴스로 업그레이드하면 이전에 나열된 필수 요건이 충족되는 경우 Cloud SQL에서 쓰기 엔드포인트를 자동으로 생성합니다. 기존 인스턴스가 이전 네트워크 아키텍처에 있는 경우 먼저 인스턴스를 새 네트워크 아키텍처로 업그레이드해야 쓰기 엔드포인트를 가져올 수 있습니다.
쓰기 엔드포인트가 없는 Cloud SQL Enterprise Plus 버전 인스턴스가 이미 있고 Cloud SQL에서 쓰기 엔드포인트를 자동으로 생성하게 하려면 고급 재해 복구에 사용 설정된 복제본을 만듭니다.
쓰기 엔드포인트 보기
gcloud
쓰기 엔드포인트를 찾으려면 다음 gcloud CLI 명령어를 사용하세요.
gcloud sql instances describe INSTANCE_NAME \ | grep psaWriteEndpoint
다음을 바꿉니다.
INSTANCE_NAME
: Cloud SQL 인스턴스의 이름.
쓰기 엔드포인트는 항상 다음 예와 같이 .global.sql-psa.goog.
접미사로 끝납니다.
103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
자격 요건을 충족하는 인스턴스의 쓰기 엔드포인트가 표시되지 않으면 문제 해결을 참고하세요.
쓰기 엔드포인트를 사용하여 Cloud SQL 인스턴스에 연결
psql
쓰기 엔드포인트를 사용하여 psql
클라이언트를 Cloud SQL 인스턴스에 연결하려면 다음 명령어를 실행합니다.
psql -U DATABASE_NAME -h WRITE_ENDPOINT
다음을 바꿉니다.
DATABASE_NAME
: 데이터베이스의 이름 예를 들면postgres
입니다.WRITE_ENDPOINT
: DNS 이름 또는 쓰기 엔드포인트입니다. 이 영숫자 값은 항상.global.sql-psa.goog.
접미사로 끝납니다. 예를 들면103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
입니다.
SSL/TLS 연결을 통해 쓰기 엔드포인트를 사용하여 데이터베이스 클라이언트를 데이터베이스 인스턴스에 연결
psql
SSL/TLS 연결을 통해 쓰기 엔드포인트를 사용하여 데이터베이스 클라이언트를 인스턴스에 연결하려면 다음 명령어를 실행하세요.
psql "sslmode=SSL_MODE \ sslrootcert=SSL_ROOT_SERVER \ sslcert=SSL_CERT \ sslkey=SSL_KEY \ host=WRITE_ENDPOINT \ port=PORT user=USERNAME \ dbname=DATABASE_NAME"
다음을 바꿉니다.
SSL_MODE
: 사용된 SSL 모드입니다. 예를 들면verify-full
입니다.SSL_ROOT_SERVER
: SSL 루트 서버의 이름입니다. 예를 들면server-ca.pem
입니다.SSL_CERT
: 클라이언트에서 사용하는 SSL 인증서의 이름입니다. 예를 들면client-cert.pem
입니다.SSL_KEY
: 클라이언트에서 사용하는 SSL 키의 이름입니다. 예를 들면client-key.pem
입니다.WRITE_ENDPOINT
: DNS 이름 또는 쓰기 엔드포인트입니다. 이 영숫자 값은 항상.global.sql-psa.goog.
접미사로 끝납니다. 예를 들면103uufa2svq8u.2rb3qdj9tkf4d.global.sql-psa.goog.
입니다.PORT
: 사용된 포트 번호입니다. 예를 들면5432
입니다.USERNAME
: 사용자 이름입니다. 예를 들면postgres
입니다.DATABASE_NAME
: 데이터베이스의 이름 예를 들면postgres
입니다.
제한사항
- Cloud SQL Enterprise 버전 인스턴스 생성에는 쓰기 엔드포인트를 사용할 수 없습니다.
- 쓰기 엔드포인트는 공개 IP 전용 인스턴스나 Private Service Connect 전용 인스턴스에서는 사용할 수 없습니다.
- 쓰기 엔드포인트는 Cloud SQL 인증 프록시 또는 언어 커넥터와 함께 사용할 수 없습니다.
문제 해결
다음 섹션에서는 쓰기 엔드포인트의 아키텍처를 설명하고 일반적인 문제 해결 문제를 다룹니다.
쓰기 엔드포인트의 아키텍처
적격 인스턴스를 만들면 기본적으로 쓰기 엔드포인트가 생성됩니다.
쓰기 엔드포인트를 만들기 위해 Cloud SQL은 다음 설정을 실행합니다.
- 서비스 Cloud SQL 프로듀서 VPC 네트워크에 비공개 DNS 영역을 만듭니다.
- 고객 VPC 네트워크에 피어링 DNS 영역을 만듭니다.
- 서비스 생산자 네트워크의 비공개 DNS 영역에 DNS 레코드를 만듭니다.
다음 다이어그램은 이 프로세스의 작동 방식을 보여줍니다.

DNS 변환 문제
DNS 변환이 작동하지 않으면 다음 항목을 각각 확인하세요.
- 모든 기본 요건을 충족하는지 확인합니다.
- 해결이 필요한 클라이언트가 Cloud SQL 인스턴스가 연결된 동일한 네트워크에 있는지 확인합니다. 이를 확인하려면
gcloud compute instances list
명령어를 사용하세요.gcloud compute instances list \ --format="table( name, zone.basename(), networkInterfaces[].network )" \ --project=PROJECT_NAME
PROJECT_NAME
을 DNS 소비자 네트워크가 있는 프로젝트 이름으로 바꿉니다. - 피어링 영역이 있는지 확인합니다. 이렇게 하려면
gcloud dns managed-zones list
명령어를 사용하세요.gcloud dns managed-zones list \ --project=PROJECT_NAME
PROJECT_NAME
을 DNS 소비자 네트워크가 있는 프로젝트 이름으로 바꿉니다. - 피어링 영역이 없으면
gcloud beta sql instances patch
명령어를 사용하여 문제를 해결할 수 있습니다.gcloud beta sql instances patch INSTANCE_NAME --reconcile-psa-networking
INSTANCE_NAME
을 Cloud SQL 인스턴스 이름으로 바꿉니다.
새 인스턴스에 쓰기 엔드포인트가 없음
새로 만든 인스턴스에 쓰기 엔드포인트가 포함되어 있지 않으면 다음 항목을 각각 확인하세요.
- 모든 기본 요건이 완료되었는지 확인합니다.
- DNS 이름이
sql-psa.goog.
인 남아 있는 피어링 DNS 영역이 없는지 확인합니다.피어링 DNS 영역은 DNS 영역과 연결된 네트워크에 피어링 DNS 영역의 피어 프로젝트 ID와의 VPC 피어링이 없는 경우 남은 DNS 영역입니다.
sql-psa.goog.
접미사가 있는 남아 있는 피어링 DNS 영역이 있으면 삭제합니다.남아 있는 피어링 DNS 영역을 확인하려면
gcloud dns managed-zones list
명령어를 사용합니다.gcloud dns managed-zones list \ --project=PROJECT_NAME
PROJECT_NAME
을 DNS 소비자 네트워크가 있는 프로젝트의 이름으로 바꿉니다.sql-psa.goog.
접미사가 있는 DNS 영역이 있으면 피어링 DNS 영역이 남은 DNS 영역인지 다시 확인한 후 DNS 영역을 삭제합니다.DNS 영역을 삭제하려면
gcloud dns managed-zones delete
명령어를 사용합니다.gcloud dns managed-zones delete ZONE_NAME
ZONE_NAME
을 쓰기 엔드포인트와 연결된 DNS 영역 이름으로 바꿉니다. 값은 영숫자이며cloud-sql-psa-dns-1234567890
형식을 사용합니다. gcloud beta sql instances patch
명령어를 사용하여 적격 인스턴스의 쓰기 엔드포인트 누락을 수정할 수 있습니다.gcloud beta sql instances patch INSTANCE_NAME --reconcile-psa-networking
INSTANCE_NAME
을 Cloud SQL 인스턴스 이름으로 바꿉니다.
다음 단계
- Cloud SQL 문제 해결에 대해 자세히 알아보세요.