é©åãªæ¹æ³ã§BigQueryã¹ã±ã¸ã¥ã¼ã«ãã¯ã¨ãªãå®è¡ãã
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度ç®ä»¥éã¯ä¸è¦ã§ãããããã¸ã§ã¯ãã«ãã£ã¦ã¯ããããçºçããªãå ´åãããã
AWS Lambdaãä½æ ãä½åãinvokeããã¦ãããããæåãã¦ãã®ã«
AWS Lambdaã§ä¹ ã ã«ããã£ãã®ã§ãç解ãæ·±ãã¦æ®ãã¦ãããã¨æãã ããGAããããã¶ãçµã£ã¦ããããèªåãåæã®Lambdaãããããã£ã¦ãªããã¨ãããã¨ãããã£ãã
å ¨é¨ãã£é£ã°ãã¦çµè«
- Lambdaãåæå®è¡ + AWS SDK/CLI ãªã©ã§åä½å®è¡ããã¨ãã¯ãClientå´ã®ã¿ã¤ã ã¢ã¦ãè¨å®ããLambdaå´ã®ã¿ã¤ã ã¢ã¦ããããé·ããã
- Boto3(Python)ã®å ´åã¯ã1å以ä¸Lambdaã®å®è¡ã«ãããå ´åã¯ããããå®ããªãã¨3åãããLambdaãåæã«Invokeããã
æ¦è«ã»ä»ã¨ãªã£ã¦ã¯ç¹æ®ãªåããæ¹ã®èª¬æ
Lambdaã¯åºæ¬ãªã«ãå¥ãµã¼ãã¹ã¨é£æºãã¦ä½¿ããã®ã§ãããããåä½ã§ãå®è¡ããããã¨ã¯å¯è½ã§ãã(ã©ããã®ããã¯ããã°ã«ã¯ã§ããªãã¨æ¸ãã¦ã¾ãããããã¯åã§ããï¼
ä»åã®ç®çã¯ããã®å®å ¨ã«åä½ã§Lambdaãå®è¡ãããã¨ã§ããçµæ§ã¬ã¢ã±ã¼ã¹ã ã¨æãã¾ããããã¯ãä¸ã®ä¸ã®æ å ±ã溢ãããã£ã¦ããã®ã§ãã®ã¬ã¢ã±ã¼ã¹ãæ£ç¢ºã«ç¤ºãããã ãã«å¤å ã®è§£èª¬ãè¶ éã«ãã¾ãã
åæã»éåæå®è¡
æ³åã§ãããåæã®Lambdaã¯åæå®è¡ããã§ããªãã£ãã¯ããåæã¨ã¯ãæ³åéãå¼ã³åºãå¾ãLambdaãå®èµ°ããã¾ã§å¾ ã¡ã¾ããçµæãããã«åãåºãã¾ãã
対ãã¦éåæã¯æååããå¼ã³åºããæåããæç¹ã§ãä¸æ¦æåãå¼ã³åºãå´ã«è¿ãã¾ãã
ã¢ãã¿ã®è¨ããããã¨ãããã¾ãããããããå
¨é¨éåæã§ãããï¼ã
ããããããããã¢ãã¿ã®èããéåæã¨ã¡ãã£ã¨éãã¾ãããInvokeãã㨠Invoke-Idã帰ã£ã¦ãããã§ããï¼ããããã¼ãªã³ã°ããã°ãããã§ããï¼ãã¨æã£ã¦èª¿ã¹ãã¨ãããªAPIãªãã§ã
Lambdaã®éåæå®è¡ã®çµæãåå¾ããå ´åãå¥ã®ãµã¼ãã¹ã«æããã»å¤±ææåãã¨ãã¦ã¯DLQã«æããè¨å®ãå¯è½ã§ããã®çµæãè½åçã« åå¾ããå¿
è¦ãããã¾ãã
ãµã¼ãã¹é£æºã¨åæå®è¡
ä¸çªå¤ããã¿ã¼ã³ã¯ API Gateway + Lambda ã®ãã¿ã¼ã³ã ã¨æãã¾ããããã®å ´åã¯åºæ¬ãåæå®è¡ãéåæãã§ããã¯ãã§ãããæ¸ããããã¨ããå¤ããã®ã§ç«¯æãã
API Gateway ããªã¯ã¨ã¹ããåãã¦ãLambdaãå©ãã¦ããã«çµæãã»ããããããªãã¨ãªãåæã§ç´å¾ããã¨ããããHttpãªã¯ã¨ã¹ãã§ä½åãå¾
ããããã¨ãªãããã
åæå®è¡ã§åãã¦ãããã¿ã¼ã³ã§ãããµã¼ãã¹é£æºãã¦ããå ´åãã»ã¨ãã©ãããã§è¨ãããã®ã¯ãåæå®è¡ â åä½å®è¡ ã¨ãããã¨
åä½ã»åæå®è¡ããããçç±
ããããããªãã§ãåãåä½å®è¡ãããã®ï¼ãã«ã¤ãã¦ã¯
権éãã®ã³ã®ã³ã«çµãããå ´æã»ãªã½ã¼ã¹ã«ã¢ã¯ã»ã¹ããå¿
è¦ãããã®ã ããå¦çã¯è¶
ç°¡åã§ã·ã¥ãã¨çµæã ããã»ãã
ã¨ãããä»ã¨ãªã£ã¦ã¯ã¬ã¢ã±ã¼ã¹ã¨ãªã£ã¦ãã¾ã£ããåæã®Lambdaã®ä½¿ãæ¹ã«ããããããã¨ããã£ãããã
ãã¾ãããã®ã±ã¼ã¹ã§ã EventBridgeã¨ãã§Cronå®è¡ããã§ããï¼ãã¨ãªãã®ã§ããã³ãã«åä½å®è¡ãªãã¦ã¬ã¢ãã¨ãããã¾ããããã£ã¨æ£ç¢ºã«è¨ãã¨ãå®æå®è¡ããã¸ã§ãã®ä¸ã¤ã®å·¥ç¨ã§ãä¸è¨ã®ã±ã¼ã¹ãçºçãããã使ã£ãã
æ¬é¡ã»åé¡çºçãã¿ã¼ã³
åä½ã»åæå®è¡ã§çºçãããåé¡ã¯
å¼ã³åºããã¿ã¤ã ã¢ã¦ãããå ´åãboto(core)ã®æ©è½ã«ãããªãã©ã¤ããã¦ä½åãinvokeããã
詳ãã説æ
åæå®è¡ã®å ´åãLambdaã®invokeã¯ãLambdaãå®è¡å®äº or ç°å¸¸çµäºããã¾ã§å¦çã¾ã¡ãã¾ãããã®å¦çã¾ã¡ã¨ããã®ããä¸è¬çãªhttpsãªã¯ã¨ã¹ãã¨åãã§ãã Lambdaå´ã§æ大å®è¡æé(ã¿ã¤ã ã¢ã¦ã)ã¯è¨å®ã§ãã¾ãããä¸è¬çãªhttpsãªã¯ã¨ã¹ãã¨åããªã®ã§ãclientå´ãã¡ããã¨Lambdaå´ã®ã¿ã¤ã ã¢ã¦ãã¾ã§å¾ ã£ã¦ãããããã«ä»è¾¼ã¾ãªãã¨ãã¡ãã£ã¨éãå¦çãªãclientãæ©ã ã«ããããã¦ãæ°¸é ã«æåããªãã
awscli / boto3 㧠lambda invoke
ãå©ããå ´åããã®clientå´ã®ã¿ã¤ã ã¢ã¦ãã¯ãbotoã®æ¨æºè¨å®ã¨ãªãã¾ããã¡ãªã¿ã«botoã¯60ç§ã§ããã¡ãªã¿ã«botoã¯èªåãªãã©ã¤æ©è½ãã¤ãã¦ãã¾ããããã©ã«ã3åã ã£ãã¯ã
å®é¨
labmdaé¢æ°ã¯ timeoutã¨åä»ãã¦ãä¸è¨ã³ã¼ãããµã³ãã«ã«sleep足ããã ãã
ããã§ãLambdaå´ã® timeout㯠2åã«ãã¦ããã
import json import time def lambda_handler(event, context): time.sleep(90) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
awscliã§å©ãã¦ã¿ããå
¨é¨åãæµãããã« --debug
ä»ãã«ãã¨ããã»ããããã
$ aws lambda invoke --function-name timeout result.txt --debug 2022-04-23 17:33:41,590 - MainThread - botocore.retries.standard - DEBUG - Max attempts of 3 reached. 2022-04-23 17:33:41,590 - MainThread - botocore.retries.standard - DEBUG - Not retrying request. 2022-04-23 17:33:41,590 - MainThread - awscli.clidriver - DEBUG - Exception caught in main() Traceback (most recent call last): ... socket.timeout: The read operation timed out During handling of the above exception, another exception occurred: Traceback (most recent call last): ... urllib3.exceptions.ReadTimeoutError: AWSHTTPSConnectionPool(host='lambda.us-west-2.amazonaws.com', port=443): Read timed out. (read timeout=60)
ã覧ã®éããread timeout = 60ã§ãclientå´ãLambdaãã¾ã¡ãããã«è«¦ãã¦ãããããã«ãªãã©ã¤ã3åãã£ã¦ãã
Lambdaå´ã®ã¡ããªãã¯ã¹ã ãã¿ãã¨ããæåãã¦ãã®ã«ãªãã§3åãå©ãã¦ãã®ï¼ã¢ããªã®ï¼ãã¨ãªãã
awscliã§ã timeoutãæå®ã§ããã®ã§ãä»åº¦ã¯2å clientå´ãå¾
ã¤ããã«ããã
ãã¨ããèãã㨠aws cliã使ãã®ã¯ããã¦ãèªè¨¼æ å ±ãã¤ãããã¨ããã§ããã°ãç´ ç´ã«curlãªãæ®éã®http clientã§ãã£ãã»ããããã§ãã
$ aws lambda invoke --function-name timeout result.txt --cli-read-timeout 120 --debug ... 2022-04-23 17:44:23,495 - MainThread - awscli.formatter - DEBUG - RequestId: .... { "StatusCode": 200, "ExecutedVersion": "$LATEST" }
ä»åº¦ã¯æåããã
対çboto3ã®å ´å
import boto3 from botocore.config import Config conf = config(read_timeout=120, retries={'max_attempts': 0}) client = boto3.client("lambda", config=conf) client.invoke(...)
retryãé»ãããã»ããããã
令å4å¹´ã® Desktop Linux
Linuxãã¯ã©ã¤ã¢ã³ãã¨ãã¦ä½¿ãå§ãã¦2å¹´ããããã£ããubuntu 22.04 LTSãåºãåã ããæ¥è¨çã«æ¸ãã¨ãã
çµå±ã©ãããï¼
ubuntu 20.04 LTS @ ThinkPad X1 6gen ã使ã£ã¦ããããçæ´»ã¯ã§ããã
ã§ããããããããé¢åãªã®ã¯éããªãã
ããããMacãªãé¢åç¡ãã®ãï¼ã¨è¨ãããã¨ããã§ããªããããããªãããå½ããåã ãæ
å ±éãå§åçã«å°ãªãã®ã§ããããªãã«èªå·±è§£æ±ºãã¦ãããªãã¨è¦ãããªã
èªåãçµæ§å°ã£ãã¨ãã®ã¡ã¢ã(解決æ¹æ³ã¯æ¸ããªãã®ã§ãæå¾
ããªã)
ãã¤ããã¼ã·ã§ã³
解決æ¹æ³ã¯ã°ã°ãã°åºã¦ããã®ã§èªåã§èª¿ã¹ã¦ãã ãããã ãããæªã ã«ãã¤ããã¼ã·ã§ã³ã·ã¥ãã¨ã§ããªãã®ããï¼ã
注æã¯ãDeep Sleepã¨ããå®å
¨ã«ãã£ã¹ã¯ã«éããã¦ããããªã¼æ¶è²»ãæãããæ®éã®äººãç¥ã£ã¦ããã¤ããã¼ã·ã§ã³ãå®ç¾ããã«ã¯ããã¼ãã¦ã§ã¢å´ã§ã対å¿ãå¿
è¦ãªããã§ãã¯ã¤ã®ãã¼ãã§ããã¡ã¼ã ã®æ´æ°ãå¿
è¦ã ã£ãããã¡ã¼ã ã®ææ°æ
å ±ã Ubuntu Software (ã¢ãããã¼ãã®ã©ã³ãã£ã¼ã¿ãããªã®) ã«åºã¦ããã®ã§ããã¡ã¼ã æ´æ°èªä½ã¯æ¥½ã ãã
wayland or x.org
ãããæªã ã«æ±ºçãã¤ãã¦ãªãã¿ããã ãä½å¹´ãã£ã¦ãã ã
ããããæ¹åãé²ãã§ããã ããGPUç©ãã§ããªããã©ã¤ãã®é¢ä¿ã§x.orgããããç§ã¯ Fractional Scaling (é«è§£å度ãã£ã¹ãã¬ã¤ããèç¼ä»æ§ã«ãããã¤) ã§è¬ã®ãã¤ãºãåºãã®ã§waylandã«ããããå¥ã®åé¡ãããããåºã¦ããã
wayland ã¨ããªããããï¼
é·ã話ã«ãªãããã端æã£ã¦æ¸ãã¨ãLinuxçã¯CLIè³ä¸ä¸»ç¾©ã ãããGUIãªãã¦ãã¾ãã§è¶ ãã¡ãããªä»çµã¿ã§GUI(ã¦ã¤ã³ãã¦ããã¸ã£ã¼)ãå®ç¾ãã¦ãããµã¼ãã¼ã¯ããã§ãããããã¹ã¯ãããã§ãã¤ã¾ã§ãCLIè³ä¸ä¸»ç¾©ã£ã¦ã©ããªãï¼ããå æ¸å¤ãããæ¹è¾ãã¸ãï¼ã¨ãªã£ã¦ waylandãåºãããX æ³å®ã§æ¸ããã¦ããã¢ããªã±ã¼ã·ã§ã³ã¯å½ç¶åããªãããããããã©ããã¼ wayland対å¿ãªãã¦ãããã¼ããã¨ããã¢ããªéçºè ãçµæ§ãããããããã§ã主è¦ãªã¢ããªã¯waylandã§ãåããããã¤ãã¼ãªã®ã¯ãããã¨ããç¶æ ã
ãã¼ãã¼ããªããããã¼ã«
人ã«ãããã俺ã¯ããããªãã¨çãã¦ãããªããx.orgã§åãã¦ãããã®ã waylandã§åãã¨ã¯éããªãããã㯠xremap
ã使ã£ã¦ãããããããã
ã¹ã¯ãªã¼ã³ã·ã§ãã
skitch
ã¨åãã§ããããããããããªããªããªãã
shutter
ãæ©è½çã«æå¼·ã ããwaylandã§åããªãã flameshot
ã¯ããªãè¿ãæä½æã ããæ¥æ¬èªæã¦ãªãã ksnip
ãæ¥æ¬èªæã¦ãªã(ç´æ¥ããã³ããã¯ã§ãã)ãçµå±æ®éã®æ¨æºæ©è½ã§ã¹ã¯ãªã¼ã³ã·ã§ããæ®ã£ã¦ãshutter
ã§ç·¨éã俺ã«ã¯ãã£ã¦ãã
Fraction Scalingãã¦ããã©ã¦ã¶ç»é¢æ±ã
ä»ã®OSã¿ããã«HiDPIãªãã£ã¹ãã¬ã¤ã150%,200%ã¨ãã«ã¹ã±ã¼ã«ãã¦ãããã¬ã¤ã«è¡¨ç¤ºãããªããgnomeã§åºæ¥ã¦ããã§ãããè¨å®ç»é¢èªä½ã¯ãããããã®ãã©ã³ãã§æç»ããã¦ãã®ã§ãããæ¹æ¬¡ç¬¬ãªãã ãããã©ãããã¯æ²ããã俺ã¯ããã¼ãPCã«Linuxå ¥ãã¦ã軽ãããã¦ã§ã¼ã¤ãããããã®ã¨ã¡ããããï¼ã´ãªã´ãªã®æå¼·ã¹ããã¯ãLinuxã§ä½¿ãããããï¼4Kã¢ãã¿ã200%ã§ä½¿ã£ã¦ããããããã¬ç¾ãããæ±ãã¦ãããï¼ããã® 4K 200ï¼ ã®ã¹ã¯ãªã¼ã³ã·ã§ããããããªæã
æ£ç´ãã¼ããããããããã§ãwaylandã®ã»ãã x.orgããã¯ãã¬ã¤ãããã§ãæéã解決ããã®ããªï¼
snap..
詳ããã¯ãããããxxxenvã¿ãããªç¹å®ã¢ããªãã¨ã«ã©ã³ã¿ã¤ã ã使ãåãããããªé¡ã®ãã®ãDockerãããããã¡ãã£ã¨ãããã®ããªã俺ã¯ã¤ã³ãã©å±ã ã£ãããããã®æã®ã·ã¹ãã æ±ããªãç³»ã¯ããããããããï¼ãã¨æåã¯æã£ãããããããã¹ã¯ãªã¼ã³ã·ã§ãããããã¯ãªãããã¼ããã¼ã«ããã®ããã«ãåä½è§£æ±ºãããããªã¢ããªãªãããã§ãããã§ãããfirefoxã®æ¡å¼µæ©è½ã¨ããemacsã¨ãä»ã®ã¢ããªã¨ããã»ã¹ééä¿¡ãããã¤ã¯çµæ§é£åã«ãªãã firefox㯠22.04(21ãããããï¼) snapã«ãªã£ã¦ãã¾ã£ããããããã¼ãã
ããã¨ãã
ãããªãã«è»½ãã»ä½è¨ãªå¿é ãªã
ã»ã¨ãã©ã®äººããçµå±ã¯ãªã¼ã³ã¤ã³ã¹ãã¼ã«ã ã¨æ°ã«å ¥ããªãã¯ããªã®ã§ãããããããããã ããå¤ãªããã»ã¹ããªã½ã¼ã¹é£ã£ã¦ãã¨ãããã¨ã¯ã¾ããªããåææ§ç¯ããä¹ãè¶ããã°ããããªã«ä¸æºãªãããããã¨ã«éä¸ã§ããã
Docker
Linuxã¯ä»ã®æ Docker Desktopããªãã®ã§ãç¨éæããªãã¨ããç¹ã¯ããã®ã ããrootless dockerã¨ããuser mappingãããã¨ãããããããã£ã¦ãã¾ãã¨éçã®docker-composeæ¾ã£ã¦ã㦠upã§åããªãã¨ããã®ã§ä½åº¦ãããã£ã¦ããDockerã¯ä½è¨ãªãã¨ããªãã§ããµã¼ãã¼ã¨åãåããæ¹ã§ããã¨æãã¾ã/ãããã§ããã®ãLinuxã®è¯ãã
çµè«ãã©ã®OSããããã¦é²åãã¦ãªãã
ããã¤ã¹ãã©ã¤ãåé¡ã¯20å¹´åããæ¯ã¹ã¦ã ãã¶ãã·ã«ã¯ãªã£ã¦ããã¯ãã§ããããã³ã·ã§ã³ä¸ãããããªé²åã¯ãªãã«ãèµ·ãã£ã¦ãªããç¹ã«ãã10å¹´ã¯
ããããWinãMacã¯ã©ãããï¼ããã©ãã©ã£ã¡ããã10å¹´ã¯å
¨ç¶é²åãã¦ãªãããããã¦ãããªãä»®æ³åãããï¼ ã¹ããã»å°åããã¤ã¹åããå¿ãããããããä¸çã¬ãã«ã§Desktop OSãªããã¯ããã©ãã§ãããã¨ãããã¨ãã
ä¾å¤ã¯vistaãLonghornã¨ãè¨ããã¦ãã¨ãããããããã¯ã¤ã®è¨æ¶ã«ããã¨ã
Log Volume (GCP Cloud Logging) ã®æéãé«æãªãã ã
Google Cloud Logging ãç°å¸¸ãªè«æ±é¡ã«ãªã£ãããããã®åå ã¨å¯¾çã説æãããè«æ±ã¬ãã¼ãã® Log Volume (Cloud Logging) ããªããé«ããªã¼ã¨èª¿ã¹ã¦ã人ã¯æ£è§£ï¼ããã§ãã
Loggingã¯çµæ§ä½¿ãããéè¦ãªã³ã³ãã¼ãã³ãã«ãããããããåªããã¨ã³ããªãé常ã«å°ãªãããããªä¸ã§ãè¦ãã«å¤ãããã®ã¯ä¸è¨ãã£ãã解説ããã¦ããã¨æãã¾ãã
ä¸è¨ã§å¤§é¨åã®ç¥èã¯å¾ãããã¨ãããã®ã§ãéé¡ãé«ããªã£ãçç±ãæ¸ãã
åå ã¨å¯¾ç
- GCSã®APIã¢ã¯ã»ã¹ãã°ãããã©ã«ãã§
_Default
ã«ã Sink(ã·ã³ã¯ã¯æ¥æ¬äººã«ã¯æå³ãã¶ãããã®ã§ããè¨è¼ãã)ããã - GCSãããªããªè§¦ããªã©ã極端ã«APIã¢ã¯ã»ã¹ãå¤ãããã¸ã§ã¯ãã®å ´åã30daysã®ä¿ææéã¯ã©ãã§ãããã®ã§ãSink対象ã_Defaultããé¤å¤ãã
- GCSã®ãã°ãå¥éä¿æãããã®ãªãã°ããã°ãã±ãã(
_Default
)ã§ã¯ãªããGCSãã±ãããªã©ã«Sinkãã
ä»çµã¿
äºåç¥èä½ããªãã§ã¯æå³ãããããªãã®ã§ãä¸è¨ã®åèã¨ã³ããªãè¦ã¦ããããã¨ãæ¨å¥¨ãã¾ãããç人åãã«éã«æ¸ã
ãã°ãã±ãã/ãã°ã¹ãã¬ã¼ã¸
ã¾ããããGCSã®ãã±ããã¨ã¯éãã¾ããGCSã®ä¸è¦§ã«ã¯åºã¦ããªããGoogleã管ç管è½ãããã¤ãªã®ã§ãGCSãã±ãã®ããã«ã¦ã¼ã¶ã¼ã«ã¯ç´æ¥ã¯è¦ããªãã
_Default
㨠_Required
ã®2ã¤ãããã©ã«ãã§åå¨ãããéãããã®ã¯_Default
ã®æ¹ã
ãã°ã¨ã¯ã¹ããã¼ã©ã§è¦ãã¦ããã®ã¯ããã°ã¹ãã¬ã¼ã¸ã®ä¸ã ã
ã¾ããã°ã«ã¼ã¿ã¼ãç解ããã
ããã¨ãããããã°ã¯ãä¸æ¦ Cloud Logging APIã«å
¥ããããã¾ã§éã¯ããããªãã¯ãã
次ã«ãã°ãã±ããã«Sinkãããããã°ã¨ã¯ã¹ããã¼ã©ã§ã¯ããã®ãã°ãã±ãã®ä¸ã®ãã®ã ããè¦ãã¦ãããããããããããªããç²ç¹ã
Sinkå
ã¯ãGCS,Pub/Sub,BigQueryãªã©é¸ã¹ããããããã¸Sinkãããã®ã¯ãã°ã¨ã¯ã¹ããã¼ã©ã¯é¢ä¿ãªãããSinkãããã¨èªä½ã«ã¯éãããããGCSãªã©ã®ã¹ãã¬ã¼ã¸ã³ã¹ãããããã
ãã°ã¨ã¯ã¹ããã¼ã©ã¯ _Defualt
, _Required
ã©ã£ã¡è¦ã¦ãã®ï¼
両æ¹è¦ã¦ããèªåã¯ãããç解ã§ãã¦ãªãã£ããããããLoggingã¯30æ¥ã¿ãã¨ããæã®ç¥èããã£ãããããªã®ã«ãããã30æ¥ãããåã«è¾¿ãããã©ãã©ããããã¨ï¼ã©ããã«Sink(ãã°ãã±ããã§ã¯ãªããGCSã¨ã)ãã¦ããåæã«ãã£ã¡ã¿ã¦ãããï¼ãã¨æ·±ãèãã¦ãªãã£ããããã㯠_Required
åãè¦ãã¦ããã®ã ã£ãã
ã³ã³ã½ã¼ã«ããã¨ãããªæã
è«æ±ã®è©³ç´°ã«ã¯ãªãã¨åºãï¼
Log Volue (Cloud Logging) ã¨åºã¦ãããSKU-ID: 143F-A1B0-E0BE ãããï¼Loggingã¯30æ¥ã§ããï¼ãªãã§ãããªã«è«æ±ãããã®ï¼ã ãããè¦ã¦ãã人ã¨åãåå ã§ä¿ºã調ã¹å§ããã
ãããã¡ãã£ã¨ãã表ç¾ããã ããã¨ã¯æãããã¾ãééã£ã¦ããªãããä¸è¨ã§èª¬æããã®ã¯ç¡çãã
30æ¥ã®ä¿ææéã¯ããã¨ã¯ã»ã¼é¢ä¿ãªãããã°ãã±ããã«åãè¾¼ãã éãæãã¾ãã課é対象㮠_Default
ã«
ã§ãæªããã¨ã«ãã®ãã°ãã±ããã¸ã®Sinkãè¶ é«ã $0.5/1GB
ç£è¦ã§ããã®ï¼
çµæ§ä¸å¯§ã«UIã«ãåºã¦ãããæ°ã¥ãããã£ããã©ã
Monitoringã«é£ã¶ãªã³ã¯ãã¤ãã¦ãã¦ãããã§å ç®ã§ãªããã¯ãããããã®ã¨ãã®ã¡ããªãã¯ã¹ã¯xxx Ingest
ã¨ãæ¸ãã¦ãããã¦ã¼ã¶ã¼ããè¦ãã ingestã¨ã¯éã®æè¦ã ãªã
対ç _Default
ã«ç¹å®ã¤ãã³ããé£ã¶ãã¨ãããã
俺ã®å ´åã¯ãGCSã®ã¤ãã³ãã ã£ããã¾ããAWSã®æè¦ããããããGCSã®ã¤ãã³ããããã©ã«ãã§å ¨é¨åãè¾¼ã¾ããã®ã¯ é ãããã æå¥ã¯å¾ã§ã¾ã¨ãã¦æ¸ããã
_Default
ã«ã¤ãã¦ã¯ãã©ããSinkã®å¯¾è±¡ã¨ãããã®è¨å®ãã§ããã®ã§ã GCSã®ã¤ãã³ããé¤å¤ããè¨å®ãå
¥ãããæéã¯åã¾ã£ããç¹°ãè¿ããã©ã30æ¥ã縮ãã¦ããã¿ãªããããã
NOTã«è¿½å ããããé¤å¤ã«æå®ãããã¯ã好ããªããã«
_Default
ã¸ã® Sinkããããã GCSã¸ã®Sinkã¨ãã失æããªãï¼
大ä¸å¤«ã失æããªããä¸ã§ç¤ºããæ¦è¦å³ã¿ã¦ãGCSãªã©ãã°ãã±ãã以å¤ã¸ã®Sink㯠_Defaultããã®Sinkã§ã¯ãªãããã
ãã¡åºãã»æå¥
Cloud Logging 㯠AWS CloudWatch Logsã¨å¤§ä½åãã§ãAWSã®æè¦ããããã¨ï¼ãã¤ã¦ãä»ã¯éãï¼ã30æ¥ã¿ãã¯å¤ªã£è ¹ãã«è¦ããããGCSã®ãã°ãå ¨é¨ããã©ã«ãã§åå¾ããå¤æã¯ãªããããããã¸ããã ã£ã¦AWSã§ããããã åã«CloudTrailã§S3ã«ãã¡ã¤ã«åãåºãã ãã§ããããã©ã«ã Offã«ãã¦ãã®ã«ãããã«10å以ä¸ãå価ã®é«ãCloudWatch Logsã«å ¨é¨æã¡è¾¼ãã¨ããæ£æ°ã®æ²æ±°ãããªãã
ãã¡ããããã°ã¹ãã¬ã¼ã¸ãé«ãã®ã¯ãããããã°ã¨ã¯ã¹ããã¼ã©ããã°ããã¡ããªãã¯ã¹ä½ããã®ã§é«æ©è½ã ãã ããããã©ã«ãã§å
¨é¨çªã£çµãã®ã¯ããããè¿·æã
ææã¨ãã¦ã¯ããã°ã¨ã¯ã¹ããã¼ã©ã§ãªããããªãã¦ãGCSã®ãã°è¦ãã¾ã£ãï¼ç£æ»ãããããªã¢ãã¼ã«ããããã ããããã¢ããªéçºè
ã¯èªåã®æãããã°ãã·ã¥ãã¨è¦ããã°ããããããã ããéªéãããã¤ã³ãã©é¨åã®èª¬æã¯è¦ãé ããããã ãããã§ãããã§ã¦ã¼ã¶ã¼ã¸ã®èª¬æ端æã£ã¦ããã¦ã¼ã¶ã¼ã®å¦ç¿ãã¹ãã¤ã«ãã¦ãããã¾ãããã¨ã ã¨ã¯æãããªãç¾ã«ã¯ã¬ã¼ã æ¥ãããããããæéã¢ã©ã¼ã ã®ãªã³ã¯ã¤ãã¦ããã§ããï¼
æ°ã¥ããã®ã¯ GCSã ãã ããåãããã«ãµã¼ãã¹APIã大éã«ãã°ãä½ããµã¼ãã¹ã¯ä»ã«ãããã ãããã£ã¨ã
俺ãé¸æã«è¡ãçç±
é¸æç´åã ãããªãã¨ãªãæ¸ããããªã£ãã®ã§æ¸ãã俺ãé¸æã«è¡ãçç±ããã㯠ç¥ãã«åå ãããããï¼
俺ã®ä»ã¾ã§
俺ã¨é¸æ
俺ã¯ãããããã¹ã¸ã§ãä¸ä»£ã俺ãè¥è ã®ã¨ãããã¡ããããæè¿ã®è¥è ã®æ票çã¬ã¼ãã¨è¨ããã¦ããããããªã®æ§ããã1åãé¤ãã¦ãã¹ã¦ã®é¸æ権ã¯è¡ä½¿ãã¦ãããå¯ä¸æ票ã§ããªãã£ãã®ã¯ã2é±éããã風éªã§å¯è¾¼ãã ãã¨ãããããã®ã¨ãã ãã¯ç¡çã ã£ããçå¤è³ã®ä¿ºã§ãããããã¨ãã¯ãããã¡ãªã¿ã«ä¿ºã¯ã©ããã®å å¡ã§ããªãããæ´»å家ã§ããªãã
俺ã¨è¦ªç¶
親ç¶ãããè¨ã£ã¦ããã誰ã«æ票ãã¦ãåããï¼ããããã¤ã¯å½é¸ãããªãã¨ããæ票ãªãè¡ããï¼ãã俺ã®ç¥ãåã§ã¯ã親ç¶ã¯ä¸åº¦ãæ票ããªãã£ãã¯ãããããå½é¸ãããªãé¸æããã£ã¦ãè¡ããªãã£ãã ããã俺ãé¸æã«è¡ãã®ã¯ããã®ååãããããªããã ã£ã¦ä¿ºã®ããã ã®70%ã¯å骨精ç¥ã§ã§ãã¦ããããã
俺ã®20代
20代ã¯ç¬èº«ã§ããªã¢å ã§ã¯ãªãã£ããå¥ã«æ¿æ²»ã«èå³ããã£ãããã§ããªãã£ãããæã¤ã¶ãã«é¸æã«è¡ã£ã¦ãã®ãããããªããããã20代ã®ä¿ºããªã¢å ã ã£ããã©ãã ããï¼ããã§ãå¤åé¸æã¯è¡ã£ã¦ãã¨æããã ã£ã¦ä¿ºã¯ã²ããããã®ã ããã
俺ã¨æ°·æ²³æ
ããããã®å°±è·æ°·æ²³æã§ããä»ã»ã©ãæ¿æ²»ãããããããã®äººãæ¦ç¯ãã¨ã¯è¨ããã¦ãªãã£ããªãã¨ãããã俺èªèº«ã¯éè¯ãçãã®ããã¦ããããã®ãããæ¿æ²»ãæ¨ãã ãã¨ãã®ææ ã¯ãªãã£ãããã ãåä¸ä»£ã®è¦ããã§ãã人ã«ãæ ¹æ§ããªãã ãï¼èªå·±è²¬ä»»ã ãã¨ã¯çµ¶å¯¾ã«è¨ããªããéã«ããããã®èãã¨ã¾ãã§ã ã«ã¤ãã
俺ã¨å¦»ã¨å®¶åº
妻ããæ票ãããªããããã©ãããªããã®äººã«å
¥ãããã¨é¸æã«ã¯åã®ããã®äººã ãçµå©ããã¨ãåä¾ãã§ããã¨é¸æã©ãããããªã
ãã¨ãããã ãããã幸ã俺ã¯é¸æã«è¡ããããç°å¢ã«ãããææ¥åæ票ãããã¨ããã£ããªã
èªåèªãã®çç±
誰ãã俺ã¨åããããªç°å¢ã«ããããã§ã¯ãªããã©ããã¦ãè¡ããªããã¨ã ã£ã¦ããã ãããæ¿æ²»ã«èå³ãªã人ãããã ãããä¸ç¥¨ãªãã¦ç¡é§ã¨èããã²ã¨ãããã ãããããã¯æ§ããªããå°éãã¹ãã ãã¿ããªäºæ ããããã俺ã¨åãç°å¢ã§ããªããå¤ã«æãææ¸ãªãã§ãããããã¤ããããããµãã«æããè£è¶³ã
é¸æã¯ç¥ã?
æ票æã«è¡ããå¤ã«é¸æéå ±ãè¦ããèªåã®å ¥ãã票ã¨ãæ¯ææ¿å ã¨ãã®çµæãã¿ããããã ãã§æ¥½ãããç¥ãã ã¨ã³ã¿ã¡ã ãããããã ã®ç¥ãã¨éã£ã¦ãç¥ãã®ãã¨ã®æ¥ã ã«ãå½±é¿ããã
æ票ããªãã¨ãããã¨
æ票ã¯ç¾©åã§ã¯ãªããå¼·å¶ã§ã¯ãªããæ票ããªãã¨ãããã¨ã¯ãä¸ã®ä¸ã®ä»ã®äººã«å§ä»»ããã¨ãè¨ããã¨æããããããããèªåãæ票ãã¦ãå¤ãªäººãæ¿æ²»å®¶ã«ãªãããããªãä»äººã«å¤æãå§ããã¨ããã®ãããã ããããããã¯åã«ããã©ãããã¨ãã人ãããã ããããã©ã¡ãã«ãæªããã¨ã ã¨æããªãã
æ票義ååã¨ãã話ããããããããããã¾ããããã¨ã ã¨ã¯æããªããä¸çæ¿æ²»ã«ç¡é¢å¿ã¨ãã人çããã£ã¦ããããããã人ãããã»ããããããã
æ票ããã¨ãããã¨
ä¸ã®ä¸ã«ä¸ããå½±é¿ã¨ãã¦ã¯ã誰ããæ¯æããã¨ãã1票ã«ãªãããããã¯å«ããªåè£è ãå½é¸ãããªãããã®1票ã対æã«ãããã¨ãããã¨ã«ãªãã俺ã¯ãã®æå³ããããèªåèªèº«ã«ä¸ããå½±é¿ã®ã»ãã大äºã ã¨ããã£ã¦ããã
èªåã§æ票ã®ãããã¨æå³ï¼æ±ºæãä»äººä»»ãã«ããªã
ä»äººä»»ããå«ãªãç«åè£ãããã¨ããã®ãããããã¾ã俺ããå½é¸ããªãããããå¹´ãã大人ãªããããããï¼ ã»ã¼çå¤è³ã§æ票ãã¦ãããæ¿æ¨©ãå¤ãã£ãã¨ãã«èªåã¯ã©ãã«å ¥ãããã¨ãã大ä½è¦ãã¦ãã ããªãã§ãã®ã¨ããããã«å ¥ãããã ããï¼ãã俺ã®1票ç¡é§ã ã£ããªããç½ç¥¨ã§ãæå³ãããããå¾æãããã¨ããå¾å´æããããããã£ãã ã§ã俺ã¯é¸æã«åå ãããã ãã責任ããããæåã失æãå¾æãç¡åæãå ¨é¨èªåã®ãã¨ã«ãªããã ãã次ã®é¸æã¯ã©ããããã¨èããããã
ç´ äººãå£åºããªã ã¨ï¼ãã ã
è¥ããã¤ã¯æ¿æ²»ã«èå³ãªãã¨ããèªåã®ãã¨ã¨ãã¦èããããªãã ã¨ãããã¡ããã¡ãè¨ã£ã¦ãã®ãè¦ãããè¥ãé ã®ä¿ºã¯å¤§ããèãããªãç¥ãã ã¨æã£ã¦é¸æã«è¡ã£ããããã§ä½ããããï¼
ãã¹ã³ãã«å½±é¿ããã¦æ票ãããããã¥ãªã¹ããè¦æããã«æ票ãããå§åããã®ã«ããããæ票ãããã©ããªçµæã§ããåå ããªãã¨èªåã®çµé¨ã«ã¯ãªããªã
ãæ票ããªããã¨ã¯å§ä»»ã§ãããããã®èãã¯å°éãããã¹ãã ããã©ããã¦ãå½äºè
æèã¯èãããã俺以å¤ã®ä¸éã®ãã«ã©ãããããããªããã¤ã«é¨ããã¦å½é¸ãããããã¨æ¿æ²»ãæªããªã£ã¦ãããããã¨ããæå¥ãããã¨ãã§ãããã ã£ã¦èªåã¯åå ãã¦ããªãã®ã ãããå
¨é¨ä»äººã®ããã«ã§ããããã
è¥ããã¡ã¯æ¿æ²»ãªããããããããã®ã¨ããã ã俺ã ã£ã¦ããã ã£ããã¸ã¸ã¤ã«ãªã£ãä»ã§ãæ¿æ²»ãªããããããããã誰ãã®ææã«é¨ããã¦ãã®ãããããªããã§ãããã®ã¨ãã®å¤æã¯è¯ãã£ãã»æªãã£ãã¯ã¯ã£ããèªåã®ä¸ã«æ®ã£ã¦ãããããã¦æ¬¡ã¯ããããã¨èããããã«ãªãããããã¯ãããã¼ã ãããæ票ãã¦ããããã
æè¨ãã¦ããã
ãããæ¿æ²»ããããè¥è ããã ããã«æåããã¦ã¤ããã¼ãªãã¤ãå½é¸ãããã«ãªã£ã¦ãæ§ãããå°ãªãã¨ã俺ã¯é»æ¢ããããã«å¯¾æã«ç¥¨ãããã次ã®é¸æãä»®ã«ãããªãã¨ã«ãªã£ã¦ãèªåã§ç´å¾ã§ããããã«é¸æã«è¡ãããã¤ã§ãã
ã§ããã³ãã«é¸æã¯ç¥ãï¼ã§ããã®ï¼
ãããããèªåã®é¸æ権ãã©ã使ãããä»äººã«ã¨ãããè¨ãããçåãç¡ããããªã§é¸ãã§å ¨ç¶OKãé¸æããããããããã¨ãããªãããã£ã¡åªå ã§ãããããã ã²ã¨ãã¨ããã¨ãé¸æãçµæ§ããããã§ï¼ã
ãã±ããããªã·ã¼ã¨CloudTrail Logã®çµã¿åãã
ä»åæ¸ããã¨ã¯ããããã§ã«æå¢ãã¤ãã¦ããã®ã§ããªãã¹ãããã£ã¨æ¸ãã¾ãã
2022/02/01ä»æ´ã§ããæ´æ° ACLãããã°ãã¹ã¦è§£æ±ºï¼
【アップデート】S3でACLを無効化できるようになりました #reinvent | DevelopersIO
ãã¼ãã¯ãã±ããããªã·ã¼ã¨ã¯ãã¹ã¢ã«ã¦ã³ãã¢ã¯ã»ã¹ã§ããæ¬ã¨ã³ããªã§ãå°ãã ã触ãã¾ãããåçã¯ãã¡ã
æ°æ©è½ãµã¤ã³ã¼ãªè©±ãªãã§ãããéç¨è¦ç¹ã§æ¸ãã¾ãã
ãã±ããããªã·ã¼çºåæ¡ä»¶
ãã±ããããªã·ã¼ãè¨å®ãããçºåã¨ããããªãããããªã話ã§ã¯ãªãããã±ãã®ææè
ã¨ã»ãªãã¸ã§ã¯ãã®ææè
ãä¸è´ãã¦ããã¨ãã®ã¿çºåãã¾ã
ããã¯é ã«å©ãè¾¼ããããããã¬ãã¨ãããããããªããªã
æåã®ç¢ºèª
ãã±ãã®ææè
ãã¯ãã¹ã¢ã«ã¦ã³ãã¢ã¯ã»ã¹ã«ãã£ã¦æ¸ãæãããããã¨ã¯ããã¾ããããã£ã¦ãã¯ãã¹ã¢ã«ã¦ã³ãã¢ã¯ã»ã¹ã®æ¸ãè¾¼ã¿ã«ãã£ã¦ãã±ãã®ææè
ã¯çµ¶å¯¾ã«å¤ããã¾ãããããããªãã¸ã§ã¯ãææè
ã¯ã¢ãããã¼ãããAWSã¢ã«ã¦ã³ãã®ã®ãã®ã«ãªãã¾ããSSè²¼ã£ã¨ãã¾ãã
ããã æ®éã®ãªãã¸ã§ã¯ã ãã±ã=ãªãã¸ã§ã¯ã
ããã åé¡ã®ãªãã¸ã§ã¯ã ãã±ãâ ãªãã¸ã§ã¯ã
ä¸è¨ã«æ¸ãã¾ãããããã±ãã«å¯¾ããAPI ListBucket(ListObjectã§ã¯ãªãããããæªããã²ã¨ãã°ã°ã£ã¦)ã¯éãã¾ããaws s3 ls
ã§ãªãã¸ã§ã¯ãã®æç¡ã¯è¦ããããããGetObjectã¯éãã¾ãããä¸è¨ã®SSã¯ä¸ã¤ã®ãã±ãã«ãæ®éã®ãªãã¸ã§ã¯ãã¨ææè
éãã®ãªãã¸ã§ã¯ããæ··ããããããªç¶æ
ã§ãæ®éã®ãªãã¸ã§ã¯ãã«å¯¾ãã¦ã¯ GetObjectã¯éã
- ãã±ãææè ã¨ãªãã¸ã§ã¯ãææè ãéãã¨ãã±ããããªã·ã¼ã¯å¹ããªã
- ãã±ãææè
ã¨ãªãã¸ã§ã¯ãææè
ãéã£ã¦ãã(ãã±ããããªã·ã¼ã§ListObjectãã¤ãã¦ãã)
aws s3 ls
ã¯éã - ä¸ã¤ã®ãã±ãã«ãææè åã/ææè ç°ãªããªãã¸ã§ã¯ããæ··å¨ãããã¨ã¯ã§ããããã®å ´åãææè åããªãã¸ã§ã¯ãã«é¢ãã¦ã¯ãã±ããããªã·ã¼ã¯æå¹
ã¯ãã¹ã¢ã«ã¦ã³ãã¢ã¯ã»ã¹ã«ããæ¸ãè¾¼ã¿ã¯ãå®ã¯ãã¹ã¦ã®AWSã¢ã«ã¦ã³ãã§çºçãã¦ãã
ä»åã®ãã¼ãã¯ããã§ããã¯ãã¹ã¢ã«ã¦ã³ãããã®æ¸ãè¾¼ã¿ã£ã¦ãç¹æ®ãªãã¨ã«æãã¾ãããå®ã¯ã»ã¼å
¨ã¦ã®AWSã¢ã«ã¦ã³ãã§çºçãã¦ãã¾ãã
ã©ãã§ï¼ 確èªã§ãã¦ããã¨ããã§ãCloudTrailã¨ELBã®ãã°(ä»ã«ããããã)
ããããAWSãåºããã°ã£ã¦ã©ãåºãã¦ãï¼
CloudTrailã®S3Exportãããããã§ä½ãã¨S3å´ã«ã¯ãã±ããããªã·ã¼ãæ¸ããã¦ãã¾ãã
CloudTrail の Amazon S3 バケットポリシー - AWS CloudTrail
èªåã®ã¢ã«ã¦ã³ãã¨ç°ãªããAWSèªèº«ãç´æ¥ç®¡è½ãã¦ããã¢ã«ã¦ã³ãããã®æ¸ãè¾¼ã¿ãçºçãã¾ããã¤ã¾ãããã ã¯ãã¹ã¢ã«ã¦ã³ãã«ããæ¸ãè¾¼ã¿ã§ã
ãªãã«ãèããã«ã¯ãã¹ã¢ã«ã¦ã³ãã§æ¸ãè¾¼ãã§ãã¾ãã¨ããã®ãã±ãã®ãªã¼ãã¼ãèªããªããªã£ã¦ãã¾ãã®ã§ bucket-owner-full-control
ãå¿
é ã«ãã¦ãã¾ããELBããã±ããããªã·ã¼ããã¿ãã¨ãåãæåã®ã¯ãã
ä½ãå°ãã®ï¼
bucket-owner-full-control
ãã¤ãã¦ãã®ã§ããã±ãææè
(ã®ã¢ã«ã¦ã³ã)ã§ããã°åé¡ãªãã§ããããããã§ãã±ããããªã·ã¼ã«ããã¯ãã¹ã¢ã«ã¦ã³ãã¢ã¯ã»ã¹ããããã¨ããã¨ã ãããã±ããããªã·ã¼ã¯ãã±ãææè
ã¨ãªãã¸ã§ã¯ãææè
ãéãã¨ãã±ããããªã·ã¼ã¯å¹ããªã
ã¨ããéã®æãããããã
ã©ãããã°ãã?
ããããã®äºº
ã§ããè¨å®æ¹æ³ã¯æåã«ãã¤ã³ãããã¨ãããè¦ã¦ãã ãããæ£ç´ãªã¨ããããã®è¨å®ããã¦æã¯ããªãã¨æãã®ã§ãä»å¾ä½è£½ããS3ãã±ããã¯ä¸å¾ãã®ããªãã¸ã§ã¯ãææè
ã¨ãã±ãææè
ãä¸è´ãããè¨å®ããã¦ããã¦åé¡ãªã
ã§ãããã
ãããªãã¸ã§ã¯ããã£ã±ããã人
æ©è½æ¡å¼µã«ãããACLãããã§ãã¹ã¦è§£æ±ºãACLæ©è½ãåããã¦ããã®ã§ããªãã¸ã§ã¯ãã®ãªã¼ãã¼ã誰ã¨ãä¸åé¢ä¿ãªãã®ã§ãæ¢åãªãã¸ã§ã¯ããåé¡ãªãã§ããã
Linuxãã£ãã chown
ããã°ããã§ãããS3ã¯ææè
ãå¤æ´ããAPIã¯çãã¦ã¾ãããã°ã°ãã¨ãããªãåºã¦ãã¾ãã
ãã£ã¨è¦ã¦ã¿ãã¨ãs3 sync ã§æ°ããªãã±ãã«ã³ãã¼ã§ããã¤ã¾ããåä¸ãªãã¸ã§ã¯ãã®ææè ã ãå¤ããæ¹æ³ã¯åå¨ããªãã
ã¾ã¨ã
ãã±ãææè ã¨ãªãã¸ã§ã¯ãææè ã | bucket-owner-full-control | ã¢ã¯ã»ã¹å¯è½ |
---|---|---|
åã | ã¤ãã¦ãªãã¦ãOK | ãã±ããããªã·ã¼æå¹ |
éã | ã¤ãã¦ãã | ãã±ããããªã·ã¼ç¡å¹ï¼ãã±ãææè ã¯è¦ãã |
éã | ã¤ãã¦ãªã | ãã±ããããªã·ã¼ç¡å¹ï¼ãªãã¸ã§ã¯ããªã¼ãã¼ã®ã¿ã¢ã¯ã»ã¹å¯è½ |
- ACLããã¦ã¿ããªãããã¼
- ä»å¾ä½è£½ããS3ãã±ããã¯ä¸å¾ãªãã¸ã§ã¯ãææè ã¨ãã±ãææè ãä¸è´ãããè¨å®ãOnã§OK
- AWSãã°ç³»ã®åºåã¯ã¯ãã¹ã¢ã«ã¦ã³ãã¢ã¯ã»ã¹ãçµæ§çºçãã¦ããã®ã§ã¯ãã¹ã¢ã«ã¦ã³ãã§ã®èªã¿è¾¼ã¿ãããå ´åã¯æ³¨æ
- ææè ã ããå¤ããAPIã¯æªã (2021/03/22)åå¨ããªã
terraform 㧠gcp iam管çã«å ¥éãã¦ã¿ã
terraform 㧠gcpã®IAMã管çãã¦ã¿ãã¨ãã®ã¡ã¢
GCP/AWS ç¨èªå¯¾å¿è¡¨
AWSããterraformã触ã£ã人ãå¤æ°æ´¾ã¨æãã®ã§ãç¨èªã®æå³éããçµæ§ãªè½ã¨ãç©´ã§ãããªã®ã§æ´çãã¨ãã¾ãã
AWS | GCP | memo |
---|---|---|
User | Google ã¢ã«ã¦ã³ã | GCPããåºãä¸ç |
Group | Google Group | åä¸ |
Role | ServiceAccount | å³å¯ã«ã¯ç°ãªããã ããã |
Policy | Role | ã¤ãããå«ããããï¼ |
PolicyAttachment | IAM_member | terraformä¸ |
該å½ãªãï¼ | Policy | terraformä¸? |
ã¾ãUserã¨Groupã«ã¤ãã¦ãGCPã®IAMã¯èªè¨¼æ©è½ã¯æãããåºæ¬çã«èªå¯ã ãããã¾ããèªè¨¼ã¯ãGCPã«éããä¸çã§ã¯ãªããGooleã¢ã«ã¦ã³ã/Groupã§è¡ã£ã¦ãã¾ããGmailã®ããªã¼ã¢ã«ã¦ã³ãããGoogle Workspaceã®ã¡ã¢ããã¦ã¼ã¶ã¼ã«è©²å½ãã¾ãã
次ã«AWSã®Roleã«å¯¾å¿ãããã®ã¯ãServiceAccount(SA)ã¨ãããã®ã§ããGCPã«ãRoleãããã¾ãããããã¯AWSã®Policyã«ç¸å½ãã¾ããã¾ããè±èªã®æå³ã¯ãã£ã¦ã¾ãããå¾çºãªã®ã§æ¢ãã¦å¤ãããã§ããããããAWSã®Roleã¯ä¸»ã«äººé以å¤ã®ãµã¼ããSAMLã§ä½¿ããã®ã§ãããGCPã§åããã¨ããå ´åã人é以å¤ã®ããã«ã¡ã¼ã«ã¢ãã¬ã¹(ã¡ã¼ã«ã¯åä¿¡ã§ããªãã)ãæãåºãã¾ãããããServiceAccountã¨è¦ã¦ããã
AWSã®Policy=GCPã®Roleã¯èªå¯å 容ã®ã»ããã»å¡ã§ããGCSã®å ¨æ¨©éãæã¤ã¨ããGCEä½ã§ãã§ãã権éã¨ããæãã¾ããAWSã®IAMã®ããã«ã©ã®ãµã¼ãã¹ã®ä½ãã§ããã¨ãããã¨ã¯åå¥ã§æå®ã§ãã¾ãããæåã®ãã¡ã¯ãããªã»ããã®Roleãç¨æããã¦ããã®ã§ããã§ã»ã¼ãã¨ã足ããã¯ãã§ããããªã»ããã®Role=AWSã®AWSManagedã®Policyã§ããGCPã®Roleã¯èªä½ãã§ãã¾ãã
注æåèµ·ã§ããgoogle_project_iam_policy
ã¨ããAWS触ã£ã人ãªãããã«ããããããªããã®ãããã¾ãããåºæ¬ããã£ã¡ãã ãã§ããæ¬çªã§ããã¨å³æ»ããã
Terraform x GCP で、IAM権限を全削除してしまった - Qiita
æå¾ã«PolicyAttachmentãããã¯å³å¯ã«ã¯AWSã§ã¯ãªããterraformã®è©±ã§ãããã©ã®AWS User/Roleãã©ã®Policyã¨ç´ä»ãã¦ããããã¤ãªããã®ã§ãããããGCPã§ã¯ google_project_iam_member
ã«è©²å½ãã¾ãã
terraformã§ã®èªå¯ã®æ¯ãæ¹
2ã¤ããæ¹ãããã¾ããgoogle_project_iam_binding
㨠google_project_iam_member
ã§ããçµè«ãå
ã«æ¸ãã¾ãããAWSã®terraformçè
ã§ããã° google_project_iam_member
ä¸æã§ãããgoogle_project_iam_binding
ãã©ããã¦ã使ãããå ´åã§ãã£ã¦ãã人éã¦ã¼ã¶ã¼ã使ããã®ã ãã«é©å¿ããã®ãæã¾ãããServiceAccountã§ä½¿ãã®ã¯æªæã§ãããã®èª¬æãæ¸ãã
google_project_iam_binding
Roleã主ä½ã«ãã¦ãããã使ã人ãServiceAccountãåæãã¾ããã ãã members = [...] ã§æå®ãã¾ããAWSã§terraformããããæãããã£ã¦ã人ãªãããã«ãããã¨æãã¾ãããããã使ã£ã¦ã=æ»äº¡ãã©ã°ã§ãã
google_project_iam_member
Member=使ã人ãServiceAccountã¨Roleã1対1ã§ç´ã¥ãã¾ããaws provider (terraform) ã® IamPolicyAttachmentã§ãã1対1ç´ã¥ãã®éè¦ããç¥ã£ã¦ãã人ã¯ããããå ã¯èªã¾ãªãã¦ããã§ãããç²ãæ§ã§ããã
1対1ç´ã¥ãã§ãªãã¨ä½ãã¾ããã®ã?
terraformã®ç¿ç度次第ã§ã¯ããããªã®ä¿ºã«ã¯é¢ä¿ãªãããã¨ãªããããããªãã§ãããç¥ã£ã¦ã¦æã¯ãªãã¨æãã®ã§ã¾ããèªãã§ãã ããã
ç§ãèªèããterraformã®è¯ãã®ä¸ã¤ã«ãã³ã¼ãã§ç®¡çãã対象(ãã±ããGCE-VM GCPã®ãªã½ã¼ã¹ã®ãã¨)ãé¸ã¹ãããæãã¾ããä¾ãã°åãGCPããã¸ã§ã¯ãã§ãããã®ãã¼ã ã¯VPCã ãããã®ãã¼ã ã¯GCSã ãã¨ãããããããç°ãªãtfstate(å®æ
ã¨ãã¦ã¯ãã£ã¬ã¯ããªã¨ãªã)ã§ç®¡çã§ããç¹ã§ãã
ãã¤ã³ãã©ãªã®ã§ã1æ岩ã§1ããã¸ã§ã¯ã1ãã£ã¬ã¯ããªã§å
¨é¨ã®ãªã½ã¼ã¹ã管çããªãã¨ãã¡ãã¨ãã管çããªã·ã¼ããã¡ããééãã§ã¯ãªãã§ãããã¦ã¼ã¶ã¼ãé¸ã¹ãã¨ããç¹ãåªãã¦ããå«ãªãåå²ããªããããã
ã§ãgoogle_project_iam_binding
ã使ã£ã¦ãã¾ãã¨ããã®ç®¡ç対象ãå®è³ªçã«åå²ãããã¨ãã§ããªããªã£ã¦ãã¾ãã¾ãã(ã§ããªãã¯ãªãããéç¨ã大å¤)ã¾ãããã£ã¬ã¯ããªåå²ããªãã¦ãtfãã¡ã¤ã«ã¯ããªãä¸æ ¼å¥½ã«ãªãã¾ãã
ããä¸ã¤ã¯ terraform workspaceã使ã£ã¦ããå ´åã(ç¥ã£ã¦ãã¨æããã©)å±ãªãã§ããåé¿æ¹æ³ã¯ google_project_iam_member
ã使ãã§ãã
å®è¨¼1 (ç¥ã¬ãã¥ã¢ãããã°é¿ããããããï¼)
åã®äºã®è¨ããã«ããã£ã¨tffileãæ¸ãã¾ããã¾ãã¯åå²ããªããã©applyå¾ã«å»¶ã ã¨diffãåºããã¿ã¼ã³ã§ã
resource "google_service_account" "sa-one" { account_id = "sa-one" display_name = "sa-one" description = "ãã¹ãç¨1" } resource "google_project_iam_binding" "sa-one" { role = "roles/storage.hmacKeyAdmin" members = ["serviceAccount:${google_service_account.sa-one.email}"] } ### 1ã¶æå¾ã«èª°ããsa2ã追å resource "google_service_account" "sa-two" { account_id = "sa-two" display_name = "sa-two" description = "ãã¹ãç¨2" } resource "google_project_iam_binding" "sa-two" { role = "roles/storage.hmacKeyAdmin" members = ["serviceAccount:${google_service_account.sa-two.email}"] }
Roleã¯ééã£ã¦æµãã¦ãããããã«ãæ®æ®µä½¿ããã§ããããã¤ãæãã¦ã¾ããsa-one ã«ãã®ãã¼ã«ãå½ã¦ã¦ãã®å¾ãsa-twoã«ããã®ãã¼ã«ãå½ã¦ããã¨ãã¦ã¾ãããã㯠plan/applyã¨ãã«éãã¾ãããããapplyå¾ã« planãå©ãã¨å·®åãåºã¾ããã¨ãããä½åapplyããããæ°¸é ã«åºã¾ãããªããï¼
google_project_iam_binding
ã®æ¸ãæ¹ãééã£ã¦ãã¾ããmembers = [] ã§2ã¤ã®SAãåæããªãã¨ã ãã§ããæ£ãã使ãæ¹ã¯ãRoleã主ä½ã§èããã®ã§ãããã使ã£ã¦ãã人ã»SAãå
¨é¨åæããã¨ãããã¨ã«ãªãã¾ãããããã¨ã¦ãæããããã¨ãèµ·ãã£ã¦ã¾ããä»®ã«äººã¢ã«ã¦ã³ãã®Roleå²å½ã¯ä¸återraform管è½ã«ãã¦ããªãå ´åã«ãä¸è¨ã®RoleãProject/Editorã ã£ããããå ´åãApplyããã人ã¢ã«ã¦ã³ãããEditor権éå
¨é¨å¥å¥ªããã¾ãããã®ãããä¾ã§ã¯ã©ãã§ãããRoleãæ¡ç¨ãã¦ã¾ãã
terraformã³ã¼ã管çãã¦ã¾ããReviewãéããªãã¨Applyã§ããªãã¨ããéç¨ããã¦ã¾ããsa-oneãåèã«ãã¦sa-twoããã¼ã¹ã³ããã§PRåºãã¾ãããPlanãã°ãªã¼ã³ã§ããããã¬ãã¥ã¼ãã¦ãã ããï¼ç§ã¯æ¥ãã§ã¾ãï¼ãããã§ã¬ãã¥ã¼ã§NGã ãã¾ããï¼ ã·ã³ãã«ã« google_project_iam_binding
㧠grepãã¦å¼ã£ããã£ããããããããã§ããããã®éç¨ããã§ããªãããããªãããªã
ä»åã¯ã1ãã£ã¬ã¯ããªã«2ã¤ã®SAã両æ¹æ¸ãã¾ãããããã£ã¬ã¯ããªåå²ããtfstateåé¢ãã¦ããæ²æ¨ã§ããä»ã®ãã£ã¬ã¯ããªã®SAã§ãRoleã®åç §ãããããªããã調ã¹ã¦å¿åº¦ãç¶ããªããã°ãªããªãã
å®è¨¼2 (workspaceãã¿ã¼ã³)
workspaceã§ã試ãã¦ã¿ãããã¡ãã¯workspaceåãæ¿ãå¾ã®applyã§å·®åãåºãã®ã§æ°ã¥ãããã£ã³ã¹ã¯ãã
resource "google_service_account" "sa-one" { account_id = "sa-one-${terraform.workspace}" display_name = "sa-one" description = "ãã¹ãç¨1" } resource "google_project_iam_binding" "sa-one" { role = "roles/storage.hmacKeyAdmin" members = ["serviceAccount:${google_service_account.sa-one.email}"] }
defaultã§applyãããã¨ãå¥workspace(production)ã§applyããã¨ãå·®åãåºã¾ãã
Resource actions are indicated with the following symbols: ~ update in-place Terraform will perform the following actions: # google_project_iam_binding.sa-one will be updated in-place ~ resource "google_project_iam_binding" "sa-one" { id = "pj/roles/storage.hmacKeyAdmin" ~ members = [ - "serviceAccount:[email protected]", + "serviceAccount:[email protected]", ] # (3 unchanged attributes hidden) } Plan: 0 to add, 1 to change, 0 to destroy.
å·®åãåºãåçã¯åãã§ãããã¡ããã¨æ³å®å¤ã®ãåºã¦ããåã ãã¾ãããã
ã¾ã¨ã
- GCPã§ã人ã»SAã¨Roleã®ç´ã¥ãã¯1対1
google_project_iam_member
ãæ¨å¥¨ãã¾ã google_project_iam_binding
ãã©ããã¦ã使ãããå ´åã¯ã(ã¡ãã£ã¨è¦ããã¨æãã) SAã«å²ãå½ã¦ãRoleã¯å ¨é¨ã¹ã¿ã ã§ãSAã«ããå²ãå½ã¦ãªãéç¨ã¨ãã
ã¨ã³ã¸ãã¢ãªã®ã§ãã³ã¼ãçãæ¸ããããDRYã«æ¸ããããå¤æ°ã§ã«ã¼ããããããããããã¾ãããããIAMè¨å®ã¯ãã¹ã£ãã¨ãã®ãã¡ã¼ã¸ã大ããããã®ã§ããªã¹ã¯ããã³ãã®åé¿çã¨ã天秤ã«ããã¦é¸æãã¦ãã ããã