BigQuery(BQ)ã®ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã¯ãæ®éã«è¨å®ããã¨è¨å®ããã¦ã¼ã¶ã¼ãã¤ã¾ãäººã®æ¨©éã§å®è¡ããã¾ãã ãããèªãã§ã人ã¯ä½ãåé¡ãããã£ã¦ããã¯ãã§ãéè·æã«ãã®ã¦ã¼ã¶ã¼ã¢ã«ã¦ã³ããæ¶æ» ããã¨åããªããªããã ãã§ã¯æ¸ã¾ãã«è¨å®èªä½ãæ¶æ» ãã¾ãããããé¿ãããã®ã§ãµã¼ãã¹ã¢ã«ã¦ã³ã(SA)ã§å®è¡ãããããã ããã ãã®è©±ã ãã©ééã£ãæé ãåºã¾ã£ã¦ãã¾ã£ã¦ããã
ã¾ãæåã«ãSAã®éµã¯ä¸è¦ã§ããSAã§ã¹ã±ã¸ã¥ã¼ã«ããããã«ã¯éµãå¿ é ãã®ãããªèªèã¯ãä»ããæ¨ã¦ã¦ãã ããã
åèã«ãã¹ãã¨ãã
https://cloud.google.com/bigquery/docs/scheduling-queries?hl=ja#using_a_service_account
Googleã®å ¬å¼ããã£ããèªãã®ãçµå±ã®è¿éã§ããä¿¡é ¼ã«è¶³ãæ å ±æºã¨ãã¦ã¯ãããä¸çª
ã³ã³ã½ã¼ã«ããè¨å®ãã
DevelopersConsole(DC)ããè¨å®ãããããã¯ææã¯ããããªãããæ¯è¼çæè¿ã®æ©è½ã®ã¯ããªã®ã§ãå¤ãè¨äºã ã¨ç´æ¥APIãå©ããããªãããã«ãè¦ãã¾ãããä»ã¯ä¸å¿DCããè¨å®ã¯ã§ãã¾ãã
ãã®ã¾ãã«ã誰ããä½ãããããã¡ããã¨ææ¡ãã
é常ã®ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã¯ãããããä¸è¨ã®æé ã§ä½ã£ã¦ããã¯ãã§ãã
- AãããSQLã使ãã (å®éã«æµãã¦çµæã確èªãã)
- ãã®ã¾ã¾ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã¨ãã¦ç»é²ãã
- ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã¯Aããã®æ¨©éã§å®è¡ããã
ãããSAã§å®è¡ããå ´å
- AãããSQLã使ãã
- ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã¨ãã¦ç»é²ããã¨ãã«ãå®è¡ã¦ã¼ã¶ã¼ã¨ãã¦SAãæå®ãã
- ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã¯SAã®æ¨©éã§å®è¡ããã
æå¾ã®ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã®å®è¡ã¯BQãªã½ã¼ã¹ï¼ãã¼ãã«ããã¼ã¿ã»ããã«å¯¾ããã¢ã¯ã»ã¹æ¨©éã¯ãAããã¨SAã¸ã®èªå¯ãåããã®ãå¿
è¦ã
ããä¸ã¤ãSAã§å®è¡ããããã«ãã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªãè¨å®ããã¨ãã«ãSAãä½¿ãæ¨©éã¨ãããã®ãAããã«å¿
è¦ã¨ãªãã¾ãã
ã¾ãããªããGoogle管è½ã®ããªã»ããSAã«å¯¾ã㦠iam.serviceAccounts.getAccessToken
ãè¶³ããªãã¨ã¡ãã»ã¼ã¸ãåºããã¨ãããã¾ãããªãå¿
è¦ã説æã§ããªãã100%çºçããããã§ããªãã§ã*1ããå¾ãã¾ãããã
- SAã«å¯¾ãã¦BQãªã½ã¼ã¹ã¸ã®èªå¯
- è¨å®ãè¡ã人ã«å¯¾ã㦠対象SAã使ãèªå¯ (Web-UIããè¨å®ããããªãã°ãããã¸ã§ã¯ãå ã®SAãåæããèªå¯)
- åçã¯ä¸æã ããããªã»ããã®SAã«å¯¾ãã¦
iam.serviceAccounts.getAccessToken
DCã§ãã£ã¦ã¿ã
ã¾ããAããã®æ¨©éã§å®è¡ãã¦ã¿ããåèã¾ã§ã«ä¸è¨ãä»ä¸ããã¨ãããã¡ãªã¿ã«æ¸ãè¾¼ã¿æ¨©éã¯ä¸è¨ã«ã¯ãªãã®ã§ã調æ´ãã¦ãã ããã
bigquery.jobs.create bigquery.jobs.list bigquery.routines.get bigquery.routines.list bigquery.savedqueries.create bigquery.savedqueries.delete bigquery.savedqueries.get bigquery.savedqueries.list bigquery.savedqueries.update bigquery.transfers.get bigquery.datasets.get bigquery.tables.get bigquery.tables.getData bigquery.tables.list bigquery.transfers.get bigquery.transfers.update resourcemanager.projects.get
ãã®ç¶æ ã§Aããèªèº«ã®å®è¡ã§ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªãå®ç¾©ã§ãããã¨ã確èªãã¦ããã
次ã«SAã使ã£ã¦åãã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªãå®ç¾©ãããSAã使ãã¦ãä¸è¨Aããã¨åãBQãªã½ã¼ã¹ã«å¯¾ããæ¨©éãä»ä¸ããã ãããããAããã«ã¯SAãåæï¼ä½¿ã権éãåå¨ããªããããä»ä¸ããå¿ è¦ãããã
ããã¸ã§ã¯ãã®è¦æ¨¡ã«ãããããä¸çªå®å ¨ã«åããªãã°ãAããã«ä¸ããããã¸ã§ã¯ãã¬ãã«ã®èªå¯ã¨ãã¦ã¯ãSAã®åå¾ã¨ãªã¹ãã®ã¿ã«çµããSAã使ãèªå¯ã¯SAèªä½ã®æ¨©é(AWSã§ãããªã½ã¼ã¹ããªã·ã¼)ã¨ãã¦ä»ä¸ããã®ããããå ·ä½çã«ã¯SAãåæããå°ç¨ãã¼ã«(SAåæãã¼ã«ã¨åä»ãã)ãã¤ãã£ã¦ããã®ä¸èº«ãä¸è¨ã¨ãããã¸ã§ã¯ãã§Aããã«ä»ä¸
iam.serviceAccounts.get iam.serviceAccounts.list
ããã«SAèªèº«ã®èªå¯(ãã®ãµã¼ãã¹ ã¢ã«ã¦ã³ãã«ã¢ã¯ã»ã¹ã§ããããªã³ã·ãã«)ã¨ãã¦Aããã«Servce Account User: roles/iam.serviceAccountUser
ã®ãã¼ã«ãä»ä¸ããã°OK
ããã§ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã®è¨å®ã¯æåãããããè¨å®ã¯æåãã¦ãå®è¡æã«ã¾ãã«ä¸è¨ã®ã¡ãã»ã¼ã¸ã§ã³ã±ããã¨ãããã
P4 service account needs iam.serviceAccounts.getAccessToken permission. Running the following command may resolve this error: gcloud iam service-accounts add-iam-policy-binding <SA-user-email> --member='serviceAccount:service-<project-id>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com' --role='roles/iam.serviceAccountTokenCreator'
ãããçºçãããããªãã£ããã§ãåå ã¯ããããªãããç´ ç´ã«ãSAã®ããªã·ã¼ã« service-<project-id>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com ã«å¯¾ãã¦ãiam.serviceAccounts.getAccessToken ãä»ä¸ããã
bqã³ãã³ãã§ãã£ã¦ã¿ã
bq ã³ãã³ãã§ããå ´åãªãã°ãSAåæãã¼ã«ã¯ä»ä¸ãã¦ããªãã¦ãOKã§ãSAèªèº«ã®èªå¯ã ãããã°ããã
bq
ã³ãã³ãã§è¨å®ãããä¸è¨ã¯ãã§ã«å®ç¾©æ¸ã¿ã®ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãª(転éè¨å®)ã®å®è¡ã¦ã¼ã¶ã¼ã ãå·®ãæ¿ããæ¹æ³ã詳ããã¯å
¬å¼ãã
https://cloud.google.com/bigquery/docs/scheduling-queries?hl=ja#bq_3
bq update \ --update_credentials \ --service_account_name=<SAã®ã¡ã¢ã> \ --transfer_config \ <ã¹ã±ã¸ã¥ã¼ã«ãã»è»¢éè¨å®ã®ãªã½ã¼ã¹å>
転éè¨å®ã®ãªã½ã¼ã¹åã¯
bq ls --transfer_config --transfer_location=us
ã¨ãã§ç¢ºèªã§ãããããã§å度ã¾ã¨ãã¦ããã¨ãAãããSAã§å®è¡ããããã«è¨å®ããã®ã§ãAãããSAãå©ç¨ããæ¨©éãå¿
è¦ã¨ãªãã
SAéµãçºè¡ãã¦ãSAéµã§èªè¨¼ãã¦ãSAèªèº«ã«ãªããããSAèªèº«ãã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªå®è¡ã¦ã¼ã¶ã¼ã¨ãããã¨ã¯ã§ãããããããªãã¨ããªãã¦ããããå±éºã ããä»ãããããã»ãããããAãããSAã使ããããã£ã¨çªã£è¾¼ãã¨ãiam.serviceAccounts.actAs
ãããã°ãããã§ããã®iam.serviceAccounts.actAs
ãããã¸ã§ã¯ãã¬ãã«ã§æ¯ã£ã¦ãã¾ãã¨å±ãªãã®ã§ãSAã®ããªã·ã¼ãã¤ã³ãã£ã³ã°ã§ä»ä¸ããã
è½ã¡ç©æ¾ã
DCããæ¢åã®ã¹ã±ã¸ã¥ã¼ã«ããSAå®è¡ã«åãæ¿ããã
クエリのスケジューリング | BigQuery | Google Cloud
DCããã¯ã§ããªãã¨æ¸ããã¦ãã¾ãããããã¨ã¯å¥ã®æ¹æ³ã§ã§ãã¾ããBQã³ãã³ããå«ãªäººã¯ãã¡ãã§
ä»ã®ããã¸ã§ã¯ãã§ä½ã£ãSAã§å®è¡ããã
çµè«ããè¨ãã¨ãã§ããããããããããªãã
ã¾ãæåã«ãSAã使ããããã¸ã§ã¯ãã¨ããªã½ã¼ã¹ãããããã¸ã§ã¯ãã¯åä¸ã§ããå¿
è¦ã¯ãªããAWSã¯ã¢ã«ã¦ã³ããã¨ã«èªè¨¼è£
ç½®ãããããããã¯ãã¹ã¢ã«ã¦ã³ãã¨ãããä»çµã¿ãå¿
è¦ã ããGCPã¯ããã¸ã§ã¯ãåä½ã§èªè¨¼ã¯çºçãã¦ããªããã ããã¯ãã¹ããã¸ã§ã¯ããã¦ãã¦ããèªå¯ããä¸ããã°åé¡ãªãã
ããSAãããã¸ã§ã¯ãè·¨ãã§ç¹å®ããã¸ã§ã¯ãã®ãªã½ã¼ã¹ã«ç¸ãä»ãã(e.g. GCEã®SAããä»åã®ã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªã®SA)ã«ä½¿ããã¨ã¯ãGCPã®IAMã«ãã çµç¹ããªã·ã¼ã«ããç¦æ¢ããã¦ãããããã©ã«ãã§
ããããçµç¹ããªã·ã¼ã¨ååã¯ã¤ãã¦ããããããã¸ã§ã¯ãã¬ãã«ã§ã®ããªã·ã¼ã¨ãã¦åãã¦ãã constraints/iam.disableCrossProjectServiceAccountUsage
ã詳ããç¥ããã人ã¯èªåã§èª¿ã¹ã¦ãã ãããã¹ã¯ãªã¼ã³ã·ã§ããã ãè²¼ã£ã¦ããã
ããã¾ã§èªãã§ãã人ãªã大ä¸å¤«ã ã¨æããã念ã®çº
- SAã¨ãã¹ã±ã¸ã¥ã¼ã«ããä»è¾¼ãããã¸ã§ã¯ãã¯åä¸
- ã¸ã§ãããã¢ã¯ã»ã¹ããBQãªã½ã¼ã¹(dataset, table ...) ã¯ããã¸ã§ã¯ãã¾ããã§ãã¦OK
*1:çè ã®ç°å¢ã§ã¯ä¸åº¦çºçããã¨2度ç®ä»¥éã¯ä¸è¦ã§ãããããã¸ã§ã¯ãã«ãã£ã¦ã¯ããããçºçããªãå ´åãããã