22-07-29 GCP IAM / Data Catalog / Fivetran MySQL -> BigQuery 덤프

jakemraz's glacier·2022년 8월 29일
0

Dev Log

목록 보기
3/5

IAM

  • Browser
  • Editor
  • Owner
  • Viewer

IAM 변경시 적용까지 80초 정도 걸린다.

IAM은 프로젝트 별로 종속적인건가?

저런 gserviceaccount 같은건 뭐지

그리고 Owner가 있음에도 불구하고 Viewer가 없으니 리소스가 안보인다…뭥미

왜 권한이 없는데 BIgQuery는 들어가지지. 다른건 안들어가진다.

gcloud iam service-accounts create sqlserver2dc-credentials \
--display-name "Service Account for SQLServer to Data Catalog connector" \

Service Account는 뭐야..

유저가 아니라 서비스가 갖는 롤인가 보다.

IAM 좌측에 보면 Service Accounts 라는 메뉴가 있다.

여기서 만들면 되는듯

blahblah@$PROJECT_ID.iam.gserviceaccount.com 형태가 많다.

Private Key를 가질 수도 있다.

gcloud로 만들면 순서가 아래와 같다.

# 생성
gcloud iam service-accounts create mysql2dc-credentials \
--display-name  "Service Account for MySQL to Data Catalog connector" \
--project $PROJECT_ID

# 키 만들기
gcloud iam service-accounts keys create "mysql2dc-credentials.json" \
--iam-account "mysql2dc-credentials@$PROJECT_ID.iam.gserviceaccount.com"

# 정책 연결 전에는 IAM 화면에서 보이지 않음

# 정책 연결하기
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:mysql2dc-credentials@$PROJECT_ID.iam.gserviceaccount.com" \
--quiet \
--project $PROJECT_ID \
--role "roles/datacatalog.admin"

권한을 갖게 되면 IAM의 Principals에 나타난다.

Data Catalog

Data Catalog 통해서 여러 곳으로 퍼져있는 Data Source를 한곳으로 모아 볼 수 있는건… 줄 알았는데

아니다.. 상위 개념이 나왔네?

Dataplex를 통해 데이터를 한곳으로 모아 볼 수 있다.

Data Catalog에 SQL (AWS의 RDS 같은거인듯)를 연결하는건 복잡하다. 웹 콘솔에서 안되고 gcloud (cli)를 써야 하는 것 같다.

웹 콘솔에서는 버킷밖에 연결이 안되는 것 같다. (Entry groups → Create Entry Group → Create)

https://github.com/GoogleCloudPlatform/datacatalog-connectors-rdbms

각 DB에 맞는 connector 이용해서 직접 실행해서 연결해야 한다.

스크립트는 다 dockerize 해놓은듯

gsutil cp gs://spls/gsp814/cloudsql-mysql-tooling.zip .
unzip cloudsql-mysql-tooling.zip

public_ip_address=$(terraform output -raw public_ip_address)
username=$(terraform output -raw username)
password=$(terraform output -raw password)
database=$(terraform output -raw db_name)

docker run --rm --tty -v \
"$PWD":/data mesmacosta/mysql2datacatalog:stable \
--datacatalog-project-id=$PROJECT_ID \
--datacatalog-location-id=us-central1 \
--mysql-host=$public_ip_address \
--mysql-user=$username \
--mysql-pass=$password \
--mysql-database=$database

이렇게 하고 나면 Dataplex의 Entry groups에서 db가 보여진다.

흠 근데 db_name을 출력해보니 그냥 ‘mysql’이라고 나오는데.. 어떻게 특정 인스턴스를 찾는거지?

설정된 이름을 보면 mysql-5678로 돼있는 것 같은디..

아.. 이게 db를 바라보는게 아니고.. 아..

mysql2datacatalog docker에서 설정해준 $database는 dataplex의 entry group 이름으로 들어간듯.

DB는 public_ip_address로 바라보는듯

지금 보니 terraform output public_ip_address의 output이 34.171.1.155다.

Fivetran 통해서 MySQL to BigQuery 마이그레이션

빅쿼리의 ‘데이터 전송’ 메뉴에서 MySQL by Fivetran 눌러서 쭉 진행하다가 ‘소스 연결' 누르면 Fivetran 로그인 하고 나서 아래의 에러가 발생함

{"exceptionType":"java.lang.RuntimeException","exceptionMessage":"Failed to get setup form data","exceptionDetails":"{fileName:BqDtsSetupPage.java,lineNumber:120,methodName:setupFormData,className:com.fivetran.app.embed.BqDtsSetupPage}"}

그래서 그냥 Fivetran 홈페이지에서 직접 진행하기로 결정.

ec2의 authorized_keys에 Fivetran에서 제공해주는 Public Key 등록

REPLICATION CLIENT privilege needed

REPLICATION SLAVE privilege needed

위에 두개는

$ grant replication client, replication slave on . to 'repl_slave'@'%';

로 해결

SELECT privilege needed on tables you wish to sync

$ grant select on cafe24_order_details to repl_slave;

$ grant select on * to repl_slave;

로 select 권한 줘서 해결

그런데 아래의 에러가 났다.

Binary logging must be enabled: SHOW MASTER STATUS must return a non-empty result

결국 Binary Log로 Detect 하는 기능 끄고

Detect Changes via Fivetran Teleport Sync

This method detects new, modified, or deleted data via Fivetran Teleport Sync

켰음

BigQuery User Permissions: Permission check failed: "Access Denied: Project facebook-ads-111111: User does not have bigquery.datasets.create permission in project facebook-ads-111111.”

이건 IAM에 가서

g-progenitor-overvalue@fivetran-production.iam.gserviceaccount.com를 추가하고 BigQuery 사용자 역할을 주어서 해결.

최종적으로 완료.

profile
SOFTWARE DEVOPS ENGINEER

0개의 댓글