Google의 cloud-sql-proxy(Cloud SQL Auth Proxy)를 사용하여 DB에 로그인하기까지

3 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

안녕하세요, 무능입니다.
잠시 cloud-sql-proxy를 통해 DB에 연결하려고 하다가 막혀서 메모해 둡니다.

필요한 바이너리 설치

cloud-sql-proxy 실행 바이너리 저장 및 경로 설정

먼저 cloud-sql-proxy 실행 바이너리가 필요합니다.
brew와 같은 패키지에는 존재하지 않으므로, 각 명령 세트에 맞게 빌드된 실행 바이너리를 Google 사이트에서 받아야 합니다.

curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.14.2/cloud-sql-proxy.darwin.arm64
chmod +x cloud-sql-proxy
sudo mv cloud-sql-proxy /usr/local/bin
which cloud-sql-proxy

많은 사람들이 하지 않지만, homebrew로 설치된 것은 /opt/homebrew/bin/ 아래에 실행 바이너리가 배치되지만 이번에는 사용자가 설치한 고유한 바이너리이므로 FreeBSD의 포크인 MacOS의 경우 /usr/local/bin이 더 적합해 보여서 그곳에 두었습니다.

MySQL 바이너리 설치

아무런 버전 지정 없이 brew install mysql을 실행하면 바이너리가 부족하거나 버전이 너무 낮아 연결 시 오류가 발생하므로 아래와 같이 설치합니다.
이 부분은 선배 덕분에 순식간에 해결했습니다.

brew install mysql-client@8.4

그, 렇, 게, 하, 여
만약 경로가 설정되어 있지 않다면 아래에서 찾아 심볼릭 링크를 생성합니다.

find /opt/homebrew -name "mysql*"
ln -s /찾은/mysql바이너리경로 /opt/homebrew/bin/mysql

연결할 DB 정보 가져오기

환경 확인 및 인증

이미 로그인 처리를 완료했다고 가정합니다.

gcloud auth login
gcloud auth application-default login

아래에서 프로젝트를 지정합니다.

gcloud config set project 프로젝트ID

프로젝트 확인은 아래에서 수행합니다.

gcloud config get-value project

그리고 아래에서 DB 연결 이름을 확인합니다.

gcloud sql instances describe DB인스턴스명 | grep "^connectionName:" | awk '{print $2}'

cloud-sql-proxy를 통해 연결

이것은 메커니즘에 대한 이야기지만, 이 cloud-sql-proxy는 DB를 프록시합니다.
개념적으로는 VM 내에 존재하는 DB 자체에 접근하려고 한다면 한 번 그 OS에 SSH하여 DB 서버 자체에 로그인 처리가 필요하지만, 이 프록시를 사용하면 Cloud SQL에 존재하는 DB 서버를 로컬 호스트에 Listen하도록 해줍니다.
DB 포트를 열어두면 해당 DB 서버에 직접 연결할 수 있겠지만, 그렇게 위험한 상태로 DB 서버를 구축하는 곳은 없을 것입니다.
따라서 가능한 한 안전하고 간편하게 연결하고 싶다면 DB를 프록시하는 것이 좋다고 생각합니다.

그럼, 방금 확인한 DB 연결 이름을 지정해 봅시다.

cloud-sql-proxy --port 3306 DB연결이름

위는 MySQL의 경우이므로, PostgreSQL 등이라면 다른 포트를 지정해야 하고 필요한 바이너리도 달라지므로 이 부분은 적절히 변경해야 할 것입니다.

연결이 확립되면, 성공적으로 프록시된 상태이므로 그대로 두고 다른 터미널에서 MySQL에 연결하면 됩니다.

mysql --user="DB사용자" --password="DB사용자비밀번호" -h 127.0.0.1

그럼 다음에 또 만나요.
잘 부탁드립니다.