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 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다.
빅쿼리의 ‘데이터 전송’ 메뉴에서 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 사용자 역할을 주어서 해결.
최종적으로 완료.