[GCP] GCS에 저장된 sql 덤프 파일을 Cloud SQL에 적용하기.

NewNewDaddy·2025년 3월 7일
0

GCP

목록 보기
4/4
post-thumbnail

0. INTRO

  • 리눅스 명령어들을 파일에 모아 일괄적으로 실행하는 경우 .sh 파일인 shell script를 작성합니다. 동일하게, SQL 쿼리들을 파일에 모아 일괄적으로 실행하려는 경우에는 .sql 파일을 작성하게 되는데 보통은 적용하려는 RDBMS의 SHELL 환경에 접속하여 CLI 형태로 dump 작업을 진행하게 됩니다.
  • 이번 글에서는 Gb 단위의 .sql 파일에 저장된 많은 양의 쿼리를 구글 클라우드의 데이터베이스 서비스인 Cloud SQL에 적용될 수 있도록 해 볼 것입니다.
  • 즉, Google Cloud Storage(GCS)에 저장된 dump.sql 파일을 Cloud SQL(MySQL 버전)에 적용하여 DB내에 테이블 생성이 될 수 있도록 하는 것입니다.

1. 환경 구성

  • Cloud SQL(MySQL 버전)을 생성하고, .sql 파일을 GCS 버킷의 특정 경로에 저장합니다.

    Cloud SQL 생성하는 구체적인 과정은 '인스턴스 만들기 | Cloud SQL for MySQL' 문서를 참고바랍니다.

  • GCS 버킷 저장 경로
    • gs://sprintda03_hyunsoo_bucket/sprint_dataset/dump-hackle-202411211621.sql
    • gs://sprintda03_hyunsoo_bucket/sprint_dataset/dump-votes-202412161403.sql

2. IAM 권한 설정

  • Google Cloud UI 우측 상단을 보면 cloud shell에 접속할 수 있는 아이콘이 있으며 해당 shell에서 CLI로 Dump 작업을 진행할 예정입니다.
  • GCS 버킷의 파일은 Cloud SQL로 덤프하기 위해서는 현재 사용중인 계정에 권한이 필요합니다.

1) 현재 사용중인 계정 확인

> gcloud auth list

--- 출력 예시 ---
Credentialed Accounts

ACTIVE: *
ACCOUNT: hyunsoo@codeit.com

2) GCS 버킷의 IAM 정책 확인

  • GCS -> Cloud SQL 작업을 수행하기 위해서는 버킷에 roles/storage.admin 또는 roles/storage.objectViewer 권한이 필요합니다.
> gcloud storage buckets get-iam-policy gs://[BUCKET_NAME]

--- 출력 예시 ---
bindings:
- members:
  - projectEditor:sprintda03-hyunsoo
  - projectOwner:sprintda03-hyunsoo
  role: roles/storage.legacyBucketOwner
- members:
  - projectViewer:sprintda03-hyunsoo
  role: roles/storage.legacyBucketReader
- members:
  - projectEditor:sprintda03-hyunsoo
  - projectOwner:sprintda03-hyunsoo
  role: roles/storage.legacyObjectOwner
- members:
  - projectViewer:sprintda03-hyunsoo
  role: roles/storage.legacyObjectReader
etag: CAU=

3) 버킷에 필요 권한 추가

  • 작업 수행을 위해 GCS 버킷에 roles/storage.objectViewer 권한을 추가합니다.
> gcloud storage buckets add-iam-policy-binding gs://[BUCKET_NAME] \
    --member=user:[사용중인 계정의 email] \
    --role=roles/storage.objectViewer

4) Cloud SQL 서비스 계정 확인

  • Cloud SQL 인스턴스 생성시 관련 서비스 계정도 자동으로 함께 생성이 됩니다. 해당 서비스 계정 ID를 확인합니다.
> gcloud sql instances describe [DB INSTANCE_NAME] --format="value(serviceAccountEmailAddress)"

--- 출력 예시 ---
cloud-sql-123456@gcp-sa-cloud-sql.iam.gserviceaccount.com

5) Cloud SQL 서비스 계정에 GCS 액세스 권한 추가

  • Cloud SQL은 내부적으로 Cloud SQL 서비스 계정을 사용하여 GCS에서 데이터를 가져옵니다. 따라서 Cloud SQL의 서비스 계정에도 GCS 읽기 권한(roles/storage.objectViewer)을 추가해주어야 합니다.
> gcloud storage buckets add-iam-policy-binding gs://[BUCKET_NAME] \
    --member=serviceAccount:[SERVICE_ACCOUNT_EMAIL] \
    --role=roles/storage.objectViewer

3. Dump 작업 실행

  • GCS와 Cloud SQL에 각각 작업 실행을 위한 적절한 권한 설정이 완료되었다면 본격적으로 Dump 작업을 진행할 수 있습니다.

1) Database 생성

  • 덤프 파일의 테이블이 저장될 데이터베이스를 Cloud SQL에서 생성합니다.
    Cloud SQL > Databases > CREATE DATABASE 탭에서 생성이 가능합니다.

2) Dump 작업 실행

  • Dump 역시도 Google Cloud Shell에서 CLI로 진행이 가능합니다.
> gcloud sql import sql [DB INSTANCE_NAME] \
	[GCS의 .sql 파일 경로]\
    --database=[생성한 DB NAME] \
    --project=[PROJECT ID]
    
--- 예시 코드---
> gcloud sql import sql [DB INSTANCE_NAME] \
	gs://sprintda03_hyunsoo_bucket/sprint_dataset/dump-votes-202412161403.sql \
    --database=hackle \
    --project=sprintda03-hyunsoo

4. OUTRO

  • 로컬에 설치된 MySQL에서는 .sql 파일을 덤프할 때, MySQL Shell에 접속한 후 SOURCE 명령어를 사용하여 작업할 수 있습니다.
    하지만 이번에는 파일과 데이터베이스가 모두 Google Cloud에 존재했기 때문에, 이를 통합적으로 관리할 수 있도록 Cloud Shell을 활용하여 작업을 진행해야 합니다. Cloud Shell을 사용하면 CLI 환경에서 GCP 리소스를 손쉽게 관리할 수 있어 보다 효율적인 운영이 가능합니다.😁
profile
데이터 엔지니어의 작업공간 / #PYTHON #CLOUD #SPARK #AWS #GCP #NCLOUD

0개의 댓글