åœèšäºã§ã¯ãGoogle CloudïŒæ§ç§° GCPïŒã® BigQuery ã«ç¹å®ã® IP ã¢ãã¬ã¹ããã®ã¢ã¯ã»ã¹ã®ã¿ãèš±å¯ãã VPC Service Controls ãèšå®ãã€ã€ãLooker Studio ã«ã¯ IP ã¢ãã¬ã¹ã®å¶éããããã¬ããŒããé²èЧã§ããããã«ããæ¹æ³ã玹ä»ããŸãã ãµãŒãã¹ã»æ©èœã®æŠèŠ VPC Service Controls Looker Studio ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éåçš VPC Service Controls ãš Looker Studio 宿œå
容 æ§æå³ äºåæºå Cloud Storage ã®èšå® BigQuery ã®èšå® Looker Studio ã§ã¬ããŒãã®äœæ ãã¿ãŒã³ïŒ VPC Service Controls ã®èšå® ç¢ºèª ãã¿ãŒã³ïŒ ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ VPC Service Controls ã®èšå® Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ãã«ãµãŒãã¹ ã¢ã«ãŠã³ããžã®ã¢ã¯ã»ã¹ãèš±å¯ ãŠãŒã¶ãŒããŒã«ã®ä»äž BigQuery ãžã®ã¢ã¯ã»ã¹ãèš±å¯ Looker Studio ã®ããŒã¿ã®èªèšŒæ
å ±ãæŽæ° ç¢ºèª ãã¿ãŒã³ïŒ Looker Studio ã§ã¬ããŒãã®å
±æ ç¢ºèª ç£æ»ãã° Looker Studio ã®ãã°ã€ãã³ã 泚æç¹ ãµãŒãã¹ã»æ©èœã®æŠèŠ åœèšäºã§äœ¿çšãããµãŒãã¹ãæ©èœã®æŠèŠã¯ä»¥äžã®éãã§ãã VPC Service Controls VPC Service Controls 㯠Google Cloud ã®ã»ãã¥ãªãã£æ©èœã§ãã å¢ç (Perimeter) ãšåŒã°ããè«ççãªå²ããäœãããã®å²ãã®äžã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã IP ã¢ãã¬ã¹ããµãŒãã¹ã¢ã«ãŠã³ãçã«å¶éããããšãã§ããŸãã 詳现ã€ããŠã¯ä»¥äžã®èšäºããåç
§ãã ããã blog.g-gen.co.jp Looker Studio Looker Studio ïŒæ§ç§° ããŒã¿ããŒã¿ã«ïŒã¯ Google Cloud ãæäŸãã BI ããŒã«ã§ãã Google ã¹ãã¬ããã·ãŒãã BigQuery çã®ããŒã¿ãœãŒã¹ããã¬ããŒããäœæããããŒã¿ã®å¯èŠåãããããšãã§ããŸãã 以äžã®èšäºã§ Looker Studio ã«ã€ããŠè§ŠããŠããŸãã®ã§ããåç
§ãã ããã blog.g-gen.co.jp blog.g-gen.co.jp Looker Studio ã®ããŒã¿ã®èªèšŒæ
å ±ã«ã¯ä»¥äžã®ïŒçš®é¡ããããŸãã ãªãŒããŒã®èªèšŒæ
å ± é²èЧè
ã®èªèšŒæ
å ± ãµãŒãã¹ ã¢ã«ãŠã³ãã®èªèšŒæ
å ± åŸè¿°ããŸãããåœèšäºã§ã¯ããµãŒãã¹ ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ãã䜿çšããŸãã ãªããçŸåš ãµãŒãã¹ ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã¯ããŒã¿ãœãŒã¹ã BigQuery ã®å Žåã«ã®ã¿äœ¿çšã§ããŸã ã ãŸãããµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ãå©çšããã«ãããå¿
èŠãª Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ããååŸããã«ã¯ãWorkspace ãŸã㯠Cloud Identity ã®ãŠãŒã¶ãŒã§ããå¿
èŠããããŸã ã åèïŒ ããŒã¿ã®èªèšŒæ
å ± Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ãããµãŒãã¹ã¢ã«ãŠã³ãã®ããªã³ã·ãã«ã«è¿œå ããããšã§ããµãŒãã¹ã¢ã«ãŠã³ãã䜿çšã㊠Looker Studio ã®ã¬ããŒããé²èЧããã³ç·šéçãã§ããããã«ãªããŸãã åèïŒ Looker Studio çšã« Google Cloud ãµãŒãã¹ ã¢ã«ãŠã³ããèšå®ãã Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ãã«ã€ããŠã¯ä»¥äžã®èšäºã§ãè§ŠããŠããŸãã®ã§ããåç
§ãã ããã blog.g-gen.co.jp ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éåçš Identity and Access Management ïŒä»¥äž IAMïŒã«ã¯ ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éåçš ãšããæ©èœããããŸããæ¬æ©èœã䜿çšããããšã§ãç¹å®ã®ãµãŒãã¹ã¢ã«ãŠã³ããžã®æš©éåçšãèš±å¯ãããŠããããªã³ã·ãã«ïŒãŠãŒã¶ãŒçïŒã¯ããã®ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éã䜿çšããŠãªãœãŒã¹ãžã¢ã¯ã»ã¹ããããšãã§ããŸãã åèïŒ ãµãŒãã¹ ã¢ã«ãŠã³ãã®æš©éåçšã®ç®¡ç IAM ã®åºæ¬çãªæŠå¿µã«ã€ããŠã¯ä»¥äžã®èšäºããåç
§ãã ããã blog.g-gen.co.jp VPC Service Controls ãš Looker Studio ããããã®ãµãŒãã¹ãæ©èœã確èªãããšããã§ãåœèšäºã§ç޹ä»ããå
容ã«ã€ããŠè§ŠããŠãããŸãã Looker Studio ã®ããŒã¿ãœãŒã¹ã« BigQuery ã䜿çšããå Žåã BigQuery ã VPC Service Controls ã®å¢çå
ã«ãããš Looker Studio ã«ãåæ§ã®å¶éãããããŸã ã å
·äœçã«ã¯ãBigQuery ã«ç¹å®ã® IP ã¢ãã¬ã¹ããã®ã¢ã¯ã»ã¹ã®ã¿ãèš±å¯ãã VPC Service Controls ãèšå®ããå ŽåãLooker Studio ã«ãåæ§ã® IP ã¢ãã¬ã¹ã®å¶éãããããŸãã çç±ã¯ãLooker Studio ã®ã¬ããŒãã®ç·šéãä¿åãé²èЧæã« BigQuery ã«å¯Ÿããã¯ãšãªãå®è¡ãããããã§ãã èš±å¯ãããŠããªã IP ã¢ãã¬ã¹ãã Looker Studio ã®ã¬ããŒããé²èЧãããšä»¥äžã®ããã« Service Control ã®ãšã©ãŒ ãšè¡šç€ºãããŸãã Looker Studio ã® VPC Service Controls ã®ãšã©ãŒç»é¢ åèïŒ Google BigQuery ã«æ¥ç¶ãã 宿œå
容 åœèšäºã§ã¯ã以äžã®å
容ãå®çŸããããã®æ¹æ³ã玹ä»ããŸãã VPC Service Controls ãèšå®ããããšã§ã BigQuery ãžã®ã¢ã¯ã»ã¹ã¯ç¹å®ã® IP ã¢ãã¬ã¹ããã®ã¿ã«å¶é Looker Studio ã®ãµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ãèšå®ããããšã§ããŠãŒã¶ãŒã¯ IP ã¢ãã¬ã¹ã®å¶éãªã Looker Studio ã®ã¬ããŒãã®æäœããã³é²èЧãå¯èœ æ§æå³ ä»¥äžã®ïŒãã¿ãŒã³ãé ã«èšå®ããã³ç¢ºèªããŠãããŸãã ãªãä»å㯠VPC Service Controls ãš Looker Studio ã«çŠç¹ãåœãŠãŠç޹ä»ãããããä»ã®éšåã®èšå®ã«ã€ããŠã®è©³çްã¯å²æããŸãã æ§æå³ïŒãã¿ãŒã³ïŒïŒ æ§æå³ïŒãã¿ãŒã³ïŒïŒ æ§æå³ïŒãã¿ãŒã³ïŒïŒ äºåæºå Cloud Storage ã®èšå® Cloud StorageïŒä»¥äž GCSïŒã§ãã±ããã®äœæããã³ãªããžã§ã¯ããã¢ããããŒãããŸãã ä»åã¯ãªããžã§ã¯ãã«ãsample-data.csvããšããŠã©ã³ãã ã«çæããã販売å®çžŸããŒã¿ã® csv ãã¡ã€ã«ã䜿çšããŠããŸãã GCS ã®ç»é¢ BigQuery ã®èšå® BigQuery ã§ããŒã¿ã»ãããfujioka_dataset_01ããäœæããGCS ã®ãsample-data.csvãããœãŒã¹ãšããããŒãã«ãtable-01ããäœæããŸãã BigQuery ã®ç»é¢ ããŒãã«ã®äžèº«ã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã ããŒãã«ã®ç»é¢ Looker Studio ã§ã¬ããŒãã®äœæ Looker Studio ã«ãã°ã€ã³ããã¬ããŒããäœæããŸãã Looker Studio ã¬ããŒãäœæç»é¢ ããŒã¿ã®ã¬ããŒããžã®è¿œå ã§ [BigQuery] ãéžæããŸãã ããŒã¿ã«æ¥ç¶ 察象ã®ãããžã§ã¯ããããŒã¿ã»ãããããŒãã«ãéžæããŸãã ã¬ããŒããž BigQuery ã®ããŒãã«ã远å åã°ã©ããäœæããŸããã ã¬ããŒãç»é¢ ãããŸã§ã§ã以äžã®æ§æãåºæ¥äžãããŸããã ãããŸã§ã®æ§æ ãã¿ãŒã³ïŒ VPC Service Controls ã®èšå® Access Context Manager ã§ã¢ã¯ã»ã¹ã¬ãã«ã®äœæãããŸãã ä»åã¯ã¢ã¯ã»ã¹ããªã·ãŒã« default policy ã䜿çšãããããVPC Service Controls ããã³ Access Context Manager ã¯çµç¹ã¬ãã«ã§èšå®ãããŸãã ã³ã³ãœãŒã«ã§ [ã»ãã¥ãªãã£] > [Access Context Manager] > [+ ã¢ã¯ã»ã¹ã¬ãã«ãäœæ] ãéžæããŸãã Access Context Manager ã®ç»é¢ æ°ããã¢ã¯ã»ã¹ã¬ãã« ã以äžã®ããã«èšå®ããŸãã ãªãããã® IP ãµããããã¯ãŒã¯ã« ãã©ã€ããŒã IP ç¯å²ãå«ããããšã¯ã§ããŸããã åèïŒ ã¢ã¯ã»ã¹ã¬ãã«ã®å±æ§ é
ç® èšå®å€ åè ã¢ã¯ã»ã¹ã¬ãã«ã®ã¿ã€ãã« fujioka-home ä»»æã®åå IP ãµããããã¯ãŒã¯ xxx.xxx.xxx.6/32 ã¢ã¯ã»ã¹ãèš±å¯ãã IPv4 ãŸã㯠IPv6 ãèšå® ã¢ã¯ã»ã¹ã¬ã㫠次㫠[ã»ãã¥ãªãã£] > [VPC Service Controls] > [+ æ°ããå¢ç] ãéžæããŸãã VPC Service Controls ã®ç»é¢ æ°ãã VPC ãµãŒãã¹å¢ç ã以äžã®ããã«èšå®ããŸãã â Details é
ç® èšå®å€ åè å¢çã®ã¿ã€ãã« fujioka-vpcsc ä»»æã®åå å¢çã®ã¿ã€ã æšæºå¢çïŒããã©ã«ãïŒ â Details â¡ Projects é
ç® èšå®å€ åè ä¿è·ãããããžã§ã¯ã fujioka 察象ã®ãããžã§ã¯ã â¡ Projects ⢠Restricted Services é
ç® èšå®å€ åè ä¿è·ãããµãŒãã¹ BigQuery API Google Cloud Storage API BigQuery ãš GCS ãå¢çå
ã«å
¥ãã ⢠Restricted Services ⣠VPC accessible services [ãã¹ãŠã®ãµãŒãã¹] ãéžæããŸãã ⣠VPC accessible services †Access Levels èšå®ããªãã§é²ã¿ãŸãã †Access Levels ⥠å
åãããªã·ãŒ ä»åã¯ãGCP ãµãŒãã¹ / ãªãœãŒã¹ã® TO 屿§ ã®ã¡ãœããã All methods ã«ããŠããŸããã Selected method ã«ããããšã§ãã现ãã«æäœãçµãããšãã§ããŸãã ⥠å
åãããªã·ãŒ ⊠äžãïŒå€åãïŒããªã·ãŒ èšå®ããªãã§é²ã¿ãŸãã ⊠äžãïŒå€åãïŒããªã·ãŒ ç¢ºèª ãããŸã§ã§ã以äžã®æ§æãåºæ¥äžãããŸããã æ§æå³ïŒãã¿ãŒã³ïŒïŒ ã¢ã¯ã»ã¹ã¬ãã«ã§ èš±å¯ãããŠããªã IP ã¢ãã¬ã¹ããã¬ããŒããèŠããš Service Control ã®ãšã©ãŒ ãšè¡šç€ºãããŸãã ãšã©ãŒç»é¢ã衚瀺ãããªãå Žåã¯ããã©ãŠã¶ã®æŽæ°ããã£ã¡ã³ã·ã§ã³ã®å€æŽçãã詊ããã ããã Looker Studio ã® VPC Service Controls ã®ãšã©ãŒç»é¢ ãã¿ãŒã³ïŒ 次ã«ãBigQuery ãš GCS ãžã® IP ã¢ãã¬ã¹å¶éã¯ãããªããã Looker Studio ãžã® IP ã¢ãã¬ã¹å¶éããããªã ããã«ããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ ã³ã³ãœãŒã«ã§ [IAM ãšç®¡ç] > [ãµãŒãã¹ã¢ã«ãŠã³ã] > [+ ãµãŒãã¹ã¢ã«ãŠã³ããäœæ] ãéžæããŸãã ãµãŒãã¹ã¢ã«ãŠã³ããäœæ ä»»æã® ãµãŒãã¹ã¢ã«ãŠã³ãå ããã³ ãµãŒãã¹ã¢ã«ãŠã³ã ID ãèšå®ããŸãã ä»åã¯ã looker-studio-sa@<ãããžã§ã¯ã ID>.iam.gserviceaccount.com ãšãããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæâ ããŒã«ã¯ BigQuery ãžã§ããŠãŒã¶ãŒ ãèšå®ããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæâ¡ VPC Service Controls ã®èšå® 次ã«ããã¿ãŒã³ïŒã§äœæãã fujioka-vpcsc ã® VPC Service Controls ã«æ°ããäœæãããµãŒãã¹ã¢ã«ãŠã³ãããã®ã¢ã¯ã»ã¹ãèš±å¯ããèšå®ãå
¥ããŸãã VPC Service Controls ã®ç»é¢ [å¢çãç·šé] ãéžæããŸãã å¢çãç·šé ⥠å
åãããªã·ãŒ ã§ [ADD RULE] ããã以äžã®èšå®ã远å ããŸãã API ã¯ã©ã€ã¢ã³ãã® FROM 屿§ ã® ãŠãŒã¶ãŒã¢ã«ãŠã³ã / ãµãŒãã¹ã¢ã«ãŠã³ã ã«äœæãããµãŒãã¹ã¢ã«ãŠã³ã looker-studio-sa@<ãããžã§ã¯ã ID>.iam.gserviceaccount.com ãéžæããŸãã ⥠å
åãããªã·ãŒ ã®ç»é¢ Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ãã«ãµãŒãã¹ ã¢ã«ãŠã³ããžã®ã¢ã¯ã»ã¹ãèš±å¯ Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ãã®ãã«ãããŒãž ã§è¡šç€ºããã Service Agent service-org-<çµç¹ ID>@gcp-sa-datastudio.iam.gserviceaccount.com ãã³ããŒããŸãã Google ã¢ã«ãŠã³ãã§ãã°ã€ã³ããŠããªãå Žåã¯ãã°ã€ã³ãããŠãããå床ããŒãžãéããŠãã ããã Looker Studio Service Agent ã®ç»é¢ ã³ã³ãœãŒã«ãããäœæãããµãŒãã¹ã¢ã«ãŠã³ã looker-studio-sa@<ãããžã§ã¯ã ID>.iam.gserviceaccount.com ã« Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ãã®ã¢ã¯ã»ã¹ãèš±å¯ããèšå®ãããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éç»é¢ Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ãã« iam.serviceAccount.getAccessToken æš©éãä»äžããããŒã«ãéžæããŸããä»å㯠ãµãŒãã¹ ã¢ã«ãŠã³ã ããŒã¯ã³äœæè
ããŒã«ãéžæããŠããŸããããã®æš©éãä»äžããä»»æã®ã«ã¹ã¿ã ããŒã«ã䜿çšã§ããŸãã é
ç® èšå®å€ åè æ°ããããªã³ã·ãã« service-org-<çµç¹ ID>@gcp-sa-datastudio.iam.gserviceaccount.com Looker Studio ãµãŒãã¹ ãšãŒãžã§ã³ã ããŒã« ãµãŒãã¹ ã¢ã«ãŠã³ã ããŒã¯ã³äœæè
ã¢ã¯ã»ã¹ã®èš±å¯ç»é¢ ãŠãŒã¶ãŒããŒã«ã®ä»äž 次ã«ãäœæãããµãŒãã¹ã¢ã«ãŠã³ã looker-studio-sa@<ãããžã§ã¯ã ID>.iam.gserviceaccount.com ã®æš©éåçšããããŠãŒã¶ãŒãèšå®ããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éç»é¢ ããŒã¿ãœãŒã¹ïŒBigQueryïŒãäœæãŸãã¯ç·šéãã Looker Studio ãŠãŒã¶ãŒã«ã iam.serviceAccounts.actAs æš©éãå«ãããŒã«ãä»äž ããŸããä»å㯠ãµãŒãã¹ ã¢ã«ãŠã³ã ãŠãŒã¶ãŒ ã®ããŒã«ãä»äžããŸãã ãªããåŸè¿°ã®ãã¿ãŒã³ïŒã®ãã㪠Looker Studio ã®ã¬ããŒãã®è¡šç€ºã®ã¿è¡ããŠãŒã¶ãŒã«ã¯ããµãŒãã¹ ã¢ã«ãŠã³ãã®æš©éã¯äžèŠ ã§ãã é
ç® èšå®å€ åè æ°ããããªã³ã·ãã« fujioka@xxxx Google ã¢ã«ãŠã³ã ããŒã« ãµãŒãã¹ ã¢ã«ãŠã³ã ãŠãŒã¶ãŒ ã¢ã¯ã»ã¹ã®èš±å¯ç»é¢ BigQuery ãžã®ã¢ã¯ã»ã¹ãèš±å¯ Looker Studio ãããµãŒãã¹ã¢ã«ãŠã³ãã§ BigQuery ããŒã¿ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããã«ã¯ãããŒãã«ãŸãã¯ããŒã¿ã»ããã¬ãã«ã§ãµãŒãã¹ ã¢ã«ãŠã³ãã« BigQuery ããŒã¿é²èЧè
ã®ããŒã«ãä»äžããŸãã ä»åã¯ããŒãã«ã¬ãã«ã§ããŒã«ãä»äžãããããä»åã® Looker Studio ã®ã¬ããŒãã®ãœãŒã¹ã§ããããŒãã« table-01 ã«å¯ŸããŠè¡ããŸãã [BigQuery] > [fujioka_dataset_01] > [table-01] > [å
±æ] ãéžæããŸãã ããŒãã«ãžã¢ã¯ã»ã¹æš©ä»äž [ããªã³ã·ãã«ã远å ] ãéžæããŸãã ããªã³ã·ãã«ã远å é
ç® èšå®å€ åè æ°ããããªã³ã·ãã« looker-studio-sa@<ãããžã§ã¯ã ID>.iam.gserviceaccount.com äœæãããµãŒãã¹ã¢ã«ãŠã³ã ããŒã« BigQuery ããŒã¿é²èЧè
ã¢ã¯ã»ã¹ã®èš±å¯ç»é¢ Looker Studio ã®ããŒã¿ã®èªèšŒæ
å ±ãæŽæ° Looker Studio ã®ã¬ããŒãç»é¢ãã [ãªãœãŒã¹] > [è¿œå æžã¿ã®ããŒã¿ãœãŒã¹ã®ç®¡ç] ãéžæããŸãã Looker Studio ã®ã¬ããŒãç»é¢ [ç·šé] ãéžæããŸãã ããŒã¿ãœãŒã¹ ããŒã¿ã®èªèšŒæ
å ±ãçŸåšã¯äœæè
ã«ãªã£ãŠããããããµãŒãã¹ã¢ã«ãŠã³ãã«å€æŽããŸãããŠãŒã¶ãŒã¢ã€ã³ã³ãéžæããŸãã ããŒã¿ã®èªèšŒæ
å ± [ãµãŒãã¹ã¢ã«ãŠã³ãèªèšŒæ
å ±] ã«ãã§ãã¯ãå
¥ããäœæãããµãŒãã¹ã¢ã«ãŠã³ã looker-studio-sa@<ãããžã§ã¯ã ID>.iam.gserviceaccount.com ãå
¥åããŸãã ããã§ [ãµãŒãã¹ã¢ã«ãŠã³ãèªèšŒæ
å ±] ãéžæè¢ã«ãªãå Žåã¯ãLooker Studio ã®ã¬ããŒããéãçŽããŠãã ããã ããŒã¿ã®èªèšŒæ
å ±ãæŽæ° ããŒã¿ã®èªèšŒæ
å ±ã以äžã®ããã«ãµãŒãã¹ã¢ã«ãŠã³ãã«å€æŽãããŸããã ããŒã¿ã®èªèšŒæ
å ± ç¢ºèª ãããŸã§ã§ã以äžã®æ§æãåºæ¥äžãããŸããã æ§æå³ïŒãã¿ãŒã³ïŒïŒ ãã¿ãŒã³ïŒã§ã¯ãã¢ã¯ã»ã¹ã¬ãã«ã§ èš±å¯ãããŠããªã IP ã¢ãã¬ã¹ããã¬ããŒããèŠããš Service Control ã®ãšã©ãŒ ãšè¡šç€ºãããŠããŸããããåé¡ãªãé²èЧãã§ããããã«ãªããŸããã Looker Studio ã®ã¬ããŒãç»é¢ äœããæ§æå³ã®éãã¢ã¯ã»ã¹ã¬ãã«ã§ èš±å¯ãããŠããªã IP ã¢ãã¬ã¹ããå¢çå
ã® BigQuery ã GCS ã¯é²èЧãã§ããŸããã BigQuery ã®é²èЧäžå¯ïŒããŒã¿ã»ãã衚瀺ãããªãïŒ GCS ã®é²èЧäžå¯ ãã¿ãŒã³ïŒ æåŸã®ãã¿ãŒã³ã¯ãLooker Studio ã®ã¬ããŒããä»ã®ãŠãŒã¶ãŒã«å
±æããå Žåã«ã€ããŠã§ãã Looker Studio ã§ã¬ããŒãã®å
±æ ã¬ããŒãã®ç»é¢ãã [å
±æ] > [ä»ã®ãŠãŒã¶ãŒãæåŸ
] ãéžæããŸãã ã¬ããŒãã®å
±æ ä»å㯠fujioka-dev ãŠãŒã¶ãŒã é²èЧè
ãšããŠå
±æããŸããã ãŠãŒã¶ãŒã远å ç¢ºèª å
±æããããŠãŒã¶ãŒã§ãã¢ã¯ã»ã¹ã¬ãã«ã§ èš±å¯ãããŠããªã IP ã¢ãã¬ã¹ãããã¬ããŒããé²èЧã§ããŸãã Looker Studio ã®ã¬ããŒãç»é¢ ãããŸã§ã§ã以äžã®æ§æãåºæ¥äžãããŸããã æ§æå³ïŒãã¿ãŒã³ïŒïŒ ç£æ»ã㰠以äžã¯ãå
±æããããŠãŒã¶ãŒã xxx.xxx.xxx.57 ã® IP ã¢ãã¬ã¹ããã¬ããŒãã®ã³ã³ãããŒã«ãã«ããŠã³å€æŽãããæã® ç£æ»ãã° ïŒCloud Audit LogsïŒã§ãã protoPayload.requestMetadata.callerIp= ã¯å
±æããããŠãŒã¶ãŒã® IP ã¢ãã¬ã¹ xxx.xxx.xxx.57 ã§ãã äœãã protoPayload.authenticationInfo.principalEmail="looker-studio-sa@<ãããžã§ã¯ãID>.iam.gserviceaccount.com" ãšãªã£ãŠãããå®è¡ã¯ãµãŒãã¹ã¢ã«ãŠã³ããããŠããããšã確èªã§ããŸãã { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "looker-studio-sa@<ãããžã§ã¯ãID>.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "xxx.xxx.xxx.57" }, "serviceName": "bigquerybiengine.googleapis.com", "methodName": "ExecutionService.Query", "authorizationInfo": [ { "resource": "projects/<ãããžã§ã¯ãID>/datasets/fujioka_dataset_01/tables/table-01", "permission": "bigquery.tables.getData", "granted": true } ], "resourceName": "projects/<ãããžã§ã¯ãID>/datasets/fujioka_dataset_01/tables/table-01", "request": { "@type": "type.googleapis.com/google.cloud.bi.v1.QueryRequest" } }, "insertId": "fjx8nse21hx8", "resource": { "type": "audited_resource", "labels": { "project_id": "<ãããžã§ã¯ãID>", "method": "ExecutionService.Query", "service": "bigquerybiengine.googleapis.com" } }, ãçç¥ã } åèïŒ AuditLog Looker Studio ã®ãã°ã€ãã³ã ç£æ»ãã°ã§ã¯é²èЧå
IP ã¢ãã¬ã¹ã¯ããããŸããã é²èЧãŠãŒã¶ãŒã¯è¡šç€ºãããŸãã ã é²èЧãŠãŒã¶ãŒã確èªãããå Žåã¯ãGoogle Workspace 管çã³ã³ãœãŒã« admin.google.com ã® Looker Studio ã®ãã°ã€ãã³ã ãã確èªã§ããŸãã 管çã³ã³ãœãŒã«ã® Looker Studio ã®ãã°ã€ãã³ãç»é¢ åèïŒ Looker Studio ã®ãã°ã€ãã³ã 以äžã®èšäºã§ Workspace ã¬ããŒããšç£æ»ãã°ã«ã€ããŠè§ŠããŠããŸãã®ã§ããåç
§ãã ããã blog.g-gen.co.jp 泚æç¹ VPC Service Controls 㯠Cloud Shell ããµããŒãããŠããŸãã ãCloud Shell ã¯å¢çå€ãšããŠæ±ãããŸãããã®ãããä»åã®æ§æã§ IP ã¢ãã¬ã¹ãèš±å¯ãããŠããã¢ã¯ã»ã¹å
ã® Cloud Shell ãã以äžã®ãããªã³ãã³ããå®è¡ãããšããŠããšã©ãŒã«ãªããŸãã fujioka@cloudshell:~ (fujiokaxxxx)$ bq ls BigQuery error in ls operation: VPC Service Controls: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: xxxxxx fujioka@cloudshell:~ (fujiokaxxxx)$ fujioka@cloudshell:~ (fujiokaxxxx)$ gcloud storage ls ERROR: (gcloud.storage.ls) HTTPError 403: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: xxxxxx fujioka@cloudshell:~ (fujiokaxxxx)$ ãšã©ãŒæ åèïŒ Cloud Shell G-gen ç·šééš (èšäºäžèЧ) æ ªåŒäŒç€ŸG-genã¯ããµãŒããŒã¯ãŒã¯ã¹ã°ã«ãŒããšããŠãã¯ã©ãŠãã§ãäžçãããã£ãšãã¯ããããããããããžã§ã³ã«æ²ããã¯ã©ãŠãã®å°å
¥ããæé©åãŸã§ãæ¯æŽããŠãã Google Cloud å°æ¥ã®ã¯ã©ãŠãã€ã³ãã°ã¬ãŒã¿ãŒã§ãã
G-gen ã®ææã§ããGoogle CloudïŒæ§ç§° GCPïŒã® IAM ã«ã¯ã ãµãŒãã¹ãšãŒãžã§ã³ã ãšããä»çµã¿ããããŸãã æŠèŠ ãµãŒãã¹ãšãŒãžã§ã³ããšã¯ ãµãŒãã¹ãšãŒãžã§ã³ããšãµãŒãã¹ã¢ã«ãŠã³ãã®éã Compute Engine æŠèŠ æ°žç¶ãã£ã¹ã¯ã® CMEK ã«ããæå·åã»åŸ©å· VM ã®èµ·åã»åæ¢ã¹ã±ãžã¥ãŒãªã³ã° Cloud Storage æŠèŠ Pub/Sub éç¥ CMEK ã«ããæå·åã»åŸ©å· Cloud Logging æŠèŠ ãµãŒãã¹ãããã¯ãšã³ãã§å©çš ãã°ãã±ããã®ééçãªæå·å (CMEK) ãã°ã·ã³ã¯ã®æžã蟌㿠ID Looker Studio æŠèŠ ããŒã¿ãœãŒã¹ãžã®èªèšŒ æŠèŠ ãµãŒãã¹ãšãŒãžã§ã³ããšã¯ ãµãŒãã¹ãšãŒãžã§ã³ã ãšã¯ãGoogle Cloud ãµãŒãã¹ãå
éšçã«çšãããç¹å¥ãªãµãŒãã¹ã¢ã«ãŠã³ãã§ãããããã¯ãã® API ãæå¹åãããšããªã©ã«èªåçã«äœæãããããããŠãŒã¶ãŒãæèããããšã¯ããŸããããŸããããåæèšå®æãä»çµã¿ã®æ§ç¯ã®éã«ããµãŒãã¹ãšãŒãžã§ã³ãã«å¯ŸããŠæš©éã®ä»äžãå¿
èŠã«ãªãããšããããŸãã ãµãŒãã¹ãšãŒãžã§ã³ãã¯ãGoogle Cloud ãµãŒãã¹ãå¥ã®ãµãŒãã¹ãåŒã³åºããšããªã©ã«äœ¿çšãããŸãã ãµãŒãã¹ãšãŒãžã§ã³ãã¯éåžžããããžã§ã¯ãã«æå±ããŸãããçµç¹ã¬ãã«ã§äœæããããµãŒãã¹ãšãŒãžã§ã³ãããããŸãã ãªããµãŒãã¹ãšãŒãžã§ã³ãã¯å¥åãšããŠãGoogle ãããŒãžããµãŒãã¹ã¢ã«ãŠã³ãããŸãã¯ãGoogle ã管çãããµãŒãã¹ ã¢ã«ãŠã³ãããšãåŒã°ããŸãã åè : Service agents ãµãŒãã¹ãšãŒãžã§ã³ããšãµãŒãã¹ã¢ã«ãŠã³ãã®éã ãµãŒãã¹ãšãŒãžã§ã³ããšãµãŒãã¹ã¢ã«ãŠã³ãã®éãã¯äœã§ããããã ãµãŒãã¹ãšãŒãžã§ã³ãã¯ããµãŒãã¹ã¢ã«ãŠã³ãã® äžçš® ã§ãããµãŒãã¹ã¢ã«ãŠã³ãã®æ¹ãåºãæŠå¿µã§ãã ãŠãŒã¶ãŒãäœæããéåžžã®ãµãŒãã¹ã¢ã«ãŠã³ãã¯ãGoogle Cloud ã³ã³ãœãŒã«ç»é¢ã®ãIAM ãšç®¡ç ïŒ ãµãŒãã¹ã¢ã«ãŠã³ããã§äžèŠ§è¡šç€ºã§ããŸãã ãããããµãŒãã¹ãšãŒãžã§ã³ã㯠Google Cloud ã管çããç¹æ®ãªãµãŒãã¹ã¢ã«ãŠã³ãã®ããããã®äžèЧã«ã¯è¡šç€ºãããŸããã ãŸãããããžã§ã¯ãã® IAM ããŒã«äžèЧç»é¢ïŒIAM ãšç®¡ç ïŒ IAMïŒã§ããæ®æ®µã¯é衚瀺ã«ãªã£ãŠããŸãã Google æäŸã®ããŒã«ä»äžãå«ãã ãšãããã§ãã¯ããã¯ã¹ããªã³ã«ãããšãé衚瀺ã ã£ããµãŒãã¹ãšãŒãžã§ã³ããš IAM ããŒã«ã®çŽã¥ãïŒãã€ã³ãã£ã³ã°ïŒã衚瀺ãããŸãã Google æäŸã®ããŒã«ä»äžãå«ãã åœèšäºã§ã¯ã代衚ç㪠Google Cloud ãµãŒãã¹ã§ããµãŒãã¹ãšãŒãžã§ã³ããã©ã®ããã«çšããããŠãããã玹ä»ããŸãã Compute Engine æŠèŠ ãããããžã§ã¯ãã§ Compute Engine API ãæå¹åãããšããããžã§ã¯ãã«ä»¥äžã®åç§°ã®ãµãŒãã¹ã¢ã«ãŠã³ããçæãããŸããããããCompute Engine ã®ãµãŒãã¹ãšãŒãžã§ã³ãã§ãã service-(ãããžã§ã¯ãçªå·)@compute-system.iam.gserviceaccount.com ãªã Compute Engine ã® API ãæå¹åãããš (ãããžã§ã¯ãçªå·)-compute@developer.gserviceaccount.com ãšããåç§°ã§ãCompute Engine ã® ããã©ã«ããµãŒãã¹ã¢ã«ãŠã³ã ãçæãããŸããããããšãµãŒãã¹ãšãŒãžã§ã³ã㯠å¥ç© ã§ãã ããã©ã«ããµãŒãã¹ã¢ã«ãŠã³ã㯠VM ã«ã¢ã¿ãããããã®ã§ããããµãŒãã¹ãšãŒãžã§ã³ãã¯åŸè¿°ã®çšéã®ããã«ãµãŒãã¹åŽã䜿ããã®ã§ãããŠãŒã¶ãŒãæèããããšã¯ã»ãšãã©ãããŸããã ãã®ãµãŒãã¹ãšãŒãžã§ã³ãã«ã¯æåãã Compute Engine ãµãŒãã¹ ãšãŒãžã§ã³ã ãšããããŒã«ããããžã§ã¯ãã¬ãã«ã§ä»äžãããŠããŸãããã®ããŒã«çŽã¥ããåé€ããŠããŸããšãCompute Engine ã®æ£åžžãªåäœã¯ä¿èšŒãããŸããã åè : Compute Engine ãµãŒãã¹ ãšãŒãžã§ã³ã Compute Engine ã®ãµãŒãã¹ãšãŒãžã§ã³ãã¯ãå
éšçã«æ§ã
ãªçšéã«çšããããŠããŸãããæ®æ®µã¯ãŠãŒã¶ãŒã«æèãããããšã¯ãããŸããã ãããã以äžã®çšéã®éã«ãµãŒãã¹ãšãŒãžã§ã³ããæèããããšããããŸãã æ°žç¶ãã£ã¹ã¯ã® CMEK ã«ããæå·åã»åŸ©å· VM ã®èµ·åã»åæ¢ã¹ã±ãžã¥ãŒãªã³ã° æ°žç¶ãã£ã¹ã¯ã® CMEK ã«ããæå·åã»åŸ©å· 以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãæ°žç¶ãã£ã¹ã¯ã®æå·åæ¹åŒã CMEK ã§ã®æå·åã«ããããéžæãããšãã®ã¡ãã»ãŒãžã§ãã CMEK æå·åã«ã¯ãµãŒãã¹ãšãŒãžã§ã³ãã«éµã®å©çšæš©éãå¿
èŠ Compute Engine ãµãŒãã¹ãšãŒãžã§ã³ãã«ãæå·éµã«å¯Ÿã㊠Cloud KMS æå·éµã®æå·å / 埩å·ïŒ cloudkms.cryptoKeyEncrypterDecrypter ïŒããŒã«ãå¿
èŠãªããšã瀺ããŠããŸãããŠãŒã¶ãŒã«ä»£ãã£ãŠãµãŒãã¹ãšãŒãžã§ã³ãããã£ã¹ã¯ I/O ã®éœåºŠãéµãå©çšããŠééçãªæå·åã»åŸ©å·ãè¡ã£ãŠããã®ã§ãã ããã§æš©éãæãããå¿
èŠãããã®ã¯ãVM ã«ã¢ã¿ãããããµãŒãã¹ã¢ã«ãŠã³ã ã§ã¯ãªãã ãµãŒãã¹ãšãŒãžã§ã³ã**ã§ããç¹ã«æ³šæãå¿
èŠã§ãã ãµãŒãã¹ãšãŒãžã§ã³ããéµã«æš©éãæã€ VM ã®èµ·åã»åæ¢ã¹ã±ãžã¥ãŒãªã³ã° VM ã®èªåèµ·åã»åæ¢ã®ã¹ã±ãžã¥ãŒã«ãèšå®ããéã«ãããµãŒãã¹ãšãŒãžã§ã³ããé¢ä¿ããŸãã åè : VM ã€ã³ã¹ã¿ã³ã¹ã®èµ·åãšåæ¢ãã¹ã±ãžã¥ãŒã«ãã Compute Engine ã§ã¯ã³ã³ãœãŒã«çãããcron 圢åŒã§ VM ã®èªå忢ã»èµ·åãã¹ã±ãžã¥ãŒãªã³ã°ã§ããŸãã ãã®ã¹ã±ãžã¥ãŒãªã³ã°æ©èœã§ã¯ãGoogle Cloud ããŠãŒã¶ãŒã«ä»£ãã£ãŠ VM ã忢ãããã¯èµ·åããŸãããã®ãšãã«ããµãŒãã¹ãšãŒãžã§ã³ãã® IAM æš©éã䜿ãããŸãã ãµãŒãã¹ãšãŒãžã§ã³ãã«ã€ã³ã¹ã¿ã³ã¹åæ¢ã»èµ·åã® IAM æš©éãç¡ãå Žåã以äžã®ãããªãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã ã€ã³ã¹ã¿ã³ã¹ã®ã¹ã±ãžã¥ãŒã«ã§èŠå Compute Engine System service account service-(PJ-NUMBER)@compute-system.iam.gserviceaccount.com needs to have [compute.instances.start,compute.instances.stop] permissions applied in order to perform this operation. ãã®ã¡ãã»ãŒãžãåºãå ŽåããµãŒãã¹ãšãŒãžã§ã³ãã«ããããžã§ã¯ãã¬ãã«ã§ Compute ã€ã³ã¹ã¿ã³ã¹ç®¡çè
ïŒv1ïŒ ( roles/compute.instanceAdmin.v1 ïŒãªã©ã®ããŒã«ãä»äžããå¿
èŠããããŸãã Cloud Storage æŠèŠ Cloud Storage ã«ããµãŒãã¹ãšãŒãžã§ã³ããååšããŸããåç§°ã¯ä»¥äžã®ãšããã§ãã service-(ãããžã§ã¯ãçªå·)@gs-project-accounts.iam.gserviceaccount.com ãµãŒãã¹ãšãŒãžã§ã³ãã®åç§°ã¯ã³ã³ãœãŒã«ã®ãCloud Storage ïŒ èšå®ãç»é¢ãã確èªããããgcloud ã³ãã³ãã©ã€ã³ã§ gcloud storage service-agent --project=${PROJECT_ID} ãå®è¡ããããšã§ã確èªã§ããŸãã åè : Cloud Storage ãµãŒãã¹ ãšãŒãžã§ã³ãã®ååŸ åè : ãµãŒãã¹ ãšãŒãžã§ã³ã Cloud Storage ã®ãµãŒãã¹ãšãŒãžã§ã³ãã¯ã以äžã®ãããªçšéã§çšããããŸãã Pub/Sub éç¥ CMEK ã«ããæå·åã»åŸ©å· Pub/Sub éç¥ Cloud Storage ã§ã¯ãªããžã§ã¯ãã«å€æŽïŒäœæã»åé€çïŒããã£ãéã«ãPub/Sub ã«éç¥ããããšãã§ããŸãã åè : Cloud Storage ã® Pub/Sub éç¥ ãã®æ©èœã¯ããªããžã§ã¯ã倿Žãããªã¬ã«ã㊠Cloud Functions ãèµ·åããåŸåŠçãå®è£
ããéãªã©ã«çšããããŸãã Cloud Run functions ã Cloud Storage ããªã¬ãŒé¢æ°ãšãã圢ã§å®è£
ããããšããããŸãããããã¯ãšã³ãã§ã¯ãã® Pub/Sub éç¥ãçšããããŠããŸãã以äžã®èšäºãåç
§ãã ããã blog.g-gen.co.jp Cloud Storage ãµãŒãã¹ã Pub/Sub ã«ã¡ãã»ãŒãžããããªãã·ã¥ïŒéç¥ïŒããéã«ã¯ããµãŒãã¹ãšãŒãžã§ã³ãã«æš©éãå¿
èŠã§ããäžèšã®èšäºã® Cloud Storage ãµãŒãã¹ãšãŒãžã§ã³ãã«æš©éä»äž ã®é
ã§ç€ºããŠããããã«ãæš©éãä»äžããå¿
èŠããããŸãã CMEK ã«ããæå·åã»åŸ©å· Compute Engine ãšåãããã«ãCloud Storage ã§ããã¹ãã¬ãŒãžã®ééçãªæå·åã«é¡§å®¢ç®¡çã®æå·éµïŒCMEKïŒãæå®ã§ããŸãã ãã®éã«ãµãŒãã¹ãšãŒãžã§ã³ãããŠãŒã¶ãŒã«ä»£ãã£ãŠéµã䜿ããããŒã¿ãæå·åã»åŸ©å·ããŸãã ãµãŒãã¹ãšãŒãžã§ã³ãã¯ãç§å¯éµã«å¯Ÿã㊠Cloud KMS æå·éµã®æå·å / 埩å·ïŒ cloudkms.cryptoKeyEncrypterDecrypter ïŒããŒã«ãæã€å¿
èŠããããŸãã ãããžã§ã¯ãã¬ãã«ã§ãµãŒãã¹ãšãŒãžã§ã³ãã«äžèšããŒã«ãä»äžããããéµã«åå¥ã«ããŒã«ãä»äžããŸãã Cloud Logging æŠèŠ Cloud Logging ã®ãµãŒãã¹ãšãŒãžã§ã³ãã¯è€æ°ã®çš®é¡ããããããããçšéãç°ãªããŸãã No åç§° çšé 1 service-(ãããžã§ã¯ãçªå·)@gcp-sa-logging.iam.gserviceaccount.com ãµãŒãã¹ãããã¯ãšã³ãã§å©çš 2 cmek-p(ãããžã§ã¯ãçªå·)@gcp-sa-logging.iam.gserviceaccount.com ãã°ãã±ããã®ééçãªæå·å (CMEK) 3 p(ãããžã§ã¯ãçªå·)-(6æ¡æ°å)@gcp-sa-logging.iam.gserviceaccount.com ãã°ã·ã³ã¯ã®æžã蟌㿠ID ãµãŒãã¹ãããã¯ãšã³ãã§å©çš service-(ãããžã§ã¯ãçªå·)@gcp-sa-logging.iam.gserviceaccount.com ã«ã¯ããã©ã«ãã§ããããžã§ã¯ãã¬ãã«ã§ Cloud Logging ãµãŒãã¹ ãšãŒãžã§ã³ã ããŒã«ãä»äžãããŠããŸãã ãã® IAM ããŒã«ã¯ãBigQuery ããŒã¿ã»ããã®äœæãšãªã³ã¯ã®æš©éãæã£ãŠããããšããã Log Analytics æ©èœã§çšããããŠããããšãåãããŸãã åè : Cloud Logging Service Agent åè : Cloud Loggingã®æŠå¿µãšä»çµã¿ããã£ãã解説 - G-gen Tech Blog - Log Analytics ãã°ãã±ããã®ééçãªæå·å (CMEK) cmek-p(ãããžã§ã¯ãçªå·)@gcp-sa-logging.iam.gserviceaccount.com ã¯ãCMEK æå·åã«çšããããŸããCompute Engine ã Cloud Storage ã®é
ã§åè¿°ããå
容ãšãã»ãŒåçã§ãã KMS ã®æå·éµã«å¯ŸããŠããã®ãµãŒãã¹ãšãŒãžã§ã³ãã Cloud KMS æå·éµã®æå·å / 埩å·ïŒ cloudkms.cryptoKeyEncrypterDecrypter ïŒããŒã«ãæã€ããšã§ãééçãªæå·åãè¡ãããŸãã åè : Logging ã®ã¹ãã¬ãŒãž ããŒã¿ãä¿è·ããéµã管çãã ãªã p(ãããžã§ã¯ãçªå·) ã®éšåã¯ãçµç¹ã¬ãã«ã®ãã°ãã±ããã§ããã° p(çµç¹çªå·) ã«ãªãããã©ã«ãã¬ãã«ã§ããã° f(ãã©ã«ãçªå·) ãšãªããŸãã ãã°ã·ã³ã¯ã®æžã蟌㿠ID p(ãããžã§ã¯ãçªå·)-(6æ¡æ°å)@gcp-sa-logging.iam.gserviceaccount.com ã¯ã æžã蟌㿠ID ãšåŒã°ãããµãŒãã¹ã¢ã«ãŠã³ãïŒãµãŒãã¹ãšãŒãžã§ã³ãïŒã§ãã Cloud Logging ã§ã¯ã ãã°ã·ã³ã¯ ïŒãã°ã«ãŒã¿ãŒïŒãäœæããããšã§ãCloud Logging ã«å
¥ã£ãŠãããã°ãæ§ã
ãªå®å
ã«æ¯ãåããŠä¿åããããšãå¯èœã§ãã ãã°ã·ã³ã¯ãæžã蟌ã¿å¯èœãªå®å
ã¯ãCloud Logging ãã°ãã±ããããCloud Storage ãã±ããããBigQuery ããŒã¿ã»ããããPub/Subããªã©ã§ããããã°ã·ã³ã¯ãäœæããéãå®å
ãããã®ã·ã³ã¯ãååšãããããžã§ã¯ãã® Cloud Logging ãã°ãã±ãã以å€ãã ã£ãå Žåãã·ã³ã¯ã¯ æžã蟌㿠ID ïŒWriter IdentityïŒãšåŒã°ããå°çšã®ãµãŒãã¹ã¢ã«ãŠã³ãã䜿ããŸãã æžã蟌㿠ID ã®åç§°ã確èªããã«ã¯ãGoogle Cloud ã³ã³ãœãŒã«ã§ãã°ã·ã³ã¯ãéžæããã·ã³ã¯ã®è©³çްã衚瀺ããããæŒäžããããgcloud ã§ gcloud logging sinks describe ${SINK_NAME} ãå®è¡ããŸãã ãã°ã·ã³ã¯ã®æžã蟌㿠ID ã·ã³ã¯ã¯ãããžã§ã¯ãã«äœæãããããããã¯ãã©ã«ãã¬ãã« / çµç¹ã¬ãã«ã§äœæããããšãã§ããŸãããããžã§ã¯ãã¬ãã«ã§äœæããã·ã³ã¯ã®æžã蟌㿠ID 㯠p(ãããžã§ã¯ãçªå·)-(6æ¡æ°å)@gcp-sa-logging.iam.gserviceaccount.com ãšãªãããã©ã«ãã¬ãã«ãªã f(ãã©ã«ãçªå·)-(6æ¡æ°å)@ã ãçµç¹ã¬ãã«ãªã o(ãã©ã«ãçªå·)-(6æ¡æ°å)@ã ãšãªããŸãã ãŸãã·ã³ã¯ãäœæããããšã«æžã蟌㿠ID ãå¥åã«çæãããäžæã®6æ¡ã®æ°åãæãåºãããŠãµãŒãã¹ã¢ã«ãŠã³ãåã«ãªããŸãã ã·ã³ã¯ïŒãã°ã«ãŒã¿ãŒïŒã«ã€ããŠã¯ä»¥äžã®èšäºããåç
§ãã ããã åè : Cloud Loggingã®æŠå¿µãšä»çµã¿ããã£ãã解説 - G-gen Tech Blog - ãã°ã«ãŒãã£ã³ã°ãšãã°ã®ä¿å Looker Studio æŠèŠ Google Cloud ã®ç¡åã®ããã·ã¥ããŒãããŒã«ã§ãã Looker Studioã«ãããµãŒãã¹ãšãŒãžã§ã³ããååšããŸãããµãŒãã¹ãšãŒãžã§ã³ãã®åç§°ã¯ä»¥äžã§ãã service-org-(çµç¹çªå·)@gcp-sa-datastudio.iam.gserviceaccount.com ãµãŒãã¹ãšãŒãžã§ã³ãåã¯ã以äžã® URL ã«ã¢ã¯ã»ã¹ããããšã§ç¢ºèªå¯èœã§ãã åè : https://datastudio.google.com/serviceAgentHelp ããŒã¿ãœãŒã¹ãžã®èªèšŒ Looker Studio ã®ãµãŒãã¹ãšãŒãžã§ã³ãã¯ããããŒã¿ãœãŒã¹ãžã®èªèšŒããµãŒãã¹ã¢ã«ãŠã³ãã§è¡ããå Žåã«çšããŸãã Looker Studio ã«ã¯å€æ§ãªã³ãã¯ã¿ãçšæãããŠãããBigQuery ã Cloud SQLãCloud Storage äžã® CSV ãªã©ã«ã¢ã¯ã»ã¹ããŠããŒã¿ãå¯èŠåããããšãã§ããŸãã åè : Looker Studio | Connect to Data Google Cloud äžã®ãªãœãŒã¹ãããŒã¿ãœãŒã¹ãšããŠæ±ãéã«ã¯ãèªèšŒãå¿
èŠã§ããLooker Studio ã§ã¯ãããŒã¿ãœãŒã¹ãžã®èªèšŒæ¹æ³ãšããŠä»¥äžãéžæã§ããŸãã ããã·ã¥ããŒãã®ãªãŒããŒã® Google ã¢ã«ãŠã³ã ããã·ã¥ããŒãã®é²èЧè
ã® Google ã¢ã«ãŠã³ã ãµãŒãã¹ã¢ã«ãŠã³ã ããŒã¿ãœãŒã¹ãžã®èªèšŒã«ãµãŒãã¹ã¢ã«ãŠã³ãã䜿ãã°ãå©çšè
ã«ã¯ããã·ã¥ããŒãã®é²èŠ§æš©éã ããäžããã ãã§ãããªããŸããLooker Studio ã¬ããŒãããããŒã¿ãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã«ã¯ããµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã䜿ãããŸãã ãã® 3. ã®çšéã®éã«ããµãŒãã¹ãšãŒãžã§ã³ããé¢ä¿ããŠããŸãã èªèšŒæ
å ±ãšããŠäœ¿ããµãŒãã¹ã¢ã«ãŠã³ãã¯ãGoogle Cloud ãããžã§ã¯ãã«äœæããŠããŒã¿ãœãŒã¹ãžã®ã¢ã¯ã»ã¹æš©éïŒBigQuery é²èЧè
çïŒãä»äžããŠãããŸãã ãã®åŸ Looker Studio ããã®ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éãåçšã§ããããã«ãäœæãããµãŒãã¹ã¢ã«ãŠã³ãã«å¯ŸããŠãLooker Studio ãµãŒãã¹ãšãŒãžã§ã³ãããµãŒãã¹ ã¢ã«ãŠã³ã ããŒã¯ã³äœæè
ïŒ iam.serviceAccount.getAccessToken ïŒããŒã«ãšããŠçŽã¥ããŸãã å³ç€ºãããšä»¥äžã®ããã«ãªããŸãã Looker Studio ããµãŒãã¹ã¢ã«ãŠã³ãã䜿ãä»çµã¿ ã€ãŸããããŒã¿ãœãŒã¹ãžã®ã¢ã¯ã»ã¹æš©éèªäœã¯ããŠãŒã¶ãŒãäœæãããµãŒãã¹ã¢ã«ãŠã³ããæã£ãŠããŸããããã®ãµãŒãã¹ã¢ã«ãŠã³ãæš©éãåçšããããã«ããµãŒãã¹ãšãŒãžã§ã³ãã䜿ãããã®ã§ãã åè : Looker Studio çšã« Google Cloud ãµãŒãã¹ ã¢ã«ãŠã³ããèšå®ãã ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãX (æ§ Twitter) ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ããžãã¹æšé²éšã®èæ± ã§ããGoogle Workspace ã®ããŒã«ã®ã²ãšã€ã§ãã Google ããã¥ã¡ã³ãã®æå€ãšç¥ããªãæ©èœãã玹ä»ããŸãã Google Docs Google ããã¥ã¡ã³ããšã¯ ãã¡ã€ã«ã®å
±åç·šé ãã¡ã€ã«ã®å€æŽå
容ã確èªãã ãã¡ã€ã«ã®å€æŽå
å®¹ãææ¡ãã é³å£°ã§å
¥åãã ã¡ãŒã«ã®äžæžã ããŒãžåãã®ãããªã Google ããã¥ã¡ã³ããšã¯ Google ããã¥ã¡ã³ã (è±å Google Docs) ãšã¯ããªã³ã©ã€ã³ã§ææžã®äœæã»ç·šéãè¡ãããšãã§ããããŒã«ã§ãã Google ã®æäŸããã³ã©ãã¬ãŒã·ã§ã³ããŒã«ã¹ã€ãŒãã§ãã Google Workspace ã®ããŒã«ã®äžã€ãšããŠæäŸãããŠããŸãã äœæãããããã¥ã¡ã³ãã¯ã¯ã©ãŠãã«ä¿åãããŸãããããŠã³ããŒãããããšãå¯èœã§ããäœæãããããã¥ã¡ã³ã㯠Microsoft Word ãšã®äºææ§ãããã»ã Word ã®ãã¡ã€ã«ãèªã¿èŸŒã¿ã»ç·šéã§ãããããWord ã® Google çããšãèšããããŒã«ã§ãã ãã¡ã€ã«ã®å
±åç·šé ãã¡ã€ã«ã®å€æŽå
容ã確èªãã ãã¡ã€ã«ã«å ãããã倿Žå
容ã確èªã§ããŸããç¹å¥ãªèšå®ã¯äžèŠã§èªåçã«ç·šéå±¥æŽã¯ä¿åãããŠããŸãã äœ¿ãæ¹ã¯ [ãã¡ã€ã«]>[倿Žå±¥æŽ]>[倿Žå±¥æŽã衚瀺] ãã¯ãªãã¯ããã ããªã®ã§éåžžã«ç°¡åã§ãã ç»é¢äžã®å€æŽå±¥æŽã§ [ãã¹ãŠã®ç] ãéžæãããšã倿Žããå±¥æŽã衚瀺ãããŸãã ééããŠæŽæ°ããŠããŸã£ãå Žå㯠[ãã®çã埩å
ãã]>[埩å
] ãã¯ãªãã¯ããã ãã§åŸ©å
ãããŸãã ä»ã«ã [ã³ããŒãäœæ] ã§ä»¥åã®çãã³ããŒãããã [ãã®çã«ååãä»ãã] ã§è€æ°ã®çãçµ±åãããªãããã«ã§ããŸãã ãã¡ã€ã«ã®å€æŽå
å®¹ãææ¡ãã è€æ°äººã§å
±åç·šéãããŠãããšèª°ãäœãç·šéããã®ãããããªããªã£ãŠããŸãäºã ææ¡ã¢ãŒã ã§åé¿ã§ããŸãã ææ¡ã¢ãŒãã§ã¯ããã¥ã¡ã³ãã®å
容ãçŽæ¥ä¿®æ£ãããä¿®æ£å
å®¹ã®ææ¡ãã§ããŸãã ç»é¢å³äžã®éçããŒã¯ãã¯ãªãã¯ã [ææ¡] ãéžæãããšææ¡ã¢ãŒãã«åãæ¿ãããŸãã åé€ãããšæã¡æ¶ãç·ã§è¡šç€ºããã远å ãããšäžäžè²ä»ãã§è¡šç€ºãããŸãã倿Žç®æã¯å³åŽã«ãªã¹ã衚瀺ãããã³ã¡ã³ãå
¥åãå¯èœã§ãã é³å£°ã§å
¥åãã äŒè°ã®è°äºé²äœæããŠã§ãããŒãåè¬ããªããã®ã¡ã¢ãªã©è©±ãèããªããããã¥ã¡ã³ãã«æåãå
¥åããäœæ¥ã¯ããããã·ãŒã³ã§ããã¿ã€ãã³ã°ã远ãã€ããªãã£ãããã¡ã¢ãåãããšã«ç²Ÿäžæ¯ã«ãªã£ãŠããŸãããªããªã話ãå
¥ã£ãŠããªããšãæ¬æ«è»¢åã«ãªã£ãŠããŸããŸãã ãããªãšãã« Google ããã¥ã¡ã³ãã® é³å£°å
¥åæ©èœ ãæŽ»çšããããšã§ãããã¹ãå
¥åãç°¡æåããæéãåæžããããšãå¯èœã§ãã www.youtube.com ã¡ãŒã«ã®äžæžã ã¹ããŒãããã ãæ¿å
¥ããããšã§æ¥ä»ããã¡ã€ã«ãã«ã¬ã³ããŒãã¡ãŒã«ã®äžæžããäŒè°ã¡ã¢ãªã©ãããã¥ã¡ã³ãå
ã«å«ããããšãã§ããŸãã äœ¿ãæ¹ã¯è³ã£ãŠã·ã³ãã«ã§ãïŒ ããšå
¥åããããšã§AIãåè£ã衚瀺ãããªã³ã¯ãäœæããŸãã äžäŸãšã㊠ã¡ãŒã«ã®äžæžã æ©èœã玹ä»ããŸãã youtu.be ãã®ããã«ç°¡åã«ã¡ãŒã«ã®äžæžããäœæããããšãã§ããŸãã Gmail ã®äžæžãæ©èœã§ã¯äžæžãããå
容ãä»ã®ãŠãŒã¶ãŒãšå
±æããããšãã§ããŸããããGoogle ããã¥ã¡ã³ãã®äžæžãæ©èœã䜿ãã°ãä»ã®ãŠãŒã¶ãŒãšå
±æãç·šéãå¯èœã«ãªããæ§ã
ãªã·ãŒã³ã§æŽ»çšã§ããŸãã äŸãã° ããããã¡ãŒã«ã®ãã³ãã¬ãŒãå ã¡ãŒã«éä¿¡åã«ä»ã®ãŠãŒã¶ãŒã«äºå確èªãããŠããã è€æ°åã§ã¡ãŒã«ã®äœæãè¡ã ãªã©ãããŸãŸã§ãã£ããããŒã«ãªã©ã䜿ã£ãŠå®æœããŠãããããªå
容ã Google ããã¥ã¡ã³ãå
ã§å®çµããããšãã§ããŸãã ãŸããäžæžãããæç« ã¯ãã¿ã³ã²ãšã€ã§ Gmail ã«é£ã°ãããšãå¯èœã§ãã®ã§ãã³ããŒ&ããŒã¹ãã®ç
©ãããããããŸããã ããŒãžåãã®ãããªã [ãã¡ã€ã«]>[ããŒãžèšå®] ãéžæãããš ããŒãžåãã®ãã / ãªã ãéžæã§ããŸãã ããŒãžåããããã«ããŠãããšäœçœãæ°ã«ãªã£ãããç»åã貌ãä»ããéã«çœçŽéšåã倧ããäœã£ãŠããŸãããšããããŸãã 䜿ãåãã®äžäŸãšã㊠PDFåãçŽãžã®å°å·ãåæãšããææžã®å Žåã¯ããŒãžåããã é»åã§ã®ä¿åãåæãšããå®äŸäŒè°ã®è°äºé²ãªã©ãããŒãžåããªã ãšãã£ãæ¹æ³ãèããããŸãã ããã©ã«ãã§ã©ã¡ãããéžæããããšãã§ããŸãã®ã§ããã䜿ãã»ãã«èšå®ããŠãããšè¯ãã§ãããã èæ± åäž (èšäºäžèЧ) ããžãã¹æšé²éš 2022幎5æã«G-gen ã«ãžã§ã€ã³ã å¢ããšã¹ããŒãæãæ±ããŠå€§æè£œé æ¥ã®è²©å£²äŒç€ŸããGoogle Cloudã®å¶æ¥ã«ãã£ãªã¢ãã§ã³ãžïŒå°ããè³ã¿ãããã«å転ãããªããæ¥ã
å匷äžã
G-gen ã®ææã§ãããããŸã§æéã®æãã£ãŠããªãã£ããCloud Logging ãã°ãã±ããã®ãã°ä¿åæéãã®èª²éãã2023幎4æ1æ¥ããéå§ãããŸãã(åœèšäºã¯2022幎11æ22æ¥ã«å·çããã2023幎2æ27æ¥ã«æŽæ°ãããŸããã) æŠèŠãšçµç·¯ 課ééå§ã2023幎4æ1æ¥ããã«å€æŽ äœãããã°ããã®ã æéã®ç¢ºèª æŠèŠãšçµç·¯ Cloud Logging ã® ãã°ãã±ãã 㯠Cloud Logging ã®ãã°ãä¿ç®¡ããããã®ç¬èªã¹ãã¬ãŒãžã§ãã ãããŸã§ãã°ãã±ããã®ä¿åæéã¯ãäºåã¯ãããŠãããã®ã®å®éã«æéã¯çºçããŠããŸããã§ããã Cloud Logging ã®èª²éäœåã«ã¯2ã€ã®è»žããããŸãã äžã€ç®ã¯ã ãã°ã®åãèŸŒã¿æé ãã§ãCloud Logging API ã«ãã°ãéä¿¡ããã GB æ°ã«å¿ããŠçºçããŸããå䟡㯠$0.50/GiB (2022幎11æçŸåš) ã§ããããã¯2018幎7æ1æ¥ããå®éã«èª²éãçºçããŠããŸãã äºã€ç®ã¯ã ãã°ã®ä¿ç®¡æé ãã§ããã°ãå®éã«ä¿ç®¡ãããã¹ãã¬ãŒãžã®äœ¿çšæéãšããŠããã°ã® GB æ°ã«å¿ããŠçºçããæéã§ãã ãã°ã Cloud Storage ã BigQuery ã«éä¿¡ããŠããã°ãã¡ãã®ã¹ãã¬ãŒãžæéãæãããŸããããã Cloud Logging ã®ç¬èªã¹ãã¬ãŒãžã§ãããã°ãã±ããã®ä¿ç®¡æéã¯ã30 æ¥ãè¶
ããŠä¿æããããã°ã«å¯Ÿã㊠$0.01/GiBããšãããŠãããã®ã®ã課éãå®éã«çºçããã®ã¯ã2023幎1æ16æ¥ããããšãããŠããããããŸã§å®éã«æéã¯çºçããŠããŸããã§ããã åè : Cloud Logging ã®æéæŠèŠ ä»¥åã¯2023幎1æ16æ¥ããã®èª²éãäºåãããŠãã 課ééå§æ¥ã2023幎4æ1æ¥ã«èšæ£ãããŠãã 課ééå§ã2023幎4æ1æ¥ããã«å€æŽ æ¥æ¬æé 2022幎11æ21æ¥ ã« Google Cloud ã®ç¹å®ã®ããŒã«ãæã€ Google ã¢ã«ãŠã³ãã«å¯Ÿãã以äžã®èŠæšã®ã¡ãŒã«ãéä¿¡ãããŸããã ãã°ãã±ããä¿åæéã®èª²ééå§ã¯ 2023幎3æ1æ¥ ã«å€æŽ æé㯠$0.01/GiB (åŸæ¥ã®äºåéã) 課é察象ã¯ãã°ãã±ããã«30æ¥ãè¶
ããŠä¿åããããã° (åŸæ¥ã®äºåéã) 課ééå§ã®æ¥çšã倿Žã«ãªã£ã ããã«2023幎2æ24æ¥ã«ã¯ Google Cloud ãã远å ã®é£çµ¡ãéä¿¡ãããŸããã課ééå§ã 2023幎4æ1æ¥ ããã«å»¶æã«ãªã£ãæšãäŒããé£çµ¡ã§ããã äœãããã°ããã®ã ãã®éç¥ã«ãããåŸæ¥ã®äºåãã3ã¶æã»ã©èª²ééå§ãå»¶é·ãããããšã«ãªããŸãã ãã ãããããã«ããéããªã課éãéå§ãããããšã«å€ããã¯ãããŸããã ãããŸã§æèããŠããªãã£ã課éã 2023幎4æ ããéå§ãããããšã«ãªãã®ã§ãGoogle Cloud æéã® æ¥æ¿ãªå¢å ã«æ³šæãå¿
èŠ ã§ãã ãŸãã以äžã®ãããªå¯ŸçãèããããŸãã ãã°ãã±ããã®ä¿ç®¡æé (Custom Retention) ã®èŠçŽã (äžèŠãªãã°ã¯30æ¥ã§ç Žæ£ãããããã« èšå® ) äºç®ã¢ã©ãŒã ãèšå® Google Cloud å©çšè
éšéãžã®æ³šæåèµ· æ¯æãé¢ä¿éšçœ²çãé¢ä¿åæãžã®äºåéé æéã®ç¢ºèª 2023幎4æã®èª²ééå§ã«åããèªåã®ãããžã§ã¯ãã® Cloud Logging ã«ã©ã®ãããã®èª²é察象ãã°ãããã®ã確èªããããªãã¯ãã§ãã 2023幎1æãã Cloud Monitoring ã§ Billable Storage ã¡ããªã¯ã¹ãå©çšå¯èœã«ãªã£ãŠããŸãããã®ã¡ããªã¯ã¹ã§ã¯ã30æ¥ãè¶
ããŠä¿åãããŠãã課é察象ã®ãã°ã®ããªã¥ãŒã ã®æŠç®ã確èªã§ããŸãã ãŸãããã以å€ã«ã Google Cloud ã³ã³ãœãŒã«ã®ããã®ã³ã°ïŒãã°ã¹ãã¬ãŒãžãç»é¢ã«ãŠããããžã§ã¯ãã®å
šãã°ãã±ããã®ãµã€ãºåèšãããã°ãã±ããããšã®åæäœ¿çšéãä»æäœ¿çšéãèšå®ããŠããä¿ææéãªã©ã確èªå¯èœã§ãããã ããã¡ãã§ç¢ºèªã§ããã®ã¯ãã°ãã±ããã«ä¿åãããŠãã ãã°ã®å
šé ã§ãã課é察象ã§ããã30æ¥ä»¥äžä¿ç®¡ããŠãããã°ãã§ã¯ãªãç¹ã«ãçæãã ããã ãã°ãã±ããã®ãã°ãµã€ãºã®ç¢ºèª ãªããããã©ã«ãã§ååšãã _Required ãšèšããã°ãã±ããã«ã¯èª²éãçºçããŸãããåããããã©ã«ãã§ååšãã _Default ããä¿ææéã 30 æ¥ä»¥å
ã«ãªã£ãŠããéãã¯ã課éãçºçããŸãããããã以å€ã®ãã°ãã±ããã§ä¿ææéã 30 æ¥ä»¥äžã«ãªã£ãŠãããã®ã«ã€ããŠã泚æãå¿
èŠã§ãã 以äžã®èšäºãåèã«ããŠãã ããã blog.g-gen.co.jp ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãTwitter ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
åœèšäºã§ã¯ã Google Cloud (æ§ç§° GCP) ã® Cloud DNS ã® DNS ãã¢ãªã³ã°ã䜿çšããŠãç°ãªããããžã§ã¯ãã® Cloud DNS ãŸãŒã³ã®åå解決ãããæ¹æ³ã«ã€ããŠç޹ä»ããŸãã Cloud DNS ãšã¯ äžè¬å
¬é DNS ãŸãŒã³ãšéå®å
¬é DNS ãŸãŒã³ åå解決ã®é åº DNS ãã¢ãªã³ã° 宿œå
容 æ§æ API ã®æå¹å éå®å
¬éãŸãŒã³ã®äœæ ã¬ã³ãŒãã»ããã®è¿œå ãã¢ãªã³ã°ãŸãŒã³ã®äœæ åå解決ã®ç¢ºèª Cloud DNS ãšã¯ Cloud DNS ã¯ã Google Cloud (æ§ç§° GCP) ã®ãããŒãžã㪠DNS ãµãŒãã¹ã§ãã ããã§ã¯ãä»åã®æ§æã§åºãŠããçšèªã«ã€ããŠç°¡åã«èª¬æããŸãã詳现ã«ã€ããŠã¯ãå
¬åŒããã¥ã¡ã³ãããåç
§ãã ããã äžè¬å
¬é DNS ãŸãŒã³ãšéå®å
¬é DNS ãŸãŒã³ Cloud DNS ã§ã¯ä»¥äžã®ãŸãŒã³ã®ã¿ã€ããäœæå¯èœã§ãã äžè¬å
¬éãŸãŒã³ ã€ã³ã¿ãŒãããããåå解決ã å¯ éå®å
¬éãŸãŒã³ ã€ã³ã¿ãŒãããããåå解決ã äžå¯ èšå®ãã 1 ã€ä»¥äžã® VPC ãããã¯ãŒã¯ããã®ã¿åå解決ãå¯èœ åå解決ã®é åº Google Cloud ãæã€ Virtual Private CloudïŒä»¥äž VPCïŒ ã¯ãGoogle Compute Engine çã®ã€ã³ã¹ã¿ã³ã¹ã«åå解決ãµãŒãã¹ãæäŸããŠããŸãã ã€ã³ã¹ã¿ã³ã¹ããããã©ã«ãã§èšå®ãããŠããã¡ã¿ããŒã¿ãµãŒããŒïŒ 169.254.169.254 ïŒãããŒã ãµãŒããŒãšããŠäœ¿çšããå ŽåãèŠå®ãããé åºã«åŸã£ãŠåå解決ãè¡ãããŸãã åè : åå解決ã®é åº DNS ãã¢ãªã³ã° Cloud DNS ã®æ©èœã®äžã« DNS ãã¢ãªã³ã°ããããŸããååã®äŒŒãŠãããµãŒãã¹ãšã㊠VPC ãã¢ãªã³ã°ããããŸãããå¥ãµãŒãã¹ã§ãã DNS ãã¢ãªã³ã°ã䜿çšããããšã§ãå¥ã® VPC ã«èšå®ãããŠãããŸãŒã³ã®åå解決ãå¯èœã«ãªããŸãã æ³šæç¹ãšããŠã DNS ãã¢ãªã³ã°ã¯ çæ¹åã®é¢ä¿ ã§ãããã®ãããåœããã°ã®åŸåã§ç޹ä»ããæ§æã«ãããŠã仮㫠vpc-a ã§éå®å
¬éãŸãŒã³ãäœæãã vpc-b ã§ãã®ãŸãŒã³ã®åå解決ãã§ããããã«ããã«ã¯ã远å ã§ DNS ãã¢ãªã³ã°ãèšå®ããå¿
èŠããããŸãã ãã®ä»ã®å¶çŽäºé
çã«ã€ããŠã¯ å
¬åŒããã¥ã¡ã³ã ããåç
§ãã ããã 宿œå
容 æ§æ ä»åã®æ§æã¯ä»¥äžã®éãã§ãã æ§æå³ æ§æå³ã« DNS ã³ã³ã·ã¥ãŒããããã¯ãŒã¯ ãš DNS ãããã¥ãŒãµãŒãããã¯ãŒã¯ ãšããèãæ
£ããªãçšèªããããŸãããããã§ã¯è©³çްãªèª¬æã¯å²æããŸããDNS ã³ã³ã·ã¥ãŒããããã¯ãŒã¯ã¯ãå¥ VPC ã§äœæãããŠãããŸãŒã³ã®åå解決ã åç
§ããåŽ ã§ãDNS ãããã¥ãŒãµãŒãããã¯ãŒã¯ã¯ åç
§ãããåŽ ã§ãã API ã®æå¹å project-a ãš project-b ã§ Cloud DNS API ã®æå¹åãããŸãã Cloud DNS API ã®æå¹åïŒproject-a / project-bïŒ éå®å
¬éãŸãŒã³ã®äœæ ãŸãã DNS ãããã¥ãŒãµãŒãããã¯ãŒã¯ã§ãã project-b ã® Cloud DNS ã§éå®å
¬éãŸãŒã³ãäœæããŸãã ãŸãŒã³ã®äœæã«ã¯ã dns.managedZones.create ã®æš©éãå¿
èŠã§ãããã®ä»è©³çްãªããŒã«ãšæš©éã«ã€ããŠã¯ å
¬åŒããã¥ã¡ã³ã ããåç
§ãã ããã Cloud DNS ã®ç»é¢ïŒproject-bïŒ ä»¥äžã®é
ç®ãèšå®ããŸãã é
ç® èšå®å€ åè ãŸãŒã³ã®ã¿ã€ã éå
¬é ä»åã¯éå®å
¬éãŸãŒã³ã®ãã ãŸãŒã³å g-gen-local-zone ä»»æã®åå DNS å g-gen.local éå®å
¬éãŸãŒã³ã® DNS å ãªãã·ã§ã³ ããã©ã«ãïŒéå®å
¬éïŒ ãããã¯ãŒã¯ vpc-b ãŸãŒã³ã䜿çšãã VPC DNS ãŸãŒã³ã®äœæç»é¢ïŒproject-bïŒ ãŸãŒã³ãäœæãããšãèªåã§ SOA ã¬ã³ãŒããš NS ã¬ã³ãŒããäœæãããŸããDNS åã®æåŸã®ãããïŒ.ïŒã¯èªåã§è¿œå ãããŸãã DNS ãŸãŒã³ã®ç»é¢ïŒproject-bïŒ ã¬ã³ãŒãã»ããã®è¿œå æ€èšŒçšã«ã¬ã³ãŒãã远å ããŸãã ã¬ã³ãŒãã»ããã远å ïŒproject-bïŒ ä»åã¯ã www.g-gen.local ã® A ã¬ã³ãŒãã远å ããŸããIP ã¢ãã¬ã¹ã¯ 1.1.1.1 ãšããŸãã ã¬ã³ãŒãã»ããã®äœæç»é¢ïŒproject-bïŒ ã¬ã³ãŒãã远å ãããŸããã DNS ãŸãŒã³ã®ç»é¢ïŒproject-bïŒ çŸæ®µéã§ã¯ã vpc-a ãš vpc-b 㯠DNS ãã¢ãªã³ã°ãããŠããªããã vpc-a ã«ããã€ã³ã¹ã¿ã³ã¹ ãã㯠www.g-gen.local ã®åå解決ã¯ã§ããŸããã ã€ã³ã¹ã¿ã³ã¹ã®åå解決ç»é¢ïŒproject-aïŒ ãã¢ãªã³ã°ãŸãŒã³ã®äœæ 次ã«ã project-a ã§ãã¢ãªã³ã°ãŸãŒã³ãäœæããŸãã ãã¢ãªã³ã°ãŸãŒã³ã®äœæã«ã¯ããã¢ãªã³ã°å
VPCïŒDNS ãããã¥ãŒãµãŒãããã¯ãŒã¯ïŒãå«ããããžã§ã¯ãã§ roles/dns.peer ã®ããã¢ã«ãŠã³ãã§äœæããå¿
èŠããããŸãããã®ä»è©³çްãªããŒã«ãšæš©éã«ã€ããŠã¯ å
¬åŒããã¥ã¡ã³ã ããåç
§ãã ããã Cloud DNS ã®ç»é¢ïŒproject-aïŒ ä»¥äžã®é
ç®ãèšå®ããŸãã é
ç® èšå®å€ åè ãŸãŒã³ã®ã¿ã€ã éå
¬é ä»åã¯éå®å
¬éãŸãŒã³ã®ãã ãŸãŒã³å g-gen-local-peering-zone ä»»æã®åå DNS å g-gen.local ä»å㯠project-b ã§èšå®ãã g-gen.local ãªãã·ã§ã³ DNS ãã¢ãªã³ã° ãããã¯ãŒã¯ vpc-a ãŸãŒã³ã䜿çšãã VPC ãã¢ãªã³ã°ãããžã§ã¯ã project-b ãã¢ãªã³ã°å
ã®ãããžã§ã¯ããéžæ ãã¢ãªã³ã°ãããã¯ãŒã¯ vpc-b ãã¢ãªã³ã°å
ã® VPC DNS ãŸãŒã³ã®äœæç»é¢ïŒproject-aïŒ ä»¥äžã®ããã«ãã¢ãªã³ã°ãŸãŒã³ãäœæãããŸãã DNS ãŸãŒã³ã®ç»é¢ïŒproject-aïŒ åå解決ã®ç¢ºèª DNS ãã¢ãªã³ã°ã®èšå®ãå®äºããã®ã§ãã€ã³ã¹ã¿ã³ã¹ããå
çšã¯åå解決ãã§ããªãã£ã www.g-gen.local ã®åå解決ã®ç¢ºèªãããŸãã ã€ã³ã¹ã¿ã³ã¹ã®åå解決ç»é¢ïŒproject-aïŒ ç¡äºãä»åèšå®ãã A ã¬ã³ãŒãã® 1.1.1.1 ãè¿ã£ãŠããããã«ãªããŸããã G-gen ç·šééš (èšäºäžèЧ) æ ªåŒäŒç€ŸG-genã¯ããµãŒããŒã¯ãŒã¯ã¹ã°ã«ãŒããšããŠãã¯ã©ãŠãã§ãäžçãããã£ãšãã¯ããããããããããžã§ã³ã«æ²ããã¯ã©ãŠãã®å°å
¥ããæé©åãŸã§ãæ¯æŽããŠãã Google Cloud å°æ¥ã®ã¯ã©ãŠãã€ã³ãã°ã¬ãŒã¿ãŒã§ãã
G-gen ã®ææã§ããCompute Engine ã§èµ·åãã Linux VM ã« SSH ãã°ã€ã³ããã«ã¯ããã€ãã®æ¹æ³ãããããããããããã¯ãŒã¯çãªèæ
®ç¹ãç°ãªããããæŽçããŸããã Compute Engine VM ãžã® SSH æ¥ç¶ã«ã€ã㊠ã³ã³ãœãŒã«ã® SSH ãã¿ã³ æŠèŠ ã€ã³ã¿ãŒãã§ã€ã¹ èŠä»¶ ãããã¯ãŒã¯ èªèšŒã»èªå¯ OS ãã°ã€ã³æ©èœ gcloud ã³ãã³ã æŠèŠ ã€ã³ã¿ãŒãã§ã€ã¹ èŠä»¶ ãããã¯ãŒã¯ èªèšŒã»èªå¯ SSH ã¿ãŒããã«ãœãããŠã§ã¢ æŠèŠ ã€ã³ã¿ãŒãã§ã€ã¹ èŠä»¶ ãããã¯ãŒã¯ èªèšŒã»èªå¯ Identity-Aware ProxyïŒIAPïŒ æŠèŠ ã€ã³ã¿ãŒãã§ã€ã¹ èŠä»¶ ãããã¯ãŒã¯ èªèšŒã»èªå¯ Compute Engine VM ãžã® SSH æ¥ç¶ã«ã€ã㊠Compute Engine ã§ Linux ã€ã³ã¹ã¿ã³ã¹ãèµ·åããéãSSH ãã°ã€ã³ããã«ã¯ããã€ãã®æ¹æ³ããããŸãã No ã¿ã€ãã« ã€ã³ã¿ãŒãã§ã€ã¹ 1 ã³ã³ãœãŒã«ã® SSH ãã¿ã³ Web ãã©ãŠã¶ 2 gcloud ã³ãã³ã PC ã®ã¿ãŒããã« 3 SSH ã¿ãŒããã«ãœãã SSH ã¿ãŒããã«ãœãã 4 Identity-Aware ProxyïŒIAPïŒ äžèšã®ãããã ããããã®æ¹æ³ã«ãããŠããã°ã€ã³ã®ããã«å¿
èŠãª IAM ã VPC ãã¡ã€ã¢ãŠã©ãŒã«ã®èšå®ãç°ãªããŸããåœèšäºã§ã¯ããããã¯ãŒã¯ããèªèšŒã»èªå¯ãã®èгç¹ã§æŽçããŸããã ã³ã³ãœãŒã«ã® SSH ãã¿ã³ æŠèŠ Google Cloud ã³ã³ãœãŒã«ã® VM äžèЧãã SSH ãã¿ã³ãæŒäžããŠãã°ã€ã³ããŸãã æãã·ã³ãã«ã§ç°¡åã« Linux VM ãžãã°ã€ã³ããæ¹æ³ã§ãã SSH ãã¿ã³ åè : ãã©ãŠã¶ããã® SSH ã€ã³ã¿ãŒãã§ã€ã¹ Web ãã©ãŠã¶ã®æ°èŠãŠã€ã³ããŠãéããSSH ã¿ãŒããã«ãšããŠå©çšã§ããŸãã ã·ã§ãŒãã«ããããŒã®å©çšããã¡ã€ã«ã®ã¢ããããŒããããŠã³ããŒãããã©ã³ãã®å€æŽãªã©ãå©çšã§ããå€ãã®ã±ãŒã¹ã§äžäŸ¿ãæããŸããã Web ãã©ãŠã¶ã® SSH ã€ã³ã¿ãŒãã§ã€ã¹ ãªããã®æ¹æ³ã§ã®ãã°ã€ã³ã詊ã¿ãéãIdentity-Aware ProxyïŒIAPïŒãå©çšã§ããæ¡ä»¶ãæºããããŠãããšãèªåçã« IAP çµç±ã§ã¢ã¯ã»ã¹ãããŸãã èŠä»¶ ãããã¯ãŒã¯ ãã®æ¹åŒã§ãã°ã€ã³ããéãVM ããèŠãæ¥ç¶å
IP ã¢ãã¬ã¹ã¯ãGoogle ã®ãããªã㯠IP ã¢ãã¬ã¹ã«ãªããŸãããã®ãã VPC ãããã¯ãŒã¯ã®ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŠã22/TCP ãã以äžã®ããããã®æ¥ç¶å
ããèš±å¯ããå¿
èŠããããŸãã 0.0.0.0/0ïŒãã°ã€ã³ããŠãã Google ã¢ã«ãŠã³ãã IAP æš©éãæã£ãŠ ããªã å Žå) 35.235.240.0/20ïŒãã°ã€ã³ããŠãã Google ã¢ã«ãŠã³ãã IAP æš©éãæã£ãŠ ãã å ŽåïŒ åºæ¬çã«ã¯ã 0.0.0.0/0 ãã該åœã€ã³ã¹ã¿ã³ã¹ãžã® 22/TCP ã VPC ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ã§èš±å¯ããå¿
èŠããããŸããããã¯ãVM ãžã® SSH ãã©ãã£ãã¯ããGoogle ã®ãããªã㯠IP ã¢ãã¬ã¹ããçºä¿¡ãããããã§ãã ããããGoogle ã®æ¥ç¶å
IP ã¢ãã¬ã¹ã¯ JSON ãã©ãŒãããã§å
¬éãããŠããããããèªåçã»å®æçã«ååŸããŠãã¡ã€ã¢ãŠã©ãŒã«ã«åæ ããä»çµã¿ãæ§ç¯ããã°ãIP ã¢ãã¬ã¹ã®è¿œå ãå€åã«å¯Ÿå¿ããããšãã§ããŸãã åè : ãã©ãŠã¶ã§ã® SSH åè : Google ã® IP ã¢ãã¬ã¹ã®ç¯å²ãååŸãã ãŸã 35.235.240.0/20 ããã®æ¥ç¶ããã¡ã€ã¢ãŠã©ãŒã«ã§èš±å¯ãããŠããããã€ãã°ã€ã³ããŠãã Google ã¢ã«ãŠã³ãããIAP ã§ä¿è·ããã ãã³ãã« ãŠãŒã¶ãŒïŒ roles/iap.tunnelResourceAccessor ïŒãªã©ã® IAP å©çšæš©éãæã£ãŠããå Žåãèªåçã« IAP çµç±ã§ã®æ¥ç¶ãšãªããŸãããã®å ŽåãVM ããèŠãæ¥ç¶å
IP 㯠35.235.240.0/20 ã® IP ã¢ãã¬ã¹ç¯å²ã«ãªããŸãã èªèšŒã»èªå¯ Google Cloud ã³ã³ãœãŒã«ãžã®ãã°ã€ã³ã«å©çšããŠãã Google ã¢ã«ãŠã³ããã該åœã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠé©å㪠IAM æš©éãæã£ãŠããã°ãSSH éµã管çããããšãªããGoogle ã¢ã«ãŠã³ãã®èªèšŒã§ãã°ã€ã³å¯èœã§ãã å
¬ééµã»ç§å¯éµã®ããŒãã¢ãèªåçã«äœæãããåŸãå
¬ééµã VM ã«ç»é²ãããOS ãŠãŒã¶ãŒãèªåçã«äœæãããŸããäœæããããŠãŒã¶ãŒå㯠Google ã¢ã«ãŠã³ãåã®@ããŒã¯ã®åã«ãªããŸããïŒãã ããåŸè¿°ã® OS ãã°ã€ã³ æ©èœã䜿ãå Žåã¯ããŠãŒã¶ãŒåãç°ãªããŸãïŒã å¿
èŠãª IAM æš©éã¯ä»¥äžã®ãšããã§ãã compute.instances.use æš©éçïŒCompute ã€ã³ã¹ã¿ã³ã¹ç®¡çè
(v1)ïŒ roles/compute.instanceAdmin.v1 ïŒããŒã«ã®ä»äžãæšå¥šïŒ VM ã«ãµãŒãã¹ã¢ã«ãŠã³ããã¢ã¿ãããããŠããå Žåã¯ããµãŒãã¹ã¢ã«ãŠã³ããŸãã¯ãããžã§ã¯ãã«å¯Ÿãã iam.serviceAccounts.actAs æš©éïŒãµãŒãã¹ ã¢ã«ãŠã³ã ãŠãŒã¶ãŒïŒ roles/iam.serviceAccountUser ïŒããŒã«çãæšå¥š) OS ãã°ã€ã³æ©èœãå©çšããå Žåã¯ãOS ãã°ã€ã³ã«å¿
èŠãª IAM ããŒã«ïŒ roles/compute.osAdminLogin ãŸã㯠roles/compute.osLogin ïŒ ãã®ããã«ãå€å°è€éã§ãããããžã§ã¯ãã®ãªãŒããŒæš©éãããã°åé¡ãªããã°ã€ã³ã§ããŸãããäŸãã°ãCompute 管çè
ïŒ roles/compute.admin ïŒããŒã«ã®ã¿ãæã£ãŠãã人ããã®æ¹æ³ã§ãã°ã€ã³ããããšããéã äºæããªããšã©ãŒã«ãããVM ã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ã§ããŸãããæ°ååŸ
ã£ãŠããããäžåºŠã詊ããã ããã çã®ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããããšããããŸããããã¯ãIAM æš©éãäžè¶³ããŠããããšã瀺ããŠããããµãŒãã¹ ã¢ã«ãŠã³ã ãŠãŒã¶ãŒïŒ roles/iam.serviceAccountUser ïŒããŒã«çãä»äžããããšã§è§£æ±ºããå ŽåããããŸãã ãšã©ãŒæã«è¡šç€ºãããããã©ãã«ã·ã¥ãŒãã£ã³ã°ããã¿ã³ãæŒäžãããšãäžè¶³ããŠãã IAM æš©éãªã©ã瀺ãããŸãã æ¥ç¶ã§ããŸããã§ãã OS ãã°ã€ã³æ©èœ OS ãã°ã€ã³ ïŒOS LoginïŒæ©èœãšã¯ãCompute Engine VM ãžã® SSH ãã°ã€ã³æã®èªèšŒããGoogle Cloud ã® IAM ã§ç®¡çããããã®ä»çµã¿ã§ãã VM ã®ã²ã¹ã OS äžã«ãã°ã€ã³ãŠãŒã¶ãŒãäœæããªããŠããé©å㪠IAM æš©éãæã£ãŠããã°ãVM ã« SSH ãã°ã€ã³ã§ããããã«ãªããŸãã 詳现ã¯ã以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp gcloud ã³ãã³ã æŠèŠ PC çã§å®è¡ãã gcloud ã³ãã³ãïŒå¥å Google Cloud CLIïŒã䜿ã£ãŠãCompute Engine VM ã«ãã°ã€ã³ããããšãã§ããŸãã ã³ãã³ãã©ã€ã³ã¯ gcloud compute ssh ${INSTANCE_NAME} --zone=${ZONE} ã§ãã åè : Linux VM ãžã®æ¥ç¶ ã€ã³ã¿ãŒãã§ã€ã¹ gcloud ã³ãã³ããã€ã³ã¹ããŒã«æžã¿ã§ããã°ãMac ã Windows ã®éåžžã®ã¿ãŒããã«ã§æäœã§ããŸãã 䜿ãæ
£ããèªåã® PC ã®ã¿ãŒããã«ãã SSH æ¥ç¶ããããšãã§ããŸãã åè : gcloud CLI ãã€ã³ã¹ããŒã«ãã èŠä»¶ ãããã¯ãŒã¯ VM ããèŠãæ¥ç¶å
IP ã¢ãã¬ã¹ã¯ãæäœããŠãã PC ç°å¢ã®ãããªã㯠IP ã¢ãã¬ã¹ãšãªããŸãããã®ãããVPC ãã¡ã€ã¢ãŠã©ãŒã«ã§ãPC ã皌åããŠããç°å¢ã®ãããªã㯠IP ã¢ãã¬ã¹ããã® 22/TCP ãèš±å¯ããŸãã èªèšŒã»èªå¯ å
¬ééµã»ç§å¯éµãçšæããªããŠããGoogle ã¢ã«ãŠã³ãã«ãã IAM èªèšŒã§ SSH ãã°ã€ã³ããããšãã§ããŸãã å¿
èŠãª IAM æš©éã¯ãåè¿°ã®ãã³ã³ãœãŒã«ã® SSH ãã¿ã³ããšåæ§ã§ãã VM ã«äœæããããŠãŒã¶ãŒåã¯ãå®è¡ç°å¢ã®ããŒã«ã«ãŠãŒã¶ãŒåãšãªããŸãããã ããåè¿°ã® OS ãã°ã€ã³æ©èœã䜿ãå Žåã¯ç°ãªãã <ã¢ã«ãŠã³ãå>_<ãã¡ã€ã³å> ã«ãªããŸãã äŸ : tom@example.com â tom_example_com SSH ã¿ãŒããã«ãœãããŠã§ã¢ æŠèŠ Tera Term ã PuTTY ãšãã£ãã䜿ãæ
£ãã SSH ã¿ãŒããã«ãœãããŠã§ã¢ãããVM ãžãã°ã€ã³ããããšãã§ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ Tera TermãPuTTYãLinux ã® SSH ã³ãã³ãçã§ãã èŠä»¶ ãããã¯ãŒã¯ VM ããèŠãæ¥ç¶å
ã¯ãæäœããŠãã PC ç°å¢ã®ãããªã㯠IP ã¢ãã¬ã¹ãšãªããŸããVPC ãã¡ã€ã¢ãŠã©ãŒã«ã§ããã®æ¥ç¶å
ããã® 22/TCP ãèš±å¯ããå¿
èŠããããŸãã èªèšŒã»èªå¯ IAM ã§ã¯ãªããSSH ããŒãã¢ã«ããå
¬ééµèªèšŒãšãªããŸãã VM ã«å
¬ééµã远å ããæ¹æ³ã¯ã以äžã®å
¬åŒããã¥ã¡ã³ããåç
§ããŠãã ããã以äžã®æ¹æ³ã«æ²¿ã£ãŠãã€ã³ã¹ã¿ã³ã¹ã¡ã¿ããŒã¿ã« SSH å
¬ééµã远å ããããšã§ãæå
ã®ç§å¯éµã§ãã°ã€ã³ããããšãã§ããŸãã åè : VM ã« SSH èªèšŒéµã远å ãã äžåºŠãã°ã€ã³ã§ããããã«ãªã£ãåŸã¯ãéåžžã® Linux ãµãŒããŒã®ããã« home ãã£ã¬ã¯ããªã® authorized_keys ã«å
¬ééµãçŽæ¥è¿œå ããããšãã§ããŸãã Identity-Aware ProxyïŒIAPïŒ æŠèŠ Identity-Aware ProxyïŒIAPïŒã¯ãGoogle Cloud ãæäŸãããã«ãããŒãžãã®ãããã·ãµãŒãã¹ã§ãããSSH ãã°ã€ã³æã«äœ¿çšã§ããŸãã VM ãžã®ãã°ã€ã³ã«ãããŠã¯ããã«ãããŒãžãã®èžã¿å°ãµãŒããããŒããã©ã¯ãŒããããŠãããã€ã¡ãŒãžãæã€ãšããã§ãããã IAP ã«ãã SSH ãã°ã€ã³ã®è©³çްã¯ã以äžã®èšäºã§ã解説ããŠããŸãã blog.g-gen.co.jp ã€ã³ã¿ãŒãã§ã€ã¹ åœèšäºã§ç޹ä»ãããã³ã³ãœãŒã«ã® SSH ãã¿ã³ããgcloud ã³ãã³ãããSSH ã¿ãŒããã«ãœãããŠã§ã¢ã ã®ã©ãããšçµã¿åãããŠå©çšãããããããããã®ã€ã³ã¿ãŒãã§ã€ã¹ãéžã¶ããšãã§ããŸãã èŠä»¶ ãããã¯ãŒã¯ VM ããèŠãæ¥ç¶å
IP ã¢ãã¬ã¹ã¯ãIAP ã®ãããªã㯠IP ã¢ãã¬ã¹ïŒ 35.235.240.0/20 ïŒã«ãªããŸããVPC ã®ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŠã 35.235.240.0/20 ããã® 22/TCP ãèš±å¯ããŸãã èªèšŒã»èªå¯ Google ã¢ã«ãŠã³ãããããžã§ã¯ãã¬ãã«ã§ãIAP ã§ä¿è·ããããã³ãã« ãŠãŒã¶ãŒïŒ roles/iap.tunnelResourceAccessor ïŒããŒã«ãä»äžãããŠããå¿
èŠããããŸãã ãã ããããã¯ãããŸã§ IAP ã䜿ã£ãŠãã³ãã«ã確çããããã®æš©éã§ãããã°ã€ã³ã«äœ¿ãæ¹æ³ïŒãã³ã³ãœãŒã«ã® SSH ãã¿ã³ããgcloud ã³ãã³ãããSSH ã¿ãŒããã«ãœãããŠã§ã¢ãïŒããšã®èªèšŒã»èªå¯ã®æ¡ä»¶ãã䜵ããŠæºããå¿
èŠããããŸãã IAP ã«ãã SSH ãã°ã€ã³ã®è©³çްã¯ã以äžã®èšäºã§ã解説ããŠããŸãã blog.g-gen.co.jp ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãX (æ§ Twitter) ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ã®ææã§ãã Cloud Functions ã§åäœãã Python ããã°ã©ã ãã Google Calendar API ãåŒã³åºãæ¹æ³ãã玹ä»ããŸãã æ€èšŒå
容 ããã°ã©ã ã®å
容 Google API ãžã®èªèšŒ æ€èšŒã®æµã Google Calendar API æå¹å ãµãŒãã¹ã¢ã«ãŠã³ãäœæã»èšå® ãµãŒãã¹ã¢ã«ãŠã³ãäœæ ãµãŒãã¹ã¢ã«ãŠã³ããž IAM æš©éä»äž ã³ãã³ãã©ã€ã³ ãœãŒã¹ã³ãŒãã®è§£èª¬ ãœãŒã¹ã³ãŒã ããã±ãŒãžã®ã€ã³ããŒã èªèšŒæ
å ±ååŸ ãµãŒãã¹ãªããžã§ã¯ãäœæ API åŒã³åºã BigQuery ãžã®æžã蟌㿠Python ç°å¢ã®æºå Cloud Functions ã®ããã〠åäœç¢ºèª ããŒã«ã«ç°å¢ã§ã®ãã¹ã ããŒã«ã«ç°å¢ã§ã® Functions ã®ãã¹ã ãµãŒãã¹ã¢ã«ãŠã³ãã®ããŒã®ããŠã³ããŒã functions-framework ã€ã³ã¹ããŒã« ä»®æ³ Cloud Functions å®è¡ ãªã¯ãšã¹ã æ€èšŒå
容 ããã°ã©ã ã®å
容 Cloud Functions ã§åäœãã Python ããã°ã©ã ãã Google Calendar API ãåŒã³åºãéã®èªèšŒã«ã€ããŠæ€èšŒããŸããã ä»åã¯åçŽåã®ããã以äžã®ãããªããã°ã©ã ãšããŠããŸãã Google Calendar API ãã³ãŒã«ããŠæ¥æ¬ã®ç¥æ¥äžèЧãååŸ ååŸããç¥æ¥äžèЧã BigQuery ããŒãã«ã« INSERT å®éã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ Google Calendar ããåŸæ¥å¡ã®äºå®ãååŸã㊠BigQuery ã«æå
¥ããåæãããªã©ã®çšéãèããããŸãã Google API ãžã®èªèšŒ ä»åæ€èšŒãããã£ãå
容㯠Google Calendar ãå§ããšããã Google API ãžã®èªèšŒã§ãã Google Calendar ã Gmail 㯠Google Cloud 補åã§ã¯ãªã Google 補åã§ãããã®ãã Cloud IAM ã䜿ã£ãèªèšŒã»èªå¯ããµããŒããããŠããŸããã API ããŒã«ããèªèšŒãOAuth 2.0 ã«ããèªèšŒããµãŒãã¹ã¢ã«ãŠã³ãã«ããèªèšŒããµããŒããããŠããŸãã Cloud Functions ãªã© Google Cloud äžã®å®è¡ç°å¢ã§åäœããããã°ã©ã ã§ã¯ãµãŒãã¹ã¢ã«ãŠã³ããçšããèªèšŒãæãã»ãã¥ã¢ã»äœå·¥æ°ã§ãããšèããããããããã®æ¹æ³ãæ€èšŒããŸãã æ€èšŒã®æµã æ€èšŒã®å
šäœã®æµãã¯ä»¥äžã®ãšããã§ãã æºå Google Cloud ãããžã§ã¯ãã«ãã㊠Google Calendar API ãæå¹å ãµãŒãã¹ã¢ã«ãŠã³ããäœæ ãµãŒãã¹ã¢ã«ãŠã³ãã« BigQuery ããŒã¿ç·šéè
ãã°æžã蟌㿠ããŒã«ãä»äž (â») Python ããã°ã©ã ã Cloud Functions (2nd gen) ã«ããã〠(Functions ã«ã¯ãµãŒãã¹ã¢ã«ãŠã³ããã¢ã¿ãã) (â») BigQuery ããŒã¿ç·šéè
㯠BigQuery ããŒãã«ãžã®ããŒã¿æžã蟌ã¿ããã ãã°æžã蟌㿠㯠Cloud Logging ãžã®ãã°åºåã®ãã åŠçã®æµã google-auth ã©ã€ãã©ãªã§ãµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ãååŸ google-api-python-client ã©ã€ãã©ãªã§ãµãŒãã¹ã€ã³ã¹ã¿ã³ã¹çæ Google Calendar API ãã³ãŒã«ããŠæ¥æ¬ã®ç¥æ¥äžèЧãååŸ google-cloud-bigquery ã©ã€ãã©ãªã§ç¥æ¥äžèЧã BigQuery ããŒãã«ã« INSERT 泚ç®ãã¹ãã¯ããµãŒãã¹ã¢ã«ãŠã³ããäœæããã°ãIAM æš©éãä»äžããªããŠãåããããžã§ã¯ãã§æå¹åããã Google Calendar API ã«ã¢ã¯ã»ã¹ã§ãããšããç¹ã§ãã ããããã¯ãåæé ã説æããŠãããŸãã Google Calendar API æå¹å ãŸãã¯ããã« Google Cloud ã³ã³ãœãŒã« > API ãšãµãŒãã¹ > æå¹ãª API ãšãµãŒãã¹ ã®ç»é¢ ( ãªã³ã¯ ) ãã Google Calendar API ãæå¹åããŸãã åç»é¢ã§ã¯å€æ°ã® API ã®ãªã¹ãã衚瀺ãããŸãããããã¹ãããã¯ã¹ã§ãã£ã«ã¿ããããããšãã§ããŸãã calendar ãšå
¥åãããšãµãžã§ã¹ããããã¯ãã§ãã ãããã¯ä»¥äžã®ã³ãã³ãã§ã API ãæå¹åã§ããŸãã gcloud services enable calendar-json.googleapis.com ãµãŒãã¹ã¢ã«ãŠã³ãäœæã»èšå® ãµãŒãã¹ã¢ã«ãŠã³ãäœæ Google Cloud ã³ã³ãœãŒã« > IAM ãšç®¡ç > ãµãŒãã¹ ã¢ã«ãŠã³ã ã®ç»é¢ ( ãªã³ã¯ ) ãããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸããèªåã®ãããžã§ã¯ããæ£ããéžæãããŠããããšã確èªããŠãã ããã ãµãŒãã¹ã¢ã«ãŠã³ãã¯ãããžã§ã¯ãã«æå±ãããªãœãŒã¹ã§ãã Google Calendar API ãæå¹åããã®ãšåããããžã§ã¯ãã«ããµãŒãã¹ã¢ã«ãŠã³ããäœæããå¿
èŠããããŸãã ä»åã¯è¡šç€ºåã get-holidays ãšããŠäœæããŸãã ãµãŒãã¹ã¢ã«ãŠã³ã ID 㯠get-holidays@${PROJECT}.iam.gserviceaccount.com ãšãªããŸã (${PROJECT} ã¯ãããžã§ã¯ã ID ã§ã) ã ãµãŒãã¹ã¢ã«ãŠã³ããž IAM æš©éä»äž 次ã«ãã®ãµãŒãã¹ã¢ã«ãŠã³ãã« IAM æš©éãä»äžããŸãã Google Calendar API ãã³ãŒã«ããã«ã¯ IAM æš©éã¯å¿
èŠãããŸããããä»å㯠BigQuery ã«ããŒã¿ãæžã蟌ãã ããCloud Logging ã«ãã°åºåããããã« IAM æš©éãå¿
èŠã§ãã ä»åã¯ãããžã§ã¯ãã¬ãã«ã§ã®æš©éä»äžãšããŸãã Google Cloud ã³ã³ãœãŒã« > IAM ãšç®¡ç > IAM ã®ç»é¢ ( ãªã³ã¯ ) ã«é·ç§»ããŸããç¹°ãè¿ãã«ãªããŸããèªåã®ãããžã§ã¯ããæ£ããéžæãããŠããããšã確èªããŠãã ããã å
çšäœæãããµãŒãã¹ã¢ã«ãŠã³ãã« BigQuery ããŒã¿ç·šéè
ãã°æžã蟌㿠㮠IAM ããŒã«ãä»äžããŸãã ã³ãã³ãã©ã€ã³ åè¿°ã®ããµãŒãã¹ã¢ã«ãŠã³ãäœæããšãIAM æš©éä»äžãã®äœæ¥ã¯ä»¥äžã®ã³ãã³ãã§ã宿œã§ããŸãã PROJECT = " ïŒãããžã§ã¯ã ID ã«çœ®ãæããŠãã ããïŒ " ACCOUNT_NAME = " get-holidays " gcloud iam service-accounts create ${ACCOUNT_NAME} --display-name= " ${ACCOUNT_NAME} " gcloud projects add-iam-policy-binding ${PROJECT} --member= " serviceAccount: ${ACCOUNT_NAME} @ ${PROJECT} .iam.gserviceaccount.com " --role= " roles/logging.logWriter " gcloud projects add-iam-policy-binding ${PROJECT} --member= " serviceAccount: ${ACCOUNT_NAME} @ ${PROJECT} .iam.gserviceaccount.com " --role= " roles/bigquery.dataEditor " ãœãŒã¹ã³ãŒãã®è§£èª¬ ãœãŒã¹ã³ãŒã 以äžã®ãœãŒã¹ã³ãŒãã䜿ããŸãã ä»å㯠Cloud Functions ã® HTTP 颿° ãæ³å®ããŠçšæããŸããã #!/usr/bin/env python import datetime import logging from flask import abort import google.auth from googleapiclient.discovery import build import google.cloud.bigquery import google.cloud.logging # ãã®ã³ã°èšå® logging.basicConfig( format = "[%(asctime)s][%(levelname)s] %(message)s" ) logger = logging.getLogger() # Cloud Logging ãžã®é£æº logging_client = google.cloud.logging.Client() logging_client.setup_logging() logger.setLevel(logging.INFO) # BigQuery Data Transfer Service ã®ã¯ã©ã€ã¢ã³ãçæ client = google.cloud.bigquery.Client() def get_holidays (dataset, table, year): """ ç¹å®å¹Žã®ç¥æ¥äžèЧã®ååŸãšããŒãã«ãžã®æžã蟌㿠""" logger.info(f "Getting holidays for year: {year}" ) # å®è¡ç°å¢ã®ããã©ã«ãã¯ã¬ãã³ã·ã£ã« = Cloud Functions ã«ã¢ã¿ãããããŠãããµãŒãã¹ã¢ã«ãŠã³ããååŸ credentials, project = google.auth.default() # ãµãŒãã¹ãçæ service = build( 'calendar' , 'v3' , credentials=credentials, cache_discovery= False ) # Google Calendar API åŒã³åºã result = service.events().list( calendarId= 'japanese__ja@holiday.calendar.google.com' , timeMin= str (year) + '-01-01T00:00:00.000000Z' , timeMax= str (year) + '-12-31T23:59:59.999999Z' , singleEvents= True , orderBy= 'startTime' ).execute() holiday_info = result.get( 'items' , []) # INSERT ãããªã¹ãäœæ holidays = [] for holiday in holiday_info: name = holiday[ 'summary' ] date = holiday[ 'start' ][ 'date' ] holidays.append([name, date]) # ã¹ããŒãå®çŸ© schema = [ google.cloud.bigquery.SchemaField( "name" , "STRING" , "REQUIRED" , "ç¥æ¥ã®åç§°" ), google.cloud.bigquery.SchemaField( "date" , "DATE" , "REQUIRED" , "ç¥æ¥ã®æ¥ä»" ) ] # ããŒãã«ã®å®çŸ© table_id = f "{project}.{dataset}.{table}" table = google.cloud.bigquery.Table(table_id, schema=schema) # ããŒãã«ã«INSERT client.insert_rows(table=table, rows=holidays) return None def main (request): # ãªã¯ãšã¹ããããã©ã¡ãŒã¿ãååŸ request_dict = request.get_json() logger.info(request_dict) # ãã©ã¡ãŒã¿ãã§ã㯠if ( 'dataset' in request_dict): dataset = request_dict[ 'dataset' ] else : error_message = "Parameter dataset is missing." logger.error(error_message) return abort( 400 ) if ( 'table' in request_dict): table = request_dict[ 'table' ] else : error_message = "Parameter table is missing." logger.error(error_message) return abort( 400 ) # ã¡ã€ã³åŠç try : # çŸåšã®è¥¿æŠãååŸ this_year = datetime.date.today().year # Google Calendar ããç¥æ¥ãååŸã㊠BigQuery ã«æžã蟌㿠get_holidays(dataset, table, this_year) except Exception as e: logger.error(e) return abort( 500 ) return "OK" ãã®ãœãŒã¹ã³ãŒãã®èªèšŒã«é¢ããéšåãã説æããŸãã ããã±ãŒãžã®ã€ã³ããŒã #!/usr/bin/env python import datetime import logging from flask import abort import google.auth from googleapiclient.discovery import build import google.cloud.bigquery import google.cloud.logging å¿
èŠãªããã±ãŒãžã®ã€ã³ããŒããè¡ããŸãã Cloud Functions ã§ã¯å¿
èŠãªããã±ãŒãžã requirements.txt ã«èšèŒããŠãããã€ããã±ãŒãžã«å«ããããšã§èªåçã«ç°å¢ããã«ããããŸãã requirements.txt ã®äœæãå«ãã Python ã®ç°å¢æ§ç¯æé ã¯åŸè¿°ããŸãã import google.auth ãš from googleapiclient.discovery import build ãèªèšŒã«é¢ããã©ã€ãã©ãªã§ãã èªèšŒæ
å ±ååŸ get_holidays 颿°ã§ Google Calendar API ãåŒã³åºããŠããŸãã # å®è¡ç°å¢ã®ããã©ã«ãã¯ã¬ãã³ã·ã£ã« = Cloud Functions ã«ã¢ã¿ãããããŠãããµãŒãã¹ã¢ã«ãŠã³ããååŸ credentials, project = google.auth.default() google-auth 㯠Google API ã®èªèšŒã®ããã®ã©ã€ãã©ãªã§ãã default() 颿°ã«ããå®è¡ç°å¢ã®ããã©ã«ãã¯ã¬ãã³ã·ã£ã« = ä»å㯠Cloud Functions ã«ã¢ã¿ãããããŠãããµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ãååŸããŸãããã®æžãæ¹ã§ã¯ credentials 倿°ã«ã¯ã©ã€ãã©ãªç¬èªã® Credentials åã§èªèšŒæ
å ±ã代å
¥ãã project 倿°ã«ã¯ str åã§å®è¡ç°å¢ã®ããã©ã«ããããžã§ã¯ãã®ãããžã§ã¯ã ID ã代å
¥ãããŸã ( åè )ã ãªããã€ãŠã¯ oauth2client ãšèšãåç§°ã®ã©ã€ãã©ãªãååšããŸããããã¡ã㯠deprecated (廿¢äºå®ã»éæšå¥š) ãšãªãçŸåšã¯ google-auth ãæšå¥šã§ãã ãµãŒãã¹ãªããžã§ã¯ãäœæ Google API Python Client ã® build() ã«ãããµãŒãã¹ãªããžã§ã¯ããçæããŸããGoogle ã® API ãåŒã¶ããã®ã€ã³ã¿ãŒãã§ã€ã¹ãçæããã€ã¡ãŒãžã§ãã # ãµãŒãã¹ãçæ service = build( 'calendar' , 'v3' , credentials=credentials, cache_discovery= False ) cache_discovery=False 㯠oauth2client ã®ããŒãžã§ã³ 4 以åã§ãµããŒããããŠããæ©èœãç¡å¹åããããã®èšè¿°ã§ãããããç¡ããšã以äžã®ãããªãã°ã¡ãã»ãŒãžãåºåãããŸã (å®åäœã«ã¯åœ±é¿ãããŸãã) ã file_cache is only supported with oauth2client<4.0.0 API åŒã³åºã # Google Calendar API åŒã³åºã result = service.events().list( calendarId= 'japanese__ja@holiday.calendar.google.com' , timeMin= str (year) + '-01-01T00:00:00.000000Z' , timeMax= str (year) + '-12-31T23:59:59.999999Z' , singleEvents= True , orderBy= 'startTime' ).execute() execute() ã§å®éã« API ãåŒã³åºããŠããŸãã japanese__ja@holiday.calendar.google.com ã¯æ¥æ¬ã®ç¥æ¥ãä¿æããŠããã«ã¬ã³ããŒãªãœãŒã¹ã§ã Google Calendar ãããã©ã«ãã§æã£ãŠããŸãã BigQuery ãžã®æžã蟌㿠BigQuery Python Client ã® insert_rows() ã§ããŒãã«ã«ããŒã¿ã INSERT ããŸãã # INSERT ãããªã¹ãäœæ holidays = [] for holiday in holiday_info: name = holiday[ 'summary' ] date = holiday[ 'start' ][ 'date' ] holidays.append([name, date]) å
¥åããå€ã¯ [ ["ã«ã©ã Aã®å€1", "ã«ã©ã Bã®å€1"], ["ã«ã©ã Aã®å€2", "ã«ã©ã Bã®å€2"], ...] ã®ããã«äºæ¬¡å
é
åã§æž¡ãããããã®ããã«æŽåœ¢ããŠããŸãã 以äžã§å®éã« API ãå®è¡ããããŒãã«ã«ããŒã¿ãæ¿å
¥ããŸãã client.insert_rows(table=table, rows=holidays) Python ç°å¢ã®æºå ãœãŒã¹ã³ãŒãã®è§£èª¬ã¯ãããŸã§ã§ãã ããããã¯ãããŒã«ã«ã§ Python ç°å¢ãæºåããæ¹æ³ã説æããŸãã å¿
èŠã«å¿ã以äžã®ããã« venv ç°å¢ãäœæã activate ããŸãã python -m venv venv source venv/bin/activate ä»åã®ããã°ã©ã ã§äœ¿ãããã±ãŒãžãã€ã³ã¹ããŒã«ã requirements.txt ãäœæããŸãã pip install google-auth google-api-python-client google-cloud-logging google-cloud-bigquery pip freeze > requirements.txt ãªããœãŒã¹ã³ãŒãäžã§ flask ã®ã¢ãžã¥ãŒã«ã import ããŠããŸãã Cloud Functions ã® python å®è¡ç°å¢ã«ã¯ Flask ããã±ãŒãžãäºãå«ãŸããŠãããããæç€ºçã« pip install ããã requirements.txt ã«å«ããå¿
èŠã¯ãããŸããã Cloud Functions ã®ããã〠以äžã®ã³ãã³ãã§ Cloud Functions ããããã€ããŸãã ãœãŒã¹ã³ãŒããš requirements.txt ãååšãããã£ã¬ã¯ããªã§ã³ãã³ãå®è¡ããŠãã ããããŸããããã€ã®ãã©ã¡ãŒã¿ã¯é©å®èšå®ãã ããã PROJECT = " ïŒãããžã§ã¯ã ID ã«çœ®ãæãïŒ " ACCOUNT_NAME = " get-holidays " FUNCTION = " get-holidays " gcloud functions deploy ${FUNCTION} \ --quiet --gen2 \ --project = ${PROJECT} \ --region = asia-northeast1 \ --runtime = python39 \ --service-account = ${ACCOUNT_NAME} @ ${PROJECT} .iam.gserviceaccount.com \ --entry-point main \ --trigger-http åäœç¢ºèª ãããã€ãæåãããšãæšæºåºåã«ãšã³ããã€ã³ã URL ã衚瀺ãããŸããGoogle Cloud ã³ã³ãœãŒã«ã® Cloud Functions ç»é¢ãã確èªããããšãã§ããŸããã以äžã®ã³ãã³ãã§ååŸããããšãã§ããŸãã FUNCTION = " get-holidays " URL = `gcloud functions describe ${FUNCTION} --region=asia-northeast1 --gen2 --format= " value(serviceConfig.uri) " ` echo ${URL} 以äžã® curl ã³ãã³ãã§ function ã®åäœç¢ºèªãããŸãã INSERT å
ã®ããŒã¿ã»ãããšããŒãã«ã¯äºãäœæããŠãããã³ãã³ãå
ã®æååã眮ãæããŠãã ããã curl -X POST \ -H " Authorization: bearer $( gcloud auth print-identity-token ) " \ -H " Content-Type: application/json " \ -d ' {"dataset": "ïŒããŒã¿ã»ããåã«çœ®ãæãïŒ", "table": "ïŒããŒãã«åã«çœ®ãæãïŒ"} ' \ ${URL} ãªãåœ function ã¯åŒã³åºãæã« IAM èªèšŒãå¿
èŠãšããèšå®ã«ãªã£ãŠããŸãã®ã§ Authorization ããããä»äžããŠããŸãã $(gcloud auth print-identity-token) ã«ããããŒã«ã«ç°å¢ã«èšå®ãããŠãã Google ã¢ã«ãŠã³ãæš©éã§ããŒã¯ã³ãååŸããŠããŸãã å®è¡ã§ãããã以äžã®ããã« BigQuery ããŒãã«ã«ããŒã¿ã INSERT ãããããšã確èªããŸãã BigQuery ããŒãã«ã«ããŒã¿ãæ¿å
¥ããã ããŒã«ã«ç°å¢ã§ã®ãã¹ã ããŒã«ã«ç°å¢ã§ã® Functions ã®ãã¹ã Cloud Functions ã®ãããã€ã«ã¯ 2 åçšåºŠã®æéãããããŸããã³ãŒãä¿®æ£åŸã«åäœç¢ºèªããããšãããã¡ãã¡ãããã€ããŠããã®ã§ã¯æéãããããããŠããŸããŸãã functions-framework ãšããã©ã€ãã©ãªã䜿ãããšã§ãããŒã«ã« PC ç°å¢ã§ Cloud Functions ãåäœããããã¹ãããããšãã§ããŸãã ããããã¯ããã®æé ãã玹ä»ããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãã®ããŒã®ããŠã³ããŒã ãŸãããŒã«ã«ã®ä»®æ³ç㪠Functions ããå®éã« Google Cloud API ãã³ãŒã«ããéã®èªèšŒã®ããããµãŒãã¹ã¢ã«ãŠã³ãã®ããŒãããŠã³ããŒãããŸãã Google Cloud ã³ã³ãœãŒã« > IAM ãšç®¡ç > ãµãŒãã¹ ã¢ã«ãŠã³ã ã®ç»é¢ ( ãªã³ã¯ ) ããä»åäœæãã get-holidays ãµãŒãã¹ã¢ã«ãŠã³ããéžæãã詳现ç»é¢ãžé·ç§»ããŸãã ã㌠ãšããã¿ããããéµã远å ããæŒäžããŠãæ°ããéµãäœæããéžæããŸãã JSON 圢åŒã§éµããäœæãããããŠã³ããŒãããŸãã ä»åã¯ããŒã«ã«ã®ãœãŒã¹ã³ãŒããšåããã£ã¬ã¯ããªã« test-cred.json ãšããŠä¿åããŸãã ãã®ãã¡ã€ã«ãæŒæŽ©ãããšããµãŒãã¹ã¢ã«ãŠã³ããæã€æš©éã§å¥œãã« Google Cloud ç°å¢ãæäœã§ããŠããŸãããšã«ãªãã®ã§ãååãæ°ãã€ããã ããã functions-framework ã€ã³ã¹ããŒã« functions-framework ã䜿ãããšã§ããŒã«ã«ç°å¢ã§ HTTP 颿°ããã¹ãããããšãã§ããŸãã pip ã§ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸããæé ã¯ä»¥äžãåèã«ããŠãã ããã blog.g-gen.co.jp ä»®æ³ Cloud Functions å®è¡ ãœãŒã¹ã³ãŒããšåããã£ã¬ã¯ããªã§ä»¥äžãå®è¡ããŠãã ããã GOOGLE_APPLICATION_CREDENTIALS = " ./test-cred.json " functions-framework --target main --debug ããã§ããŠã³ããŒããããµãŒãã¹ã¢ã«ãŠã³ãããŒãå®è¡ç°å¢ã®ããã©ã«ãèªèšŒæ
å ±ãšããŠèšå®ããããã§ä»®æ³ç㪠Cloud Functions ãèµ·åã§ããŸããä»®æ³ç㪠Functions 㯠8080/tcp ããŒãã§åŸ
ã¡åãããŸãã ãªãæ¬æ¥ãããŒã«ã«ã®ä»®æ³ function ãã Google Cloud API ãåŒã¶ã ãã§ããã° Google ã¢ã«ãŠã³ãã®æš©éã§äžåºŠ gcloud auth application-default login ( åè ) ãå®è¡ããã°ããŒã®ããŠã³ããŒããç°å¢å€æ°ã§ã®æå®ã¯äžèŠã§ãã ãããä»å㯠Google Calendar API ã®åŒã³åºããããããããäžèšã³ãã³ãã«ããèªèšŒæ
å ±ã®èšå® (Google ã¢ã«ãŠã³ãã«ããã¢ããªã±ãŒã·ã§ã³ããã©ã«ãã¯ã¬ãã³ã·ã£ã«èšå®) ã«å¯Ÿå¿ããŠããªããããæ¬æ¥ã¯ã§ããã°é¿ããã¹ãã§ããããŒã®ããŠã³ããŒãã»æå®ãè¡ããŸããã ãªã¯ãšã¹ã 以äžã® curl ãªã¯ãšã¹ãã§å®éã«åäœãããããšãã§ããŸããããŒã¿ã»ããåãšããŒãã«åã¯å®éã®ãã®ã«çœ®ãæããŠãã ããã curl localhost:8080 -X POST -H " Content-Type: application/json " -d ' {"dataset": "testdataset", "table": "holidays"} ' ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãTwitter ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ã®ææã§ããGoogle Cloud ã®éµç®¡çãµãŒãã¹ã§ãã Cloud KMS ïŒCloud Key Management ServiceïŒã培åºè§£èª¬ããŸãã Cloud KMS ãšã¯ Cloud KMS ã®æé ããã©ã«ãæå·åãš CMEK ããã©ã«ãã®æå·å 顧客管çã®éµïŒCMEKïŒ ééçãªæå·å Key ãš Key ring Key (ããŒãéµ) Key ãšã¯ éµã®ç®ç Key ã®ããŒãžã§ã³ ä¿è·ã¬ãã« (ã¹ãã¬ãŒãž) Key ring (ããŒãªã³ã°) ãªãœãŒã¹ã®åé€ éµã®ããŒããŒã·ã§ã³ã»ããŒãžã§ã³ã»ç¶æ
ããŒããŒã·ã§ã³ ããŒãžã§ã³ ããŒãžã§ã³ã®ç¡å¹åãšç Žæ£ ç¶æ
Autokey Autokey ãšã¯ ä»çµã¿ æå¹å Autokey ã®åŒ·å¶ éµã®æš©é管ç Key ring ãš Key ã® IAM ããªã·ãŒ èª°ãæš©éãå¿
èŠãšããã è·æåæ£ (Separation of duties) ç¬èªã®éµãšå€éšã®éµ éµã®ã€ã³ããŒã å€éšã®éµã®å©çš æå·åã®ææ³ãšæè¡ ãšã³ãããŒãæå·å ã¢ã«ãŽãªãºã Cloud KMS ãªãœãŒã¹ã®æŽåæ§ Cloud KMS ãšã¯ Cloud KMS 㯠Google CloudïŒæ§ç§° GCPïŒã®éµç®¡çãµãŒãã¹ã§ããæ£åŒå称㯠Cloud Key Management Service ã§ãããKMS ãšç¥ãããããšãã»ãšãã©ã§ãã Google Cloud ã§ç§å¯éµãäœæã»ä¿ç®¡ã»ç®¡çã§ããéµã¯åçš® Google Cloud ãµãŒãã¹ã®ã¹ãã¬ãŒãžãæå·åããããšçã«çšããããšãã§ããŸããäŸãšã㊠Cloud Storage ãã±ããããCompute Engine ã®æ°žç¶ãã£ã¹ã¯ãBigQuery ã®ããŒã¿ã»ãããªã©ãæå·åã®å¯Ÿè±¡ã§ãã Google Cloud ãµãŒãã¹ã«ä¿åãããããŒã¿ã¯ ããã©ã«ãã§æå·åãããŠãã ããã®ãšã㯠Google åŽã§èªåçã«éµã管çã»ããŒããŒã·ã§ã³ãããããããŠãŒã¶ãŒåŽã§æèããå¿
èŠã¯ãããŸãããããããããã©ã«ãã®ä¿åããŒã¿ã®æå·åããšãããŸãã åè : ããã©ã«ãã®ä¿åããŒã¿ã®æå·å ãããéåžžã«åŒ·åºãªã»ãã¥ãªãã£ãæ±ããããå Žåããæ
å ±ã»ãã¥ãªãã£ç£æ»äžã®çç±çã«ãããŠããŠãŒã¶ãŒåŽã§ç¬èªã«éµã管çããŠãããçšããŠæå·åãããå ŽåããããŸãããã®ãšãã«ãæå·éµãšã㊠Cloud KMS ã®éµãå©çšããããšãã§ããŸãã Cloud KMS ã«ã¯ããŠãŒã¶ãŒåŽã§çæããéµãã¢ããããŒãããŠä¿ç®¡ããããšãã§ããŸãããCloud KMS ã§ç¬èªã®éµãçæãããããšãã§ããŸããããã« Cloud HSM ãšåŒã°ãããã«ãããŒãžãã® HSMïŒHardware Security ModuleïŒãçšããŠéµã®çæã»ãã¹ãã£ã³ã°ãè¡ãããããšãã§ããŸãã åè : Cloud Key Management Service ã®æŠèŠ Cloud KMS ã®æé Cloud KMS ã®æé㯠KMS ãä¿æããéµã®ããŒãžã§ã³ã®æ°ãšãéµã«å¯Ÿãããªãã¬ãŒã·ã§ã³ã®åæ°ã§æ±ºãŸããŸãã äŸãšããŠã¢ã¯ãã£ããªå¯Ÿç§°éµã®ããŒãžã§ã³ 1 åã«ã€ããæé¡ $0.06 ã§ãïŒ2024幎9æçŸåšãä¿è·ã¬ãã« SOFTWARE ã®å ŽåïŒãæéã¯æ¥å²ããããŸãã ãªãã¬ãŒã·ã§ã³ã«å¯ŸããŠã¯ãæå·å/埩å·ãªãã¬ãŒã·ã§ã³ 10,000 åã«ã€ã $0.03 ã§ãã ææ°ã®æ£ç¢ºãªæéãèšç®äŸã¯ä»¥äžã®ããã¥ã¡ã³ãããåç
§ãã ããã åè : Cloud Key Management Service ã®æé ããã©ã«ãæå·åãš CMEK ããã©ã«ãã®æå·å Cloud KMS ãå©çšããå¿
èŠããããã©ãããæ€èšããã«ã¯ãããã©ã«ãã®æå·åããšãCMEKïŒcustomer-managed encryption keysïŒããšããèšèãçè§£ããå¿
èŠããããŸãã ãŸããGoogle Cloud ãµãŒãã¹ã®ã¹ãã¬ãŒãžã¯å
šãŠã ããã©ã«ãã®æå·å ãšããæ©èœã§æå·åãããŠããŸããCompute Engine ã®ãã£ã¹ã¯ã Cloud Storage ã®ãã±ãããBigQuery ã®ããŒã¿ã»ãããªã©ã¯ãæã
ãäœãæå®ããªããŠã AES-256 æ¹åŒã§æå·åãããŠããŸããæå·åéµã¯ Google ã«ãã£ãŠç®¡çã»ç£æ»ã»ããŒããŒã·ã§ã³ãããŠããŸãã ããã«ããããŒã¿ã¯ããŒããŠã§ã¢ã®ç©ççãªçé£ã Google ã®å
éšç¯ã«ããã¢ã¯ã»ã¹ãªã©ããä¿è·ãããŸãããŸããããã®ç®¡çæ¹åŒã¯ç¬¬äžè
æ©é¢ã«ããç£æ»ãåããŠããŸãã ã€ãŸããäœãããªããŠã Google Cloud ã®ã¹ãã¬ãŒãžäžã®ããŒã¿ã¯é«åºŠãªã»ãã¥ãªãã£ã«ããä¿è·ãããŠããããšã«ãªããŸãã ããè©³çŽ°ãªæ
å ±ã¯ä»¥äžã®å
¬åŒãã¯ã€ãããŒããŒããåç
§ãã ããã åè : ããã©ã«ãã®ä¿åããŒã¿ã®æå·å 顧客管çã®éµïŒCMEKïŒ äžæ¹ã§ Google Cloud ãµãŒãã¹ã®äžã«ã¯ãããŒã¿ãããã©ã«ãã®æå·åã§ã¯ãªãã 顧客管çã®éµ ïŒCMEK = customer-managed encryption keysïŒã§æå·åããããéžæã§ãããã®ããããŸããCompute Engine ã®æ°žç¶ãã£ã¹ã¯ã Cloud Storage ã®ãã±ãããBigQuery ã®ããŒã¿ã»ãããªã©ã¯ããªãœãŒã¹äœææã«ããã©ã«ãæå·åã CMEK æå·åãéžæã§ããããã«ãªã£ãŠããŸãã CMEK ã«ããæå·åãéžæãããšãCloud KMS ã§ãŠãŒã¶ãŒèªèº«ã管çããéµã§ããŒã¿ãæå·åããããšãã§ããŸãã ãã ã CMEK ãéžæããããšããå¿
ãããã»ãã¥ãªãã£ãé«ããããšãæå³ããããã§ã¯ãããŸãããããã©ã«ãã®æå·åã¯ç¬¬äžè
æ©é¢ã«ããç£æ»ãåããŠãããååã«å®å
šã§ããCMEK ãéžæããå¿
èŠãããã®ã¯ã以äžã®ãããªç¹æ®ãªã»ãã¥ãªãã£èŠä»¶ãååšããŠãããšãã®ã¿ã§ãã æå·åéµã®ååšããåœçã®ãã±ãŒã·ã§ã³ã管çã§ããå¿
èŠããã éµã®ããŒããŒã·ã§ã³ãç¡å¹åãªã©ã®ç®¡çããŠãŒã¶ãŒåŽã§è¡ãå¿
èŠããã ç¬èªã®éµç®¡çã·ã¹ãã ã§çæã»ç®¡çããæå·éµã䜿ãå¿
èŠããã ã»ãšãã©ã®ã±ãŒã¹ã§ã¯äžèšã®ãããªå³å¯ãªéµç®¡çã¯å¿
èŠãããŸãããããªãé«åºŠãªã»ãã¥ãªãã£ãæ±ãããŠãããã第äžè
ç£æ»ã®èŠä»¶ãšããŠäžèšã®ãããªå³å¯ãªå¶åŸ¡ãæ±ããããå Žåã«ãCMEK ãå©çšããŸãã ééçãªæå·å ããã©ã«ãã®æå·åã CMEKïŒcustomer-managed encryption keysïŒã«ããæå·åããããããã¹ãã¬ãŒãžã® ééçãªæå·å ã§ãã ééçãªæå·åã§ã¯ããŠãŒã¶ãŒã¯æå·åãæèããããšã¯ãããŸããããŠãŒã¶ãŒã®ç¥ããªããšããã§ãåæã«æå·åãããŠãããã®ãééçãªæå·åã§ãã äŸãã°ãŠãŒã¶ãŒãæå·åããã Cloud Storage ãã±ããã«ãªããžã§ã¯ããã¢ããããŒããããšãCloud Storage ã®ãµãŒãã¹åŽã§èªåçã«ããŒã¿ãæå·åãããŠæ ŒçŽãããŸããããŒã¿ã®èªã¿åãæãåæ§ã«ããŠãŒã¶ãŒãããŒã¿ã«ã¢ã¯ã»ã¹ãããš Cloud Storage ã®ãµãŒãã¹åŽã§èªåçã«ããŒã¿ã埩å·ãããŠãŒã¶ãŒã«æž¡ãããŸãã KMS ã®éµã¯ Google Cloud ãªãœãŒã¹ã§ãããã IAM æš©éãé©çšå¯èœã§ãããééçãªæå·åã«ãããŠã¯ããŠãŒã¶ãŒã¯éµãžã®ã¢ã¯ã»ã¹æš©ãå¿
èŠãšããŸãããééçãªã¢ã¯ã»ã¹ã«ãã㊠KMS éµãžã®ã¢ã¯ã»ã¹æš©éãå¿
èŠãªã®ã¯ããµãŒãã¹ãšãŒãžã§ã³ãïŒGoogle Cloud ãµãŒãã¹ãããã©ã«ãã§æã€ç¹æ®ãªãµãŒãã¹ã¢ã«ãŠã³ãïŒã§ãã ééçãªæå·åã®ä»çµã¿ (Cloud Storage) ãã®ããã«ãééçãªæå·åã¯ãŠãŒã¶ãŒã«ã¯å
šãæèãããŸããïŒããããééçããšããèšèã®æå³ã§ãïŒããããããããŒã¿ã®ééçæå·åã¯ã¢ã¯ã»ã¹å¶åŸ¡èгç¹ã§ã®ã»ãã¥ãªãã£ã®åäžã«ã¯å¯äžããªãããšãåãããŸããããŒã¿ã®ééçæå·åã察åŠã§ããè
åšã¯ãããŸã§ã ç©çã¹ãã¬ãŒãžæ©åšã®çé£ ãã å
éšç¯ã«ããã¹ãã¬ãŒãžæ©åšãžã®ç©ççã¢ã¯ã»ã¹ ãçã§ãã Key ãš Key ring Key (ããŒãéµ) Key ãšã¯ Key (ããŒãéµ) ã¯ãã®åã®éããCloud KMS ã§ç®¡çãããéµãã®ãã®ã§ãã Key ã¯å¿
ã Key ring (ããŒãªã³ã°) ã«æå±ããŠããŸããKey ring ã¯ç¹å®ã®ãã±ãŒã·ã§ã³ (ãªãŒãžã§ã³) ã«æå±ããã®ã§ãKey ãå¿
ç¶çã«ç¹å®ã®ãã±ãŒã·ã§ã³ã«ååšãããªãœãŒã¹ã§ãã éµã¯ç¡å¹åããããç Žæ£ãããããããšãã§ããŸãã éµã®ç®ç Key ã¯äœææã« ç®ç (Purpose) ãæå®ããŸããç®çã¯ä»¥äžã® 4 ã€ããéžæããŸããç®çã¯äžåºŠéžæãããšã倿Žã§ããŸããã 察称æå·å (Symmetric encryption) é察称眲å (Asymmetric signing) é察称æå·å (Asymmetric encryption) MAC 眲å (MAC signing) äžèšã®ãã¡ 1. ãš 4. ã¯ å¯Ÿç§°éµ ã§ããã2. ãš 3. 㯠éå¯Ÿç§°éµ (ç§å¯éµãšå
¬ééµã®ããŒãã¢) ã§ãã é察称éµã§ã¯ãå
¬ééµã®ã¿ãããŠã³ããŒãããããšãã§ããŸããäžæ¹ã§å¯Ÿç§°éµã¯ äžåããŠã³ããŒãããããšã¯ã§ããŸãã ãKMS ã®éµã¯ãKMS å
éšã§ã®ã¿ä¿æã»ç®¡çã»å©çšãããŸãã Compute EngineãCloud StorageãBigQuery ãªã©ã®ã¹ãã¬ãŒãžã® CMEK æå·åã«äœ¿ãã®ã¯ 1. 察称æå·åéµã§ãã 察称éµã¯ãããããå
±é鵿å·åã«çšããããéµã§ãçæãããç§å¯éµãæå·åãšåŸ©å·ã®äž¡æ¹ã«äœ¿ãããŸãã é察称éµã¯å
¬ééµã»ç§å¯éµã®ãã¢ã§æå·åã»åŸ©å·ãè¡ãéµã§ãã å
¬é鵿å·å (é察称æå·åãšã) ãšåŒã°ããææ³ã®æå·åãã眲åã«çšããããŸãã ãå
±é鵿ããå
¬é鵿å·ããé»å眲åããšãã£ãã¯ãŒã㯠Google Cloud ãã¯ã©ãŠãç¹æã®ãã®ã§ã¯ãªããIT ç¥èãšããŠäžè¬çãªãã®ã§ãã®ã§ãåçš® Web ãµã€ãããåç
§ãã ããã MAC 眲åã®éµã¯ HMAC 眲åãè¡ãããã®éµã§ããHMAC 㯠Hash Based Message Authentication Code ã®ç¥ã§ã¡ãã»ãŒãžèªèšŒç¬Šå· (MAC) ã®äžã€ã§ããã·ã¹ãã éã¡ãã»ãŒãžã®æ¹ããæ€åºããªãããŸã鲿¢ã®ããã«äœ¿ãããŸããKMS ã® MAC 眲åç®çã®éµã䜿ã£ã眲åãšæ€èšŒã¯ 察称éµãçšã㊠è¡ãããŸãã Key ã®ããŒãžã§ã³ Key ã«ã¯è€æ°ã® ããŒãžã§ã³ ãæãããããšãã§ããŸãããŸãããŒãžã§ã³ã®äžã€ã ãã©ã€ããªã®ããŒãžã§ã³ (ã¡ã€ã³ã®ããŒãžã§ã³ãšãåŒç§°) ãšããŠæå®ã§ããŸãã éµã®å©çšæã«æç€ºçã«æå®ããªãå Žåããã©ã€ããªã®ããŒãžã§ã³ãçšããããŸãããã ãé察称éµã«ã¯ãã©ã€ããªããŒãžã§ã³ãç¡ããåžžã«ããŒãžã§ã³ãæå®ããå¿
èŠããããŸãã ãŸãéµã®ããŒãžã§ã³ã¯ãæå¹ããç¡å¹ããç Žæ£ã®äºå®ããç Žæ£ããšããç¶æ
ãæã£ãŠãããããŒãžã§ã³ããšã«ç¡å¹åãããç Žæ£ãããããããšãã§ããŸãã ä¿è·ã¬ãã« (ã¹ãã¬ãŒãž) éµã¯ ä¿è·ã¬ãã« ãšãã屿§ãæã¡ãããã«ããéµãä¿åããã¹ãã¬ãŒãžã決ãŸããŸãã SOFTWARE HSM EXTERNAL EXTERNAL_VPC æã䜿ãããã±ãŒã¹ãå€ãã®ã SOFTWARE ã§ãGoogle Cloud ã®åŒ·åºãªã»ãã¥ãªãã£ã®å
ã«ç®¡çãããŸãã HSM ã¯ãã®åã®éããã«ãããŒãžãã® HSM (Hardware Security Module) ã«ãã£ãŠç®¡çãããŸããæé㯠SOFTWARE ãããå²é«ã§ãã EXTERNAL ãš EXTERNAL_VPC ã¯ãKMS ã§ã¯ãªãå€éšã®éµç®¡çã·ã¹ãã ã§ç®¡çãããŠããéµã KMS ãçµç±ããŠå©çšããããã®ä¿è·ã¬ãã«ã§ãããŠãŒã¶ãŒã®ç¬èªã®éµç®¡çã·ã¹ãã ã« KMS çµç±ã§ã¢ã¯ã»ã¹ããGoogle Cloud ãµãŒãã¹ã®ã¹ãã¬ãŒãžæå·åçã«çšããããšãã§ããŸãããã®ä»çµã¿ãå©çšããããã« External key manager (EKM) ãšããä»çµã¿ãå©çšããŸãã Key ring (ããŒãªã³ã°) Key ring (ããŒãªã³ã°) ã¯ãã®åã®éããéµãã°ã«ãŒãã³ã°ãããªãœãŒã¹ã§ããKey ring ã¯ç¹å®ã®ãã±ãŒã·ã§ã³ (ãªãŒãžã§ã³) ã«æå±ããŸããKey ã¯äœæãããšååšããæéã ãæéãçºçããŸãã Key ring ã«ã¯æéãçºçããŸããã ãªãã ãã±ãŒã·ã§ã³ (ãªãŒãžã§ã³) ããšè¡šçŸããŠããŸããããã±ãŒã·ã§ã³ãšãªãŒãžã§ã³ã¯å³å¯ã«ã¯ç°ãªããŸãããªãŒãžã§ã³ãšããèšè㯠asia-northeast1 (æ±äº¬) ã asia-northeast2 (倧éª) ãªã©ãç¹å®ã®ãªãŒãžã§ã³ãæããŸããäžæ¹ã§ãã±ãŒã·ã§ã³ãšããèšè㯠global ã asia (ã¢ãžã¢)ãus (ç±³åœ) ãšãã£ããã«ããªãŒãžã§ã³ããŸãåãªãŒãžã§ã³ã®äžã«ãããŸãŒã³ãªã©ãå«ãããããåºãæŠå¿µã§ãã Key ring ã¯äœæãããã±ãŒã·ã§ã³ãæå®ã§ããŸãããasia-northeast1 (æ±äº¬) ãªã©ç¹å®ã®åäžãªãŒãžã§ã³ãéžã¶ããšãã§ããŸãããglobal ã asia (ã¢ãžã¢) ãªã©ã®ãã«ããªãŒãžã§ã³ãšããŠäœæããããšãã§ããŸãã ãã㊠Cloud Storage ãã±ããã Compute Engine æ°žç¶ãã£ã¹ã¯ã®æå·åã«äœ¿ãã Key ã¯ãåããã±ãŒã·ã§ã³ã«ååšããå¿
èŠããããŸããasia-northeast1 (æ±äº¬) ã®ãã±ããã§ããã° Key ã asia-northeast1 (æ±äº¬) ã«ååšããå¿
èŠããããŸããã asia ãã«ããªãŒãžã§ã³ã®ãã±ãã㯠asia ãã«ããªãŒãžã§ã³ã® Key ã§ããæå·åã§ããŸããããã®ãããKey ring ãš Key ãäœæãããã±ãŒã·ã§ã³ã¯éèŠã§ãã ãªãœãŒã¹ã®åé€ Key ã Key ã®ããŒãžã§ã³ããŸã Key ring ãäžåºŠäœæãããš åé€ã¯ã§ããŸãã ã Key ring ã«ã¯è²»çšãçºçããªããããå®è³ªçãªåé¡ã¯ãããŸããã ãŸã Key ã®ããŒãžã§ã³ã¯ãç Žæ£ãããããšã¯ã§ããŸããç Žæ£ããããŒãžã§ã³ã«ã¯æéãçºçããŸãããKey ã®ããŒãžã§ã³ãå
šãŠåé€ããã°ãKey ã«æéã¯ããããŸããããªããç¡å¹ããç Žæ£ã®äºå®ãã®ç¶æ
ã®ããŒãžã§ã³ã«ã¯æéãçºçããããšã«ã泚æãã ããã ãããã®ãªãœãŒã¹ã¯äžåºŠäœæãããšäžæã® ID ãå²åœãŠããããããæ°žç¶çã«ç¶ããšãèããã ããã éµã®ããŒããŒã·ã§ã³ã»ããŒãžã§ã³ã»ç¶æ
ããŒããŒã·ã§ã³ Cloud KMS ã§ã¯å¯Ÿç§°éµã®ã¿ãèªåããŒããŒã·ã§ã³ãèšå®ã§ããŸãããŸããAPI ã«ããæåããŒããŒã·ã§ã³ããªã³ããã³ãå®è¡ããããšãå¯èœã§ãã ããŒããŒã·ã§ã³ããããšãKey ã®æ°ããããŒãžã§ã³ãçæãããããŒãžã§ã³çªå·ã 1 å¢ããŸãã èªåããŒããŒã·ã§ã³ã®é »åºŠã¯ Key ã®äœææã«æå®ã§ããã»ããåŸãã倿Žããããšãå¯èœã§ããèªåããŒããŒã·ã§ã³ã®é »åºŠã¯ 1 æ¥ïœ36,500 æ¥ã®éã§æå®ããããšãå¯èœã§ãããã©ã«ãã§ã¯ 90 æ¥ã§ãã é察称éµã®å Žåã¯ãæåããŒããŒã·ã§ã³ã§æ°ããç§å¯éµãäœãå Žåãå
¬ééµãé
åžããªããå¿
èŠããããŸãã ããŒãžã§ã³ Key ã«ã¯åè¿°ã®éãããŒãžã§ã³ãååšããŸããKey ãæ°èŠäœæãããšããŒãžã§ã³ã¯ 1 ããå§ãŸããããŒããŒã·ã§ã³ããããšã«æ°åã 1 ã€ãã€å¢ããŸãã Key ã®ããŒãžã§ã³ã«ã¯äžæã® ID ãå²ãæ¯ãããŸãã ããŒãžã§ã³ã®ç¡å¹åãšç Žæ£ Key ã®ããŒãžã§ã³ã¯åå¥ã«ç¡å¹åããããç Žæ£ãããããããšãã§ããŸãã éèŠãªãã€ã³ããšã㊠ããããŒãžã§ã³ã® Key ã§æå·åããããŒã¿ã埩å·ã§ããã®ã¯ããã®ããŒãžã§ã³ã ãã§ãã ãšããç¹ãçè§£ããŠãã ããã以äžã«äŸã瀺ããŸãã ãã Cloud Storage ãã±ãããããã Key ã§æå·åãããŠãããšããŸãããããšããªããžã§ã¯ã A ãã¢ããããŒããããŸããããã®ãšã Key ã®ãã©ã€ããªããŒãžã§ã³ã¯ 1 ã ã£ããšããŸãããªããžã§ã¯ã A ã¯ããŒãžã§ã³ 1 ã® Key ã§æå·åãããããšã«ãªããŸãã ãã®åŸã®ããæ¥ãããŒãããŒããŒã·ã§ã³ããããã©ã€ããªããŒãžã§ã³ã¯ 2 ã«ãªããŸããããã®æ®µéã§ã¯ãã¡ããããŠãŒã¶ãŒã¯åŒãç¶ãããŒãžã§ã³ 1 ã§æå·åããããªããžã§ã¯ã A ã«ã¢ã¯ã»ã¹ã§ããŸããããŒãžã§ã³ 1 ã® Key ãæå¹ç¶æ
ã ããã§ãã ãããšã Key ã®ããŒãžã§ã³ 1 ãäœããã®çç±ã§ç¡å¹åãããšããŸãããã®ãšããŠãŒã¶ãŒããã®ãªããžã§ã¯ã A ã«ã¢ã¯ã»ã¹ããããšãããš Unable to decrypt with Cloud KMS ã®ãšã©ãŒãè¿ããŸãããªããžã§ã¯ã A ãæå·åããããŒãžã§ã³ 1 ã® Key ãç¡å¹åãããŠãããããCloud Storage ããªããžã§ã¯ã A ã埩å·ã§ããªããªã£ãããã§ãã ç¶æ
Key ã®ããŒãžã§ã³ã¯ãæå¹ ( ENABLED )ããç¡å¹ ( DISABLED )ããç Žæ£ã®äºå® ( DESTROY_SCHEDULED )ããç Žæ£ ( DESTROYED )ãã® 4 ã€ã®ç¶æ
ã®ãããããæã¡ãŸãã æå¹ ( ENABLED ) ã¯ããŒãžã§ã³ã䜿çšå¯èœãªç¶æ
ã§ããããšã瀺ããŸãã ç¡å¹ ( DISABLED ) ã¯ããŒãžã§ã³ãæç€ºçã«ç¡å¹åããŠããã䜿çšäžå¯ã®ç¶æ
ã§ããå床ãæå¹ç¶æ
ã«æ»ãããšãå¯èœã§ãã ç Žæ£ã®äºå® ( DESTROY_SCHEDULED ) ã¯ããŒãžã§ã³ã®ç Žæ£ãæç€ºãããŠãããæå®ãããæ¥æã§åé€ãããäºå®ã§ããããšãæå³ããŸãããã®ç¶æ
ã®ããŒãžã§ã³ãå©çšããããšã¯ã§ããŸããããã®ç¶æ
ã®ããŒãžã§ã³ã¯ã埩å
ãããããšãã§ããŸãã ãã®ãç Žæ£ã®äºå®ããšããç¶äºæéã¯ããã©ã«ãã§ã¯ 24 æéã§ããæé㯠Key ã®äœææã«ã®ã¿èšå®ã§ããããšãã倿Žããããšã¯ã§ããŸãããæå°ã¯ 24 æéã§ãæå€§ 120 æ¥éã§ãã Autokey Autokey ãšã¯ Autokey ã¯ãCloud KMS éµã®äœæãå²ãåœãŠãããŒããŒã·ã§ã³ãèªååããä»çµã¿ã§ããAutokey ãæå¹åããããšã§ãKey ring ã Key ãªã©ãå¿
èŠã«ãªã£ãéã«ãããããèªåçã«çæãããããã«ãªããŸãã Terraform ãšã®é£æºãèæ
®ãããŠãããéµã®ç®¡çå·¥æ°ãäœæžããããšãã§ããŸãã åè : Autokey ã®æŠèŠ ä»çµã¿ Autokey ã¯ã ãããžã§ã¯ãåäœ ããŸã㯠ãã©ã«ãåäœ ã§æå¹åããŸãã ãã Google Cloud ãããžã§ã¯ãã§ Autokey ãæå¹åãããšããã®ãããžã§ã¯ãå
ã®ãªãœãŒã¹ã®ããŒã¿ããèªåçæããæå·éµã§æå·åã§ããããã«ãªããŸãã2026幎2æçŸåšããããžã§ã¯ãåäœã§ã® Autokey æå¹å㯠Preview 段éã§ãã ãããã©ã«ãã§ Autokey ãæå¹åãããšããã®ãã©ã«ãé
äžã® Google Cloud ãããžã§ã¯ãã§ Autokey ã䜿çšå¯èœã«ãªããŸãããã©ã«ãåäœã§ã®æå¹ã®å Žåãæå·éµã¯ éµãããžã§ã¯ã ïŒkey projectïŒãšåŒã°ãããAutokey ã®éµãä¿åããå°çšã®ãããžã§ã¯ãã«éçŽãããŸãã Autokey ãæå¹ã«ãªã£ãŠãããããžã§ã¯ãã§ Cloud Storage ãã±ãããCompute Engine ã®æ°žç¶ãã£ã¹ã¯ãBigQuery ããŒãã«ãSecret Manager ã®ã·ãŒã¯ã¬ãããCloud SQL ã€ã³ã¹ã¿ã³ã¹ãSpanner ã€ã³ã¹ã¿ã³ã¹ãªã©ãAutokey ã«å¯Ÿå¿ããŠãããªãœãŒã¹ãäœæããéã«ãAutokey éµã®äœæããªã¯ãšã¹ãã§ããŸãã ãªã¯ãšã¹ããçºçãããšãAutokey ã¯èªåçã«ãKey ringãKeyããµãŒãã¹ã¢ã«ãŠã³ãããµãŒãã¹ã¢ã«ãŠã³ããžã®æå·åãšåŸ©å·ã®æš©éä»äžãªã©ãè¡ãããŸãããªãœãŒã¹ãäœæãããŠãŒã¶ãŒãããããã®äœæ¥ãæåã§è¡ãå¿
èŠã¯ãããŸããã æå¹å ãããžã§ã¯ãåäœã§ Autokey ãæå¹åããã«ã¯ã autokeyConfig ãšãã API ãªããžã§ã¯ããäœæããŸãã2026幎2æçŸåšããããžã§ã¯ãåäœã§ã® Autokey æå¹å㯠Preview 段éã§ãããWeb API ãžã®çŽæ¥ãªã¯ãšã¹ããããæå¹åã®æ¹æ³ãçšæãããŠããŸããã åè : Enable Cloud KMS Autokey - Enable Autokey for delegated key management ãã©ã«ãåäœã§ Autokey ãæå¹åããéã¯ãéµãä¿ç®¡ããããã®éµãããžã§ã¯ãã Autokey å°çšã«äœæããããšãæšå¥šãããŸãããã®åŸã察象ã®ãã©ã«ãã§ Autokey ãæå¹åããŸãããã®ãšããéµãããžã§ã¯ããæå®ããŸãããã©ã«ãã§ã®æå¹åã¯ãGoogle Cloud ã³ã³ãœãŒã«ããè¡ãããšãã§ããŸãã åè : Enable Cloud KMS Autokey - Set up Autokey for centralized key management ãªããAutokey ã®æå¹åã¯ãTerraform ã§èšè¿°ããããšãå¯èœã§ãã åè : Enable Cloud KMS Autokey - Enable Autokey using Terraform Autokey ã®åŒ·å¶ Autokey ãæå¹åããããã§ãCMEK ã®çµç¹ããªã·ãŒïŒ constraints/gcp.restrictNonCmekServices ïŒã䜿çšããéµãå¶éããçµç¹ããªã·ãŒïŒ constraints/gcp.restrictCmekCryptoKeyProjects ïŒãæå¹åããããšã§ãAutokey ã®äœ¿çšã匷å¶ããããšãå¯èœã§ãã è©³çŽ°ãªæé ã¯ä»¥äžãåç
§ããŠãã ããã åè : Enable Cloud KMS Autokey éµã®æš©é管ç Key ring ãš Key ã® IAM ããªã·ãŒ KMS ã® Key ring ãš Key ã«ã¯ IAM ããªã·ãŒãä»äžã§ããéµãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããããšãã§ããŸãã IAM ããªã·ãŒã®æå³ã«ã€ããŠã¯ åœç€Ÿèšäº ããåç
§ãã ããããã以éã®èšè¿°ã¯ IAM ããªã·ãŒã IAM ããŒã«ã®æå³ãçè§£ããŠããåæã§èšèŒããããŸããç¹ã«ééããèµ·ãããããã€ã³ããšã㊠Google Cloud ã®ãIAM ããªã·ãŒããIAM ããŒã«ã㯠AWS ã®ãIAM ããªã·ãŒããIAM ããŒã«ããšã¯æå³ãç°ãªãç¹ã«ãçæãã ããã Key ring ã«ä»äžãã IAM æš©éã¯é
äžã® Key ã«ãç¶æ¿ãããŸãããã ã Key ã®åããŒãžã§ã³ã«åå¥ã® IAM ããªã·ãŒã¯ãããŸãããã€ãŸãæš©é管çã®æå°åäœã¯ Key ãšãªããŸãã èª°ãæš©éãå¿
èŠãšããã éµãžã®ã¢ã¯ã»ã¹æš©éã¯èª°ãå¿
èŠãšããããèããŸãã倧ãŸãã«ä»¥äžã®2éãã§ãã éµã®ç®¡ç (äœæãç Žæ£ãããŒããŒã·ã§ã³ãç¡å¹åãæå¹åçïŒ éµã䜿ã£ãæå·åã»åŸ©å· åè
ã®ã管çãã¯ãGoogle Cloud ã®ç®¡çè
ãã»ãã¥ãªãã£æ
åœè
ãæš©éãæã€ã¹ãã§ãã ã¯ã©ãŠã KMS 管çè
(roles/cloudkms.admin) ããŒã«ãªã©ããããžã§ã¯ãåäœãããã㯠Key ring / Key åäœã§æã€ããšãã§ããŸãã åŸè
ã®æå·åã»åŸ©å·æš©éã«ã€ããŠã¯ãç¹ã« CMEK ã«ããã¹ãã¬ãŒãžæå·åã§èããå Žé¢ãåºãŠããŸããCMEK ã«ããã¹ãã¬ãŒãžæå·åã¯ééçãªæå·åã§ãããããéµãžã®ã¢ã¯ã»ã¹æš©éãå¿
èŠãšããã®ã¯ Google Cloud ãµãŒãã¹ ãã®ãã®ã§ããæ£ç¢ºã«èšããš Google Cloud ãµãŒãã¹ã¯ ãµãŒãã¹ ãšãŒãžã§ã³ã ãšåŒã°ããç¹æ®ãªãµãŒãã¹ã¢ã«ãŠã³ããæã£ãŠããŸãã Comute Engine ã Cloud Storage ã§ã¯ãããžã§ã¯ãã«äžã€ããµãŒãã¹ãšãŒãžã§ã³ããããã©ã«ãã§çšæãããŠãããä»ã® Google Cloud ãµãŒãã¹ã® API åŒã³åºãã¯ãã®ãµãŒãã¹ãšãŒãžã§ã³ãã«ãã£ãŠè¡ãããŠããŸãããã®ãµãŒãã¹ãšãŒãžã§ã³ããè£ã§ KMS ã䜿ã£ãæå·åã»åŸ©å·ãPub/Sub ãžã®éç¥ãªã©ãè¡ã£ãŠããã®ã§ãã äŸãšã㊠Cloud Storage ã®ãµãŒãã¹ãšãŒãžã§ã³ã㯠service-${ãããžã§ã¯ãçªå·}@gs-project-accounts.iam.gserviceaccount.com ãšããåç§°ã§ãæåããååšããŠãããã³ã³ãœãŒã«ç»é¢ã gcloud ã³ãã³ãã§ç¢ºèªããããšãã§ããŸãã Cloud Storage ã®ãµãŒãã¹ãšãŒãžã§ã³ã äœæããã°ããã®éµã«æš©é倿Žãå ããŠããªãç¶æ
ã§ Cloud Storage ãã±ããã® CMEK æå·åãèšå®ããããšãããšãã³ã³ãœãŒã«ç»é¢ã§ä»¥äžã®ããã«ä¿ãããŸã (以äžã¯ Cloud Storage ãã±ããã®äœæç»é¢ã§ã) ã æš©é远å ãä¿ããã äžèšã¯ãããžã§ã¯ãã® Cloud Storage ãµãŒãã¹ãšãŒãžã§ã³ãã«è©²åœã® Key ã«å¯Ÿãã cloudkms.cryptoKeyEncrypterDecrypter ããŒã«ãäžããããã«ä¿ãã¡ãã»ãŒãžã§ãããã®æš©éãä»äžããããšã§ãCloud Storage 㯠Key ã«ã¢ã¯ã»ã¹ããæå·åã»åŸ©å·ãè¡ãããšãã§ããŸãã ãªãäžèšã§ã¯ãµãŒãã¹ãšãŒãžã§ã³ãã«ãã Key ã®å©çšã®äŸãèšèŒããŸãããããã以å€ã«ã KMS éµã眲åäœæãªã©ã®ç®çã§æç€ºçã«å©çšããå Žåã«ã¯ãå©çšããã¯ã©ã€ã¢ã³ãåŽã§ Cloud KMS æå·éµã®çœ²åè
(roles/cloudkms.signer) ãªã©ã®æš©éãå¿
èŠã§ãã Cloud KMS é¢é£ã®å®çŸ©æžã¿ããŒã«ã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ãã«ç¶²çŸ
ãããŠããŸãã Cloud KMS ã®ããŒã« è·æåæ£ (Separation of duties) IT äžè¬ã®ã»ãã¥ãªãã£ã®èãæ¹ã« æå°æš©éã®åå ãšåŒã°ãããã®ããããŸããåäººã«æ¥åäžå¿
èŠãšãªãæå°ã®æš©éã ããäžããããšãååãšããããšã§ãªã¹ã¯ãäœæžããèãæ¹ã§ãã Cloud KMS ã§ãäŒæ¥ãçµç¹ã«ãããŠéµãžã®ã¢ã¯ã»ã¹æš©éãç®¡çæš©éã忣ãæå°éã«ããããšã§ãªã¹ã¯ãäžããããšããã¹ããã©ã¯ãã£ã¹ãšãããŠãããããã¯ è·æåæ£ (Separation of duties) ãšåŒã°ããŠããŸãã ãã®èãã«åºã¥ããå€§èŠæš¡å©çšã«ãããŠã¯ Cloud KMS ã®éµãç¬èªã® Google Cloud ãããžã§ã¯ãã«éçŽãããããšãæšå¥šãããŠããŸãã KMS å°çšãããžã§ã¯ãã«ã¯ãªãŒã㌠(Owner) ã®ããŒã«ãä»äžããªã 代ããã«çµç¹ã¬ãã«ã®çµç¹ã®ç®¡çè
(roles/resourcemanager.organizationAdmin) ãéµã®æš©éã管çãã çµç¹ã®ç®¡çè
ã¯éµèªäœãžã®å©çšæš©éãæããªããéµã® IAM ããªã·ãŒãæäœããæš©éãæã€ããã管çããšãå©çšããåé¢ã§ãã ç¬èªã®éµãšå€éšã®éµ éµã®ã€ã³ããŒã KMS ã«ã¯æ¢åã®éµãã€ã³ããŒãããããšãã§ããŸããã€ã³ããŒãããéµã¯ Cloud HSM Key ãããã¯ãœãããŠã§ã¢ Key ãšããŠã€ã³ããŒããããŸãã ã€ã³ããŒãã§ããéµã«ã¯éµã®çš®é¡ã»ç®çå¥ã«èŠä»¶ããããã ããã¥ã¡ã³ã ããåç
§ãã ããã éµãã€ã³ããŒãããåã« Key ring ãš Key ãäœæããŠãããŸããã€ã³ããŒãåŸã®éµã¯ããã® Key ã®æ°ããããŒãžã§ã³ãšããŠã€ã³ããŒããããŸãã å€éšã®éµã®å©çš Cloud External Key Manager (Cloud EKMãå€éšéµãããŒãžã£ãŒ) ãçšãããš Cloud KMS ãã Fortanix ã Futurex ãšãã£ããµãŒãããŒãã£è£œã®éµç®¡çã·ã¹ãã ã«æ¥ç¶ããå€éšéµç®¡çã·ã¹ãã ã®éµã KMS éµã®ããã«å©çšããããšãã§ããŸãã å€éšéµç®¡çã·ã¹ãã ãšã®æ¥ç¶ã¯ãã€ã³ã¿ãŒãããçµç±ãã VPC çµç± ããéžæããããšãã§ããŸãã EKM ã§åã蟌ãã å€éšéµã¯ Compute Engine ã Cloud StorageãBigQuery ã§ CMEK æå·åã«å©çšããããšãã§ããŸãã Cloud EKM çµç±ã§å€éšéµç®¡çã·ã¹ãã ã®éµãå©çšã§ãã æå·åã®ææ³ãšæè¡ ãšã³ãããŒãæå·å ãšã³ãããŒãæå·å ãšããæè¡ããããŸãããã㯠Cloud KMS ã«ããæå·åã§äœ¿ãããŠããæè¡ã§ãããAWS ã® KMS çã§ã䜿ãããŠããŸããééçæå·åã«ãããŠã¯ãŠãŒã¶ãŒã®æèããªããšããã§è¡ãããŠãããããç¥ããªããŠãæ¥åã«æ¯éã¯ãããŸããã ãšã³ãããŒãæå·åã§ã¯ããŒã¿ãæå·åããéµãã®ãã® (Data Encryption Key = DEK) ãšãã® DEK ãæå·åããå¥ã®éµ (Key Encryption Key = KEK) ã®äºæ®µéãçšããŸãã éœåºŠçæãã DEK ã§ããŒã¿ãæå·åããDEK èªäœã¯ KMS ã§çæã»ç®¡çãã KEK ã§æå·åããããã§ããŒã¿ãšäžç·ã«ä¿ç®¡ããŸããããŒã¿ãå©çšãããšã㯠KEK ã§ DEK ã埩å·ãã埩å·ããã DEK ã§ããŒã¿ã埩å·ããŸããKEK 㯠KMS ã®å€ã«åºãããšã¯ãªããã»ãã¥ã¢ã«ç®¡çãããŸãã æåã§ã®è§£èª¬ã«ã¯éçããããããå³ã«ãã解説ãããããã¥ã¡ã³ããããã€ãã玹ä»ããŸãã 以äžã¯ Google Cloud ã®å
¬åŒããã¥ã¡ã³ãã§ãã ãšã³ãããŒãæå·å 以äžã¯ AWS Encryption SDK ã®å
¬åŒããã¥ã¡ã³ãã§ãããšã³ãããŒãæå·åã«ã€ããŠå³è§£ããŠããŸãã AWS Encryption SDK ã®æŠå¿µ - ãšã³ãããŒãæå·å ã¢ã«ãŽãªãºã éžæã§ããéµã®æå·åã¢ã«ãŽãªãºã ã¯ãéµã®ç®çã«ãã£ãŠç°ãªããŸãã ç®çã察称æå·å / åŸ©å· (Symmetric encrypt/decrypt) ã®å¯Ÿç§°éµã®å Žåã GOOGLE_SYMMETRIC_ENCRYPTION ã¢ã«ãŽãªãºã ãå©çšããã Galois Counter Mode (GCM) / AES-256 éµãšãªããŸãã ç®çãé察称眲å (Asymmetric signing) ã®é察称éµã®å Žåãæ¥åæ²ç·çœ²å / RSA 眲åã¢ã«ãŽãªãºã ã®ãã¡è€æ°ã®äžããéžæããããšãã§ããŸãããŸãé察称éµã®ç®çãé察称æå·å / åŸ©å· (Asymmetric encrypt/decrypt) ã®å ŽåããRSA ã¢ã«ãŽãªãºã ã®äžããéžæã§ããŸãã 詳现ã¯ä»¥äžã®ããã¥ã¡ã³ãããåç
§ãã ããã éµã®ç®çãšã¢ã«ãŽãªãºã Cloud KMS ãªãœãŒã¹ã®æŽåæ§ Cloud KMS ãªãœãŒã¹ (Key ã Key ring) ã¯ãäœæã»åé€ã»ç¡å¹åãªã©ã®ãªãã¬ãŒã·ã§ã³ã«å¯ŸããŠããªãœãŒã¹ããšã« ç°ãªãæŽåæ§ ãæã£ãŠããŸãã KMS ãªãœãŒã¹ã«å¯Ÿãããªãã¬ãŒã·ã§ã³ã«ã¯ 匷æŽåæ§ ãš çµææŽåæ§ ã® 2 çš®é¡ããããŸãã匷æŽåæ§ãªãã¬ãŒã·ã§ã³ã¯å®è¡åŸã«çŽã¡ã«é©çšãããŸããçµææŽåæ§ã®ãªãã¬ãŒã·ã§ã³ã¯é垞㯠1 å以å
ã« Google Cloud å
ã«äŒæãããŸãããæå€§ã§ 3 æéããããšãããŠããŸãã ãªãã¬ãŒã·ã§ã³ããšã®æŽåæ§ã¯ä»¥äžã®ãšããã§ãã ãªãã¬ãŒã·ã§ã³å æŽåæ§ Key ring ã®äœæ 匷æŽåæ§ Key ã®äœæ 匷æŽåæ§ Key ã®ããŒãžã§ã³ã®æå¹å 匷æŽåæ§ Key ã®ããŒãžã§ã³ã®ç¡å¹å çµææŽåæ§ Key ã®ãã©ã€ã㪠(ã¡ã€ã³) ããŒãžã§ã³ã®å€æŽ çµææŽåæ§ IAM æš©éã®å€æŽ çµææŽåæ§ (éåžžã¯æ°ç§) 泚ç®ãã¹ãç¹ã¯ãéµããŒãžã§ã³ã®ç¡å¹åã IAM ã¢ã¯ã»ã¹ã®å€æŽãçµææŽåæ§ã§ããç¹ã§ããéµã䜿ããªãããããã«ããŒãžã§ã³ãç¡å¹åããŠããæå€§ã§ 3 æéãéµã䜿ããç¶æ
ã«ãªã£ãŠããŸãå¯èœæ§ããããŸãããŸã IAM æš©éã®åé€ããéåžžã¯æ°ç§ã§åæ ãããŸããã1 æéçšåºŠãããå ŽåããããŸãã ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO å
èŠå¯å®ãšããçµæŽãæã€ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS èªå®è³æ Œããã³ Google Cloud èªå®è³æ Œã¯ãã¹ãŠååŸãXïŒæ§ TwitterïŒã§ã¯ Google Cloud ã Google Workspace ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ææã§ããGoogle Cloud ã®ç¡å BI ããŒã« Looker Studio ã®æåçã§ãã Looker Studio Pro ã«ã€ããŠè§£èª¬ããŸãã æŠèŠ Looker Studio Pro ãšã¯ æ©èœ å©çšéå§æ¹æ³ ãµãã¹ã¯ãªãã·ã§ã³ å©çšéå§æé æ³šæç¹ãšãã©ãã«ã·ã¥ãŒãã£ã³ã° Gemini in Looker çæ AI ãšã®é£æº Conversational Analytics ã¢ã»ãã ã¯ãŒã¯ã¹ããŒã¹ ã¯ãŒã¯ã¹ããŒã¹ãšã¯ èªåã®ã¹ããŒã¹ (My workspace) ããŒã ã¯ãŒã¯ã¹ããŒã¹ (Team workspace) æš©éç®¡ç æŠèŠ Looker Studio ã®æš©é管ç ããŒã ã¯ãŒã¯ã¹ããŒã¹çšã®ããŒã« ã¢ã»ããçšã®ããŒã« IAM æš©é管ç IAM æš©éãš Looker Studio æš©éã®äœ¿ãåã éè·è
å¯Ÿå¿ åŒ·åãããã¡ãŒã«é
ä¿¡æ©èœ æŠèŠ Looker Studio Pro ãšã¯ Looker Studio Pro 㯠Google Cloud ã®ç¡å BI ããŒã« Looker Studio ïŒæ§ç§°ãããŒã¿ããŒã¿ã«ããŸãã¯ãData Studioã) ã®æåçã§ãã Looker Studio Pro ã§ã¯ç¡åçãšæ¯èŒããŠãšã³ã¿ãŒãã©ã€ãºåãæ©èœã匷åãããŠããããŸã Google Cloud ã®ã«ã¹ã¿ããŒã±ã¢ïŒæè¡ãµããŒãïŒã®å¯Ÿè±¡ãšãªããŸãããŸã SLAïŒ99.9%ã®å¯çšæ§ïŒã®å¯Ÿè±¡ãšãªããªã©ãçµç¹ã§ã®å€§èŠæš¡å©çšã«é©ãããã®ãšãªã£ãŠããŸãã åè : Looker Studio Pro ã«ã€ã㊠ãªãããã䌌ãåç§°ã® Looker ã¯åœèšäºã§ã玹ä»ãã Looker StudioïŒProïŒãšã¯å¥ã®è£œåã§ãããããã®éãã«ã€ããŠã¯ã以äžã®åœç€Ÿèšäºããã²ãåç
§ãã ããã blog.g-gen.co.jp Looker ãš Looker Studio ã®éã æ©èœ Looker Studio Pro ã§ã¯ãç¡åçã® Looker Studio ã«ã¯ãªãã以äžã®ãããªè¿œå ã®æ©èœãå©çšã§ããŸãã æ©èœå 説æ Gemini in Looker çæ AI ã¢ãã« Gemini ã«ãã倿°ã®è£å©æ©èœã ã»Conversational AnalyticsïŒAI ãšã®äŒè©±ãéããåæïŒ ã»Google ã¹ã©ã€ããžã®ãšã¯ã¹ããŒã ã»èšç®ãã£ãŒã«ãã®çæãªã© ããŒã ã¯ãŒã¯ã¹ããŒã¹ ã»å
±åç·šéããããã®ç®±ã®ããš ã»ããã«ã¢ã»ãã (ã¬ããŒããšããŒã¿ãœãŒã¹ãæã) ãå
¥ããããšã§ãã¯ãŒã¯ã¹ããŒã¹ã«å¯Ÿããæš©éãæã€ã¡ã³ããŒéã§å
±åç·šéã§ããããã«ãªã ã»ããŒã ã¯ãŒã¯ã¹ããŒã¹ãžã®é²èŠ§æš©éä»äžãå¯èœ 管çè
æš©é ã«ããã¢ã»ãã管ç (IAM) ã»Looker Studio Pro ãšçŽã¥ãã Google Cloud ãããžã§ã¯ãã« IAM æš©éãä»äžããããšã§ã管çè
ãå
šãŠã®ããŒã ã¯ãŒã¯ã¹ããŒã¹å
ã®ã¢ã»ãããèŠéãããšãã§ããããã«ãªã 匷åããã ã¡ãŒã«é
ä¿¡æ©èœ ç¡åçãã匷åãããã¬ããŒãé
ä¿¡æ©èœã ã»å³æé
ä¿¡ ã»Google ãã£ããã Slack ãžã®é
ä¿¡ ã»åäžã¬ããŒããžã®è€æ°ã¹ã±ãžã¥ãŒã«äœæ ã»åä¿¡è
ã«å¿ãããã£ã«ã¿ãªã© éè·è
å¯Ÿå¿ ã»Looker Studio Pro ãæå¹åããŠãããšãã¢ã»ããã¯çµç¹ã«ãã£ãŠç®¡çãããããã«ãªããäœæè
ã®ã¢ã«ãŠã³ããåé€ãããŠãã¢ã»ããã¯åé€ãããªã ã»äžæ¹ã®ç¡åç Looker Studio ã§ã¯ã¢ã»ããã®ãªãŒããŒã¯å人ã¢ã«ãŠã³ãã®ãããéè·çã§ã¢ã«ãŠã³ããåé€ãããåã«ãªãŒããŒãç§»è¡ããçã®äœæ¥ãå¿
èŠ ãµããŒã ã»å
¬åŒãµããŒã (Google Cloud ã«ã¹ã¿ããŒã±ã¢) ã®ãµããŒã察象 åè : Looker Studio Pro ã³ã³ãã³ãã«ã€ã㊠åè : Looker Studio Pro ã®ã¹ã¿ãŒãã¬ã€ã å©çšéå§æ¹æ³ ãµãã¹ã¯ãªãã·ã§ã³ Looker Studio Pro ã®å©çšã«ã¯ãã©ã€ã»ã³ã¹ (ãµãã¹ã¯ãªãã·ã§ã³) ã远å ã§è³Œå
¥ããå¿
èŠããããŸãã賌å
¥æ¹æ³ã¯äºçš®é¡ãããŸãã ãŠãŒã¶åäœã®æå¹å æéã¢ã¯ãã£ããŠãŒã¶ãŒïŒMAUïŒãµãã¹ã¯ãªãã·ã§ã³ åè
ã®ããŠãŒã¶åäœã®æå¹åãã¯ãLooker Studio ã®ã³ã³ãœãŒã«ç»é¢ããå®è¡ã§ããŸãã1ãŠãŒã¶ãããæé¡ $9 ã®æéãçºçããŸãïŒ2025幎12æçŸåšïŒã åŸè
ã®ãæéã¢ã¯ãã£ããŠãŒã¶ãŒïŒMAUïŒãµãã¹ã¯ãªãã·ã§ã³ãã¯ãGoogle WorkspaceïŒCloud IdentityïŒçµç¹å
šäœã§æå¹åãããŸããMAUïŒMonthly Active Userãæå
ã§1床ã§ã Looker Studio Pro ãå©çšãã人ãã«ãŠã³ããããïŒãããã®æé¡è²»çšãããããŸããè²»çšãæå¹åã®æ¹æ³ã¯ãGoogle Cloud ã販売ããŒãããŒã®å¶æ¥æ
åœè
ã«ãåãåãããã ããã åè : Looker Studio pricing åè : Looker Studio Pro ãµãã¹ã¯ãªãã·ã§ã³ã®æŠèŠ ãªã Looker ãå©çšäžã®å ŽåãLooker ã®ãŠãŒã¶ãŒã©ã€ã»ã³ã¹1ã€ããšã«ãLooker Studio Pro ã©ã€ã»ã³ã¹ã1ã€ãç¡æã§ä»åž¯ããŸãã åè : ç¡æã® Looker Studio Pro ã©ã€ã»ã³ã¹ç¹å
žã«é¢ãã詳现 å©çšéå§æé Looker Studio ã®ã³ã³ãœãŒã«ç»é¢ããŸã㯠Google Cloud ã®ã³ã³ãœãŒã«ç»é¢ãããLooker Studio Pro ãæå¹åã§ããŸããæå¹åããéã«ã課é察象ãšãªã Google Cloud è«æ±å
ã¢ã«ãŠã³ãããçŽã¥ãå
ã® Google Cloud ãããžã§ã¯ããéžæããŸããããã«ãã Looker Studio 㯠Looker Studio Pro ã«ã¢ããã°ã¬ãŒããããŸãã è©³çŽ°ãªæé ã¯ã以äžããåç
§ãã ããã åè : Pro ã®æ°ãããµãã¹ã¯ãªãã·ã§ã³ãéå§ãã æ³šæç¹ãšãã©ãã«ã·ã¥ãŒãã£ã³ã° Looker Studio ãšçŽä»ãã Google Cloud ãããžã§ã¯ãã¯ãã©ã€ã»ã³ã¹ïŒãµãã¹ã¯ãªãã·ã§ã³ïŒè³Œå
¥æã«æå®ããçµç¹é
äžã«ååšããŠããå¿
èŠããããŸãããŸãåãããžã§ã¯ãã¯ã賌å
¥æã«æå®ããè«æ±å
ã¢ã«ãŠã³ããšçŽä»ããããŠããå¿
èŠããããŸãã èšå®ããéãæäœè
ã¯ä»¥äžã® IAM ããŒã«ãæã£ãŠããå¿
èŠããããŸãã çŽä»ãããããžã§ã¯ãã«å¯ŸãããªãŒããŒïŒ roles/owner ïŒããã㯠Looker Studio Pro ãããŒãžã£ãŒïŒ roles/lookerstudio.proManager ïŒããŒã« æš©éãè¶³ããªãã£ããããããžã§ã¯ãã«çŽä»ããããŠããè«æ±å
ã¢ã«ãŠã³ããç³è«ãããã®ãšç°ãªã£ãããããšãã²ãä»ãæã«ãçµç¹ã®ãããžã§ã¯ããæŽæ°ã§ããŸããã§ãããããšãã£ããšã©ãŒãåºãå ŽåããããŸãã Gemini in Looker çæ AI ãšã®é£æº Looker Studio Pro ã§ã¯ã Gemini in Looker æ©èœã«ãããããŒã¿åæãå¯èŠåãã¬ããŒãã£ã³ã°ã«çæ AI ãå©çšããããšãã§ããŸãã æ©èœå称㯠Gemini in Looker ã§ãããããã§ã® Looker 㯠Looker ãã©ã³ãå
šäœãæããŠãããLooker ã Looker Studio Pro ã«ãGoogle ãéçºããçæ AI ãœãªã¥ãŒã·ã§ã³ã§ãã Gemini ãçµã¿èŸŒãã æ©èœçŸ€ããã®ããã«åŒç§°ããŠããŸãã Gemini in Looker ã«ã¯ã以äžã®ãããªæ©èœããããŸãã Conversational AnalyticsïŒAI ãšã®äŒè©±ãéããŠããŒã¿ãœãŒã¹ãåæã»å¯èŠåïŒ Looker Studio ã®ã³ã³ãã³ãã Google ã¹ã©ã€ãã«ãšã¯ã¹ããŒã æ°åŒãã£ãŒã«ãïŒcalculated fieldsïŒãèªç¶èšèªã®æç€ºã«ããäœæ Conversational Analytics Gemini in Looker ã® Conversational Analytics ïŒäŒè©±ååæïŒæ©èœã䜿ããšãèªç¶èšèªã«ããããŒã¿ãœãŒã¹ãžåãåãããããšãã§ããŸãã äŸãã°ã仿ã売äžãæã倧ããã£ããšãªã¢ã®ããã10ãæããŠãã®ããã«ãæ®æ®µäœ¿ããããªèšèã§ Looker Studio ã«è³ªåããããšã§ãBigQuery çã®ããŒã¿ãœãŒã¹ããå¿
èŠãªæ
å ±ãèŠã€ãåºããããã¹ããã°ã©ããªã©ã§å¯èŠåããŠãããŸãã åè : Gemini in Looker overview åè : Gemini in Looker ã®å°å
¥ã«ãã AI ãæŽ»çšããã€ã³ããªãžã§ã³ã㪠BI ã誰ã§ãå©çšå¯èœã« Looker Studio Pro ã®äŒè©±ååæ ãã®æ©èœã«ãããBigQuery ã Google ã¹ãã¬ããã·ãŒããCSV ãªã©ã®ããŒã¿ãœãŒã¹ã«å¯ŸããŠãSQL ã®ç¥èããªããŠããèªç¶èšèªã§ã¯ãšãªãæå
¥ããããšãã§ããŸãããªããBigQuery ããèªç¶èšèªã§ããŒã¿ãæœåºãããã®ä»ã®æ¹æ³ã«ã€ããŠã¯ã以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp ã¢ã»ãã Looker Studio ã«ããã ã¢ã»ãã ãšã¯ ã¬ããŒã ãš ããŒã¿ãœãŒã¹ ãæãæŠå¿µã§ãã ã¬ããŒã ãšã¯ãLooker Studio ã§å®è£
ãããããã·ã¥ããŒãã§ãã ããŒã¿ãœãŒã¹ ãšã¯ãã¬ããŒãããåç
§ããã BigQuery çã®ããŒã¿ããŒã¹ãã¹ãã¬ããã·ãŒããªã©ãããŒã¿ä¿æå
ãšã®æ¥ç¶èšå®ãæããŸããäžåºŠããŒã¿ãœãŒã¹ãäœããšãå¥ã®ã¬ããŒãã§ããã®ããŒã¿ãœãŒã¹ãåå©çšã§ããŸãã åè : ã¢ã»ãã åè : ã¬ããŒã åè : ããŒã¿ãœãŒã¹ ã¯ãŒã¯ã¹ããŒã¹ ã¯ãŒã¯ã¹ããŒã¹ãšã¯ ã¯ãŒã¯ã¹ããŒã¹ ãšã¯ãã¢ã»ãããå
±åç·šéããããã«å
¥ããŠãããç®±ãã®ãããªæŠå¿µã§ãã èªåã®ã¯ãŒã¯ã¹ããŒã¹ (My workspace) ãš ããŒã ã¯ãŒã¯ã¹ããŒã¹ ã®2çš®é¡ããããŸãã èªåã®ã¹ããŒã¹ (My workspace) åè
ã®ã èªåã®ã¯ãŒã¯ã¹ããŒã¹ ãã¯èªåå°çšã®ç·šéã¹ããŒã¹ã§ãããç¡åçã® Looker Studio ã§ãèªåããªãŒã㌠(Owned by me)ããšããŠè¡šç€ºãããã¢ã»ãããšåæ§ã§ããä»äººããé²èЧãããç·šéãããããã«ã¯ãã¢ã»ããäžã€äžã€ã«ãé²èЧè
ãããç·šéè
ãããŒã«ãä»äžããå¿
èŠããããŸãããŸãããã«å
¥ã£ãŠããã¢ã»ããã¯ãäœæè
ãããªãŒããŒããšãªããŸãã ããŒã ã¯ãŒã¯ã¹ããŒã¹ (Team workspace) åŸè
ã®ã ããŒã ã¯ãŒã¯ã¹ããŒã¹ ãã¯å
±åç·šéçšã®ç·šéã¹ããŒã¹ã§ãããããã Looker Studio Pro ã®æå€§ã®ç¹åŸŽã§ããããã«å
¥ããã¢ã»ããã¯ãããŒã ã¯ãŒã¯ã¹ããŒã¹èªäœã«æš©éãæã£ãŠãã人 (ã¢ã«ãŠã³ã) ã§ããã°ãå
±åã§ç·šéããããšãã§ããŸãã ããŒã ã¯ãŒã¯ã¹ããŒã¹ã«ä»äžã§ããã®ã¯ã©ã®ãããªæš©éãªã®ãã¯ãåŸè¿°ããŸãã åè : ããŒã ã¯ãŒã¯ã¹ããŒã¹ã«ã€ã㊠暩éç®¡ç æŠèŠ Looker Studio Pro ã®æš©é管çã«ã¯å€§ããåããŠ2ã€ã®è»žããããŸããäžã€ã¯ Looker Studio ã®æš©é管çã§ãããäžã€ã¯ IAM ã®æš©é管çã§ãã 以äžã«ããããã説æããæåŸã«ãããã®äœ¿ãåãã«ã€ããŠè§£èª¬ããŸãã Looker Studio ã®æš©é管ç ããŒã ã¯ãŒã¯ã¹ããŒã¹çšã®ããŒã« Looker Studio äžã§ã¯ãããŒã ã¯ãŒã¯ã¹ããŒã¹ãã¢ã»ããã«ããããæš©éãä»äžã§ããŸãã åããŒã ã¯ãŒã¯ã¹ããŒã¹ã«ä»äžã§ããããŒã«ã¯ã以äžã®ãšããã§ãããªãããŒã«ã®æ¥æ¬èªå㯠Web ã³ã³ãœãŒã«ç»é¢ã®è¡šèšãå
ã«ããŠãããããã¥ã¡ã³ãäžã®ãã®ãšç°ãªãå ŽåããããŸãã ããŒã«å 説æ é²èЧè
ã¯ãŒã¯ã¹ããŒã¹å
ã®ã¢ã»ãããé²èЧïŒãã©ã«ãã»ãŽãç®±å«ãïŒ æçš¿è
ã¯ãŒã¯ã¹ããŒã¹å
ã®ã¢ã»ãããé²èЧã»ç·šéãã¢ã»ããã®æ°èŠäœæãã¢ã»ããã«ããŒã«è¿œå ãªã© ã³ã³ãã³ããããŒãžã£ æçš¿è
ã®æš©éã«å ããã¯ãŒã¯ã¹ããŒã¹ã«ä»ã®æçš¿è
ã远å ã»åé€ã§ãã ãããŒãžã£ãŒ ã³ã³ãã³ããããŒãžã£ã®æš©éã«å ããä»ã®ã³ã³ãã³ããããŒãžã£ã远å ããããããŒã«å€æŽãã¢ã»ãããä»ã®ã¯ãŒã¯ã¹ããŒã¹ã«ç§»åã§ããç ãªãåŸæ¥ã¯ãããŒã ã¯ãŒã¯ã¹ããŒã¹çŽã¥ãå¯èœãªãé²èЧå°çšã®ããŒã«ãã¯ååšããŸããã§ãããã2024幎4æã®ã¢ããããŒãã§ãé²èЧè
(Viewer)ãããŒã«ãä»äžå¯èœã«ãªããŸããã åè : ããŒã«ãšæš©é ã¢ã»ããçšã®ããŒã« äžæ¹ã§åã¢ã»ããã«ä»äžã§ããããŒã«ã¯ä»¥äžã®ãšããã§ãã ããŒã«å 説æ é²èЧè
é²èЧã®ã¿ (ã¬ããŒããããŒã¿ãœãŒã¹ã®ã¹ããŒã) ç·šéè
ç·šéã§ããããŸãã¢ã»ããã®æš©éã倿Žã§ãã ãªãŒã㌠線éè
ã®æš©éã«å ããã¢ã»ãããåé€ããããä»ã®èª°ãããªãŒããŒã«ã§ãã ãªããèªåã®ã¯ãŒã¯ã¹ããŒã¹ãå
ã®ã¢ã»ããã¯ãäœæè
ãæåã®ãªãŒããŒã«ãªããããŒã ã¯ãŒã¯ã¹ããŒã¹ã«æå±ããŠããã¢ã»ããã«ã¯ããªãŒããŒããååšããªã ã¢ã»ããã«ã¯ãé²èЧè
ãŸãã¯ç·šéè
ããŒã«ãä»äžããããšãã§ããŸããäŸãã°ããã¬ããŒãã«ãããŠãããéšçœ²ã® Google ã°ã«ãŒãã«ã¯é²èЧè
ããŒã«ãä»äžããã¬ããŒãã管çãã XX éšçœ²ã®ã°ã«ãŒãã«ã¯ç·šéè
ããŒã«ãä»äžãã®ããã«æš©éãåããããŸãã ãªãŒããŒã ãã¯ç¹æ®ãªããŒã«ã§ãã¢ã»ããããã€ã¹ããŒã¹ã«ãããšãã«ãäœæè
ãèªåçã«ããªãŒããŒãã«ãªããŸãã åè : ããŒã«ãšæš©é IAM æš©é管ç IAM æš©é管çã¯ãã©ã¡ãããšãããš Looker Studio Pro ã®å©çšè
ãæšªæã§ç®¡çãããããªç®¡çè
åãã®æš©éèšå®ã«çšããŸãã å©çšéå§æã« Looker Studio ãšçŽã¥ãã Google Cloud ãããžã§ã¯ãã«ããããžã§ã¯ãã¬ãã«ã® IAM æš©éãä»äžããããšã§ãæš©éã管çããŸãã äŸãšããŠãããã¢ã«ãŠã³ãã«å¯ŸããŠãããŒã¿ããŒã¿ã«ç®¡çè
ïŒ roles/datastudio.admin ïŒããŒã«ã Google Cloud ãããžã§ã¯ãã¬ãã«ã§ä»äžãããšããã®äººã¯ Looker Studio å
ã®å
šãŠã®ã¯ãŒã¯ã¹ããŒã¹ã®ç·šéã»èªåãããã³å
šãŠã®ã¢ã»ããã®ç·šéã»èªåãã§ããããã«ãªããŸãã ãã®ããã«ãä»äžãã IAM ããŒã«ããšã«ä»äžãããæš©éãç°ãªããŸãã以äžã«äŸã瀺ããŸãããªã衚äžã®ããŒã«ã®æ¥æ¬èªå㯠Web ã³ã³ãœãŒã«ç»é¢ã®è¡šèšãå
ã«ããŠãããããã¥ã¡ã³ãã®èšèŒãšç°ãªãå ŽåããããŸãã ããŒã«å(è±) ããŒã«å(æ¥) 説æ Data Studio Admin ããŒã¿ããŒã¿ã«ç®¡çè
ã¯ãŒã¯ã¹ããŒã¹ã»ã¬ããŒãã«å¯Ÿããå
šæš©é Data Studio Workspace Content Manager ããŒã¿ããŒã¿ã« ã¯ãŒã¯ã¹ããŒã¹ ã³ã³ãã³ã ãããŒãžã£ãŒ ã¯ãŒã¯ã¹ããŒã¹ã«å¯Ÿããé²èЧã»ã¢ã»ããäœæçãšãã¢ã»ããã«å¯Ÿããé²èŠ§ã»æŽæ°ç Data Studio Asset Editor ããŒã¿ããŒã¿ã« ã¢ã»ããç·šéè
ã¢ã»ããã«å¯Ÿããé²èŠ§ã»æŽæ°çããã ãã¯ãŒã¯ã¹ããŒã¹ã®é²èЧã»ç·šéæš©éã¯ç¡ã Data Studio Asset Viewer ããŒã¿ããŒã¿ã« ã¢ã»ããé²èЧè
ã¢ã»ããã«å¯Ÿããé²èЧããã ãã¯ãŒã¯ã¹ããŒã¹ã®é²èЧã»ç·šéæš©éã¯ç¡ã åè : Looker Studio roles and permissions åè : Looker Studio Pro ã®æéã¢ã¯ãã£ã ãŠãŒã¶ãŒã®ãµãã¹ã¯ãªãã·ã§ã³ã Google Cloud ãããžã§ã¯ãã«ãªã³ã¯ãã IAM æš©éãš Looker Studio æš©éã®äœ¿ãåã 以äžã®ããšãããLooker Studio Pro åŽã®æš©é管çãš IAM (Google Cloud) åŽã®æš©é管çã¯ã以äžã®ãããªäœ¿ãåããæ³å®ãããŸãã Looker Studio Pro åŽã®æš©é管ç : ã¯ãŒã¯ã¹ããŒã¹åäœãŸãã¯ã¢ã»ããåäœã§ã ç·šéæš©éãé²èŠ§æš©éã管ç ãã IAM æš©é (Google Cloud) : çµç¹å
šäœã§ã¯ãŒã¯ã¹ããŒã¹ã管çãããçµ±å¶ãå¹ãããããã®ã 管çè
ç¹æš©ã管ç ãã éè·è
å¯Ÿå¿ ã¬ããŒãäœæè
ã® Google ã¢ã«ãŠã³ããåé€ãããå Žåã§ããã€å逿ã«ãããŒã¿ã®ãªãŒããŒæš©éãç§»è¡ããªãããéžæããå Žåãã¢ã»ããã¯ä»¥äžã®ãããªæåãšãªããŸãã äœæè
ã®ãèªåã®ã¯ãŒã¯ã¹ããŒã¹ãã«å
¥ã£ãŠããã¢ã»ãã ã¢ã»ããã®ãªãŒããŒã¯ãåé€ããããŠãŒã¶ãŒããšãªããŸããGoogle Cloud ãããžã§ã¯ããžã® IAM æš©éãæã£ãŠãã人ã«ã¯ãå
±æã¢ã€ãã ããšããŠèŠããŸããç·šéæš©éãããã°ãããŒã ã¯ãŒã¯ã¹ããŒã¹ã«ç§»åããããšãã§ããŸãã äœæè
ã®ãããŒã ã¯ãŒã¯ã¹ããŒã¹ãã«å
¥ã£ãŠããã¢ã»ãã ã¢ã»ããäœæè
ã® Google ã¢ã«ãŠã³ããåé€ãããŠããã¢ã»ããã¯åŒãç¶ãããŒã ã¯ãŒã¯ã¹ããŒã¹ã«æå±ããŸãã 匷åãããã¡ãŒã«é
ä¿¡æ©èœ Looker Studio Pro ã§ã¯ãç¡åçãšæ¯ã¹ãŠã¡ãŒã«é
ä¿¡æ©èœã匷åãããŠããŸãã Looker Studio ã§ã¯å®æçã«ã¬ããŒãã®å
容ãã¡ãŒã«ã§é
ä¿¡ããããšãã§ããŸãããPro ã§ã¯ç¡åçãšæ¯èŒããŠä»¥äžã®éãããããŸãã ã¡ãŒã«ã®å³æé
ä¿¡ïŒSend now ãªãã·ã§ã³ïŒ Google ãã£ãããžã®é
ä¿¡ Slack ãžã®é
ä¿¡ 1ã€ã®ã¬ããŒãã®è€æ°ã®ã¹ã±ãžã¥ãŒã«ãäœæ ã¡ãŒã«åä¿¡è
ã«å¿ããŠã¬ããŒãããã£ã«ã¿ãã ã¬ããŒãã®ãã¬ãã¥ãŒãã¡ãŒã«ã«åã蟌㿠以äžã®å
¬åŒããã¥ã¡ã³ããåç
§ããŠãã ããã åè : Schedule automatic report delivery åè : Share and schedule reports with Slack ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO å
èŠå¯å®ãšããçµæŽãæã€ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS èªå®è³æ Œããã³ Google Cloud èªå®è³æ Œã¯ãã¹ãŠååŸãXïŒæ§ TwitterïŒã§ã¯ Google Cloud ã Google Workspace ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
Google Cloud (æ§ç§° GCP) ã®ä»®æ³ãµãŒããŒãµãŒãã¹ã§ãã Compute Engine ã§ã¯ Windows Server ãèµ·åããããšãã§ããŸãã Windows Server ã® VM ã§ãã©ã€ã»ã³ã¹èªèšŒã«é¢ãããšã©ãŒãåºããšãã®å¯ŸåŠæ¹æ³ãã玹ä»ããŸãã äºè±¡ èããããåå å¯ŸåŠæ¹æ³ 1. ã«ãŒãã確èªãã 2. ã¢ã¯ã»ã¹èŠä»¶ã解決ãã 3. ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ã®è¿œå 4. ã©ã€ã»ã³ã¹èªèšŒã®åŒ·å¶ åèããã¥ã¡ã³ã äºè±¡ Compute Engine ã§èµ·åãã Window Server ã® VM ã«ãããŠãã³ã³ãã¥ãŒã¿ã®ããããã£ã®ç»é¢çã§ã©ã€ã»ã³ã¹èªèšŒã倱æããŠããæšã®ã¡ãã»ãŒãžãåºåãããããšããããŸãã ã Windows ã¯ã©ã€ã»ã³ã¹èªèšŒãããŠããŸãã ã ã çµç¹ã®ã©ã€ã»ã³ã¹èªèšŒãµãŒããŒã«æ¥ç¶ã§ããªãããããã®ããã€ã¹ã® Windows ãã©ã€ã»ã³ã¹èªèšŒã§ããŸãããçµç¹ã®ãããã¯ãŒã¯ã«æ¥ç¶ããŠããããšã確èªããŠãããäžåºŠããçŽããŠãã ãããã©ã€ã»ã³ã¹èªèšŒã§ããªãå Žåã¯ãçµç¹ã®ãµããŒãæ
åœè
ã«ãåãåãããã ããããšã©ãŒã³ãŒã: 0xC004F074 ã ã ã©ã€ã»ã³ã¹èªèšŒã«åé¡ãããå Žåã¯ããã©ãã«ã·ã¥ãŒãã£ã³ã°ãéžæããŠåé¡ã®è§£æ±ºã詊ã¿ãŠãã ããã ã Windows ã¯ã©ã€ã»ã³ã¹èªèšŒãããŠããŸãã èããããåå 該åœã® VM ãš Google Cloud ã®æã€ Windows Key Management Service (KMS) ãµãŒããŒã®éã®éä¿¡ãã§ããŠããªã ããšãåå ãšèããããŸãã Google Cloud ã® KMS ãµãŒããŒã¯ kms.windows.googlecloud.com (35.190.247.13) ã«ååšããŸãããã®ãµãŒããŒãš Windows Server VM ã TCP 1688 çªããŒãã«ãŠéä¿¡ã§ããå¿
èŠããããŸãã ãã®éä¿¡ã倱æããåå ãšã㊠VPC ãã¡ã€ã¢ãŠã©ãŒã«ãã«ãŒãã®åé¡ããŸã㯠VM ãå€éš IP ã¢ãã¬ã¹ãæã£ãŠããªããªã©ã®çç±ãæããããŸãã åè : kms.windows.googlecloud.com ãžã®ã¢ã¯ã»ã¹ãæ§æãã å¯ŸåŠæ¹æ³ 1. ã«ãŒãã確èªãã VPC ã®ã«ãŒãèšå®ãšããŠãããã©ã«ãã²ãŒããŠã§ã€ (0.0.0.0/0) ã Default Internet Gateway ãžåããŠããããåå¥ã«ãŒã«ã§ 35.190.247.13/32 ã®ãã¯ã¹ããããã Default Internet Gateway ãžåããŠããå¿
èŠããããŸãã 2. ã¢ã¯ã»ã¹èŠä»¶ã解決ãã VM ã kms.windows.googlecloud.com (35.190.247.13) ãžå°éããã«ã¯ã以äžã®ããããã®æ¹æ³ã§ããå¿
èŠããããŸãã å€éš IP ã¢ãã¬ã¹ãæã£ãŠãã ãµããããã§ éå®å
¬éã® Google ã¢ã¯ã»ã¹ ãæå¹ã§ãã éèŠãªããšã«ã KMS ãžã¯ Cloud NAT çµç±ã§ã¯å°éã§ããªã 仿§ãšãªã£ãŠããŸã (Compute Engine ã€ã³ã¹ã¿ã³ã¹ã® IP ã¢ãã¬ã¹ä»¥å€ããã®ãªã¯ãšã¹ãã¯æåŠããããã㚠説æãããŠããŸã ) ããã®ãã VM ã«å€éš IP ã¢ãã¬ã¹ãæããããããµããããã§ãéå®å
¬éã® Google ã¢ã¯ã»ã¹ããæå¹ã§ããå¿
èŠãããã®ã§ãã 3. ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ã®è¿œå VPC ã®ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ã§ã 35.190.247.13/32 ãžã® 1688/tcp ã«ããã äžã éä¿¡ãèš±å¯ãããŠããå¿
èŠããããŸãã ããã©ã«ãã§ã¯ãæé»ã®äžãèš±å¯ãã«ãŒã«ãå¹ããŠããããèš±å¯ãããŠããŸãããå³å¯ãªãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ãé©çšããŠããå Žåã¯ããã®éä¿¡ãæç€ºçã»åªå
çã«èš±å¯ããã«ãŒã«ãå¿
èŠã§ãã 4. ã©ã€ã»ã³ã¹èªèšŒã®åŒ·å¶ äžèšãŸã§å®æœããã°ã KMS ãžã®éä¿¡ã¯ç¢ºä¿ãããŸããäžèšãã¯ãªã¢ãããŠããã®ã«èªèšŒãè¡ãããªãå Žåã VM äžã§ä»¥äžã®äœæ¥ã宿œããããšã§ã©ã€ã»ã³ã¹èªèšŒã匷å¶ãããŸãã ã³ãã³ãããã³ãããã管çè
ãšããŠå®è¡ããã äžèšã³ãã³ããå®è¡ããŠãKMS ãµãŒããŒãžã®æ¥ç¶ãå®äºããŠãããããã¹ããã powershell.exe Test-NetConnection 35.190.247.13 -Port 1688 æ³å®çµæ TcpTestSucceeded : True äžèšã³ãã³ããæåããå Žåã以äžã®äžèšã³ãã³ããå®è¡ãã (ã©ã€ã»ã³ã¹ã®çŸåšã®ç¶æ
ãç¢ºèª / KMS ã®ãµãŒã㌠IP ã¢ãã¬ã¹ãèšå® / ã©ã€ã»ã³ã¹èªèšŒã匷å¶) cscript \windows\system32\slmgr.vbs /dlv cscript \windows\system32\slmgr.vbs /skms 35.190.247.13:1688 cscript \windows\system32\slmgr.vbs /ato åèããã¥ã¡ã³ã åè : Windows VM ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã° ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãTwitter ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ããžãã¹æšé²éšã®èæ± ã§ãã åœç€Ÿã®åãæ¹ã玹ä»ããããšã§ãã¿ãªããã®æ¥åå¹çã»ã³ãã¥ãã±ãŒã·ã§ã³åæ»åã®äžå©ã«ãªãã°å¹žãã§ãã åœç€Ÿã¯ç€Ÿå¡å
šå¡ãå€åå°ã«çžãããããšãªãããã«ãªã¢ãŒãã§å€åããŠããŸãã ãã«ãªã¢ãŒãå€åãå¯èœãšããŠããã®ããGoogleã®ã³ã©ãã¬ãŒã·ã§ã³ããŒã«ã§ããGoogle Workspaceã§ãã Google WorkspaceãæŽ»çšããããšã«ããâ忥åâã®åãæ¹ãå®è·µãããã«ãªã¢ãŒãã®ç°å¢äžã«ãããŠãåžžã«ç¹ãããæã¡ãªããæ¥åãéè¡ããŠããŸãã åœèšäºã§ã¯Google Meetãã¯ãããGoogle Workspaceã®åçš®ããŒã«ãçšããŠåœç€Ÿãå®è·µããŠããWebäŒè°ã®æºåãé²ãæ¹ããè°äºé²ã®å
±æã«è³ããŸã§ãã玹ä»ããŸãã WebäŒè°ã®æºå WebäŒè°ã®é²ãæ¹ WebäŒè°çµäºåŸ WebäŒè°ã®æºå Googleã«ã¬ã³ããŒãã¯ãªãã¯ããäŒè°ã®äºå®ãå
¥åããŸãã ã¿ã€ãã«ã«ïŒ»ç€Ÿå
瀟å€ïŒœãå
¥åãããšã¹ã±ãžã¥ãŒã«ã®å€å¥ããããããªããŸãã ãäŒè°ã¡ã¢ãäœæããã¯ãªãã¯ãããšäŒè°å
容ãåæ ããã¡ã¢ãæ·»ä»ãããŸãã ã»ã¿ã€ãã«ãex.瀟å
ïŒœå¶æ¥äŒè° ã»æ¥æ ã»ã²ã¹ãã远å ã»äŒè°ã¡ã¢ãäœæ ãªãã瀟å€ãšwebäŒè°ãè¡ãéã¯ã以äžã®æé ã§ç°¡åã«äŒè°çšURLã®éä»ãåºæ¥ãŸãã ã»ãäŒè°æ
å ±ãã³ããŒããã¯ãªã㯠ã»ã¡ãŒã«æ¬æã«ã³ããŒïŒããŒã¹ãã§URLãèšèŒãã äŒè°ã®æºåã¯ä»¥äžã§å®äºã§ãã WebäŒè°ã®é²ãæ¹ å
çšã«ã¬ã³ããŒã«æ·»ä»ãããäŒè°ã¡ã¢ãã«äŒè°ã®åå è
å
šå¡ã§ãªã¢ã«ã¿ã€ã ã«æžã蟌ã¿ãŸããWebäŒè°äžã®çºèšè
ã¯è°äºé²ãæžãããšãé£ãããããçºèšè
以å€ã®ã¡ã³ããŒã«ãŠå
±åã§è°äºé²ãç·šéããŸãã WebäŒè°çµäºåŸ WebäŒè°çµäºåŸã¯äœæããè°äºé²ããç¥ãããããã¡ã³ããŒã«å
±æããŸãã äŸãã°æ¬ åžããŠããŸã£ãã¡ã³ããŒã«å
±æããããšã§ç°¡åã«æ
å ±å
±æãå¯èœã§ãã è°äºé²ãéãããå
±æããã¿ã³ãã¯ãªãã¯ããå
±æãããã¡ã³ããŒã远å ããŸãã Googleããã¥ã¡ã³ãã«ã¯ã¡ã³ã·ã§ã³æ©èœããããããã¥ã¡ã³ãå
ã§ã@ + ãŠãŒã¶ãŒåãã§ç¹å®ã®ãŠãŒã¶ãŒãžã³ã¡ã³ãããããšãã§ããŸãã ã¡ã³ã·ã§ã³æ©èœãå©çšããããšã§ãããããã¡ãŒã«ããã£ãããªã©ã䜿ã£ãŠé£çµ¡ããå¿
èŠããªããæ¥åå¹çåãšã³ãã¥ãã±ãŒã·ã§ã³åæ»åã«ç¹ãããŸãã èæ± åäž (èšäºäžèЧ) ããžãã¹æšé²éš 2022幎5æã«G-gen ã«ãžã§ã€ã³ã å¢ããšã¹ããŒãæãæ±ããŠå€§æè£œé æ¥ã®è²©å£²äŒç€ŸããGoogle Cloudã®å¶æ¥ã«ãã£ãªã¢ãã§ã³ãžïŒå°ããè³ã¿ãããã«å転ãããªããæ¥ã
å匷äžã
G-gen ã®äœã
æšã§ããåœèšäºã§ã¯ãGoogle Cloud (æ§ç§° GCP) ã®ãµãŒããŒã¬ã¹ã³ã³ãããµãŒãã¹ã§ãã Cloud Run ã«ã€ããŠãCloud Run ãµãŒãã¹ããã€ã³ã¿ãŒãããæ¥ç¶ãè¡ãéã« Public IP ã¢ãã¬ã¹ãåºå®ããæ¹æ³ã解説ããŸãã 䜿çšãããµãŒãã¹ã»ä»çµã¿ Cloud Run ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ æ§æå³ Cloud Run ãµãŒãã¹ã®ããã〠ã¢ããªã±ãŒã·ã§ã³ãäœæãã main.py requirements.txt Dockerfile ã³ã³ããã€ã¡ãŒãžã Artifact Registry ã«æ ŒçŽãã ãªããžããªãäœæãã ã³ã³ããã€ã¡ãŒãžããã«ãããŠãªããžããªã«æ ŒçŽãã ãã«ãããã€ã¡ãŒãžã䜿çšã㊠Cloud Run ãµãŒãã¹ããããã€ãã ã€ã³ã¿ãŒãããæ¥ç¶ã«åç IP ã¢ãã¬ã¹ã䜿çšãããããšã確èªãã éç IP ã¢ãã¬ã¹ã䜿çšããã€ã³ã¿ãŒãããæ¥ç¶ ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ãäœæãã Cloud NAT ãèšå®ããããã® Cloud Router ãäœæãã éç IP ã¢ãã¬ã¹ã䜿çšãã Cloud NAT ãèšå®ãã ã³ãã¯ã¿ã䜿çšããããã« Cloud Run ãµãŒãã¹ãèšå®ãã ã€ã³ã¿ãŒãããæ¥ç¶ã«éç IP ã¢ãã¬ã¹ã䜿çšãããããšã確èªãã 䜿çšãããµãŒãã¹ã»ä»çµã¿ Cloud Run Cloud Run ã¯ãµãŒããŒã¬ã¹ãªç°å¢ã§ã³ã³ãããå®è¡ã§ãããµãŒãã¹ã§ãã ãµãŒãã¹ã®å
šäœåã«ã€ããŠã¯ä»¥äžã®èšäºã§è§£èª¬ããŠããŸãã®ã§ããäžèªãã ããã blog.g-gen.co.jp ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ 㯠Cloud Run ã Cloud Functions ãªã©ã®ãµãŒããŒã¬ã¹å®è¡ç°å¢ãã VPC å
ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã®ä»çµã¿ã§ãã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ãèšå®ãããšãVPC å
ã« ã³ãã¯ã¿ ãäœæããããµãŒããŒã¬ã¹å®è¡ç°å¢ããã®éä¿¡ã VPC ã«ã«ãŒãã£ã³ã°ããããšãã§ããŸãã æ§æå³ Cloud Run ãµãŒãã¹ã§ã¯ã ã³ã³ããããã€ã³ã¿ãŒãããéä¿¡ãè¡ãéãåç IP ã¢ãã¬ã¹ããŒã«ã䜿çšããã®ãããã©ã«ãã®åäœ ãšãªã£ãŠããŸãã ãããã£ãŠãæ¥ç¶å
ãšãªãå€éšãšã³ããã€ã³ãã§ IP ã¢ãã¬ã¹ããŒã¹ã®ãã¡ã€ã¢ãŠã©ãŒã«ãèšå®ãããŠãããªã©ãéç IP ã¢ãã¬ã¹ãå¿
èŠãšãªãã±ãŒã¹ã§ã¯ãããã©ã«ãã®èšå®ã§ã¯äžæããããŸããã ããã§ããµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã䜿çšã㊠Cloud Run ãµãŒãã¹ã VPC ã«æ¥ç¶ããéç IP ã¢ãã¬ã¹ã䜿çšãã Cloud NAT ãçµç±ããŠã€ã³ã¿ãŒãããéä¿¡ãè¡ãããã«èšå®ããŸãã ãµãŒãã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ ãš Cloud NAT ãçµç±ããã€ã³ã¿ãŒãããæ¥ç¶ Cloud Run ãµãŒãã¹ã®ããã〠ã¢ããªã±ãŒã·ã§ã³ãäœæãã Cloud Run ããã¥ã¡ã³ãã® ã¯ã€ãã¯ã¹ã¿ãŒã ãããŒã¹ãšããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã³ã³ãããã€ã³ã¿ãŒãããæ¥ç¶ã«äœ¿çšãã IP ã¢ãã¬ã¹ã確èªã§ããããã«ã³ãŒããæžãæããŸãã IP ã¢ãã¬ã¹ã®ç¢ºèªã«ã¯ DynDNS ã䜿çšããŸãã http://checkip.dyndns.com/ ã«å¯Ÿã㊠HTTP ãªã¯ãšã¹ããéä¿¡ããããšã§ãçŸåšäœ¿çšããŠãã IP ã¢ãã¬ã¹ã®æ
å ±ãè¿ã£ãŠããŸãã main.py DynDNS ã« HTTP ãªã¯ãšã¹ããéä¿¡ããã¬ã¹ãã³ã¹ããã©ãŠã¶äžã«è¡šç€ºããããã«ããŸãã import requests from flask import Flask app = Flask(__name__) # DynDNS ã® URL url = 'http://checkip.dyndns.com/' @ app.route ( '/' ) def ip_check (): # HTTP ãªã¯ãšã¹ããéä¿¡ res = requests.get(url) # ã¬ã¹ãã³ã¹ããã©ãŠã¶äžã«è¡šç€º return res.text if __name__ == '__main__' : app.run(debug= True , host= '0.0.0.0' , port= 8080 ) requirements.txt ã¯ã€ãã¯ã¹ã¿ãŒãã® requirements.txt ã« requests ããã±ãŒãžã远èšããŸãã Flask==2.1.0 gunicorn==20.1.0 requests==2.28.1 Dockerfile ã¯ã€ãã¯ã¹ã¿ãŒãã® Dockerfile ããã®ãŸãŸäœ¿çšããŸãã FROM python:3.10-slim ENV PYTHONUNBUFFERED True ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ RUN pip install --no-cache-dir -r requirements.txt CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app ã³ã³ããã€ã¡ãŒãžã Artifact Registry ã«æ ŒçŽãã Cloud Run ãµãŒãã¹ã«äœ¿çšããã³ã³ããã€ã¡ãŒãžããã«ãããŸãã åœèšäºã§ã¯ Cloud Build ã䜿çšããŠã€ã¡ãŒãžããã«ãããArtifact Registry ã«æ ŒçŽããŸãã ãªããžããªãäœæãã ãŸãã Artifact Registry ã®ãªããžããªãäœæããŸãã $ gcloud artifacts repositories create {ãªããžããªå} --repository-format=docker --location={ãã±ãŒã·ã§ã³} # å®è¡äŸ $ gcloud artifacts repositories create myrepository --repository-format=docker --location=asia-northeast1 ã³ã³ããã€ã¡ãŒãžããã«ãããŠãªããžããªã«æ ŒçŽãã Cloud Build ã䜿çšããŠã³ã³ããã€ã¡ãŒãžããã«ãããå
ã»ã©äœæãããªããžããªã« push ããŸãã $ gcloud builds submit --tag {ãã±ãŒã·ã§ã³}-docker.pkg.dev/{ãããžã§ã¯ãID}/{ãªããžããªå}/{ã€ã¡ãŒãžå} # å®è¡äŸ $ gcloud builds submit --tag asia-northeast1-docker.pkg.dev/myproject/myrepository/myimage ãã«ãããã€ã¡ãŒãžã䜿çšã㊠Cloud Run ãµãŒãã¹ããããã€ãã ãŸãã¯ã³ã³ããã€ã¡ãŒãžããã®ãŸãŸ Cloud Run ã«ãããã€ããŠãããŸãã Artifact Registry ã«æ ŒçŽããã³ã³ããã€ã¡ãŒãžãã Cloud Run ã«ãããã€ãã ãéžæããŸãã Artifact Registry ãã Cloud Run ãµãŒãã¹ãããã〠任æã® ãµãŒãã¹å ã ãªãŒãžã§ã³ ãèšå®ããŸãã ãµãŒãã¹åãšãªãŒãžã§ã³ãèšå®ãã ä»åã¯ãµãŒãã¹ã®åŒã³åºãå
ã¯ç¹ã«èæ
®ããªãã®ã§ã Ingress é
ç®ã®ããã¹ãŠã®ãã©ãã£ãã¯ãèš±å¯ãããã èªèšŒ é
ç®ã®ãæªèªèšŒã®åŒã³åºããèš±å¯ãã«ãã§ãã¯ãå
¥ããCloud Run ãµãŒãã¹ãäœæããŸãã Ingress ãš èªèšŒã®èšå® ã€ã³ã¿ãŒãããæ¥ç¶ã«åç IP ã¢ãã¬ã¹ã䜿çšãããããšã確èªãã ãµãŒãã¹ã®ãããã€ãå®äºãããããµãŒãã¹ã®è©³çްç»é¢ã«ãã Cloud Run ãµãŒãã¹ã® URL ãã¯ãªãã¯ããŸãã Cloud Run ãµãŒãã¹ã® URL ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããå®è¡åºç€ãšãªã£ãã³ã³ãããã€ã³ã¿ãŒãããéä¿¡ã«äœ¿çšããŠãã IP ã¢ãã¬ã¹ããã©ãŠã¶äžã«è¡šç€ºãããŸãã ã³ã³ãããã€ã³ã¿ãŒãããæ¥ç¶ã«äœ¿çšããŠãã IP ã¢ãã¬ã¹ã衚瀺ããã ãã®åŸãèµ·åããã³ã³ãããåé€ããããŸã§ãã°ããåŸ
ã¡ãŸãã ã³ã³ãã ã€ã³ã¹ã¿ã³ã¹æ° ã®ã¡ããªã¯ã¹ã§ active ãš idle ã®å€ã 0 ã«ãªã£ãŠãããããäžåºŠãµãŒãã¹ã® URL ã«ã¢ã¯ã»ã¹ããŸãã ã³ã³ãã ã€ã³ã¹ã¿ã³ã¹æ°ã® active ãš idle ã®å€ã 0 ã«ãªããŸã§åŸ
〠å
ã»ã©ãšã¯ç°ãªãã³ã³ããäžã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã©ãŠã¶ã«ã¯å¥ã® IP ã¢ãã¬ã¹ã衚瀺ãããŸãã ãã®ããã«ãããã©ã«ãã®èšå®ã§ã¯ãã³ã³ããã¯åç IP ã¢ãã¬ã¹ããŒã«ã䜿çšããŠã€ã³ã¿ãŒãããéä¿¡ãè¡ããŸãã ã³ã³ãããæ°ãã«èµ·åãããããå¥ã® IP ã¢ãã¬ã¹ã䜿çšããã éç IP ã¢ãã¬ã¹ã䜿çšããã€ã³ã¿ãŒãããæ¥ç¶ ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ãäœæãã VPC ã«ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ãäœæããŠãããŸãã VPC ãããã¯ãŒã¯ ã®ã³ã³ãœãŒã«ããã³ãã¯ã¿ã®äœæç»é¢ã«é²ã¿ãŸãã VPC ãããã¯ãŒã¯ã®ã³ã³ãœãŒã«ããã³ãã¯ã¿ãäœæãã ãããã¯ãŒã¯ ã«äœ¿çšãã VPC ãèšå®ãã ãµãããã ã§ãã«ã¹ã¿ã IP ç¯å²ããéžæããŸãã IP ç¯å² ã« VPC ã§äœ¿çšãããŠããªã /28 ã® IP ç¯å²ãå
¥åããã³ãã¯ã¿ãäœæããŸãã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ ã³ãã¯ã¿ã®äœæ ãã¹ã±ãŒãªã³ã°èšå®ã衚瀺ããéããšãã³ãã¯ã¿ã€ã³ã¹ã¿ã³ã¹ã®æå°/æå€§æ°ã®èšå®ããã€ã³ã¹ã¿ã³ã¹ã䜿çšãããã·ã³ã¿ã€ãïŒf1-micro/e2-micro/e2-standard-4ïŒãèšå®ããããšãã§ããŸãã æå°ã€ã³ã¹ã¿ã³ã¹æ°ã¯ 2~9ãæå€§ã€ã³ã¹ã¿ã³ã¹æ°ã¯ 3~10 ã®å€ãèšå®ããããšãã§ããŸããã ã³ãã¯ã¿ã€ã³ã¹ã¿ã³ã¹ãäžåºŠã¹ã±ãŒã«ã¢ãŠããããšã¹ã±ãŒã«ã€ã³ããããšãã§ããªã 仿§ã®ãããæå€§ã€ã³ã¹ã¿ã³ã¹æ°ã¯æ
éã«èšå®ããŸãããã ãµãŒããŒã¬ã¹VPCã¢ã¯ã»ã¹ã³ãã¯ã¿ã®ã¹ã±ãŒãªã³ã°èšå® Cloud NAT ãèšå®ããããã® Cloud Router ãäœæãã Cloud NAT 㯠VPC ããªãŒãžã§ã³ããã㊠Cloud Router ã«é¢é£ä»ãããããããVPC ã«å¯Ÿã㊠Cloud Router ãäœæããŸãã ãã€ããªããæ¥ç¶ ã®ã³ã³ãœãŒã«ãã Cloud Router ãäœæããŠãããŸãã ãã€ããªããæ¥ç¶ã®ã³ã³ãœãŒã«ãã Cloud Router ãäœæãã åå ã ãããã¯ãŒã¯ ã ãªãŒãžã§ã³ ãèšå®ãããã以å€ã®é
ç®ã¯ããã©ã«ãã®ãŸãŸäœæããŸãã Cloud Router ã®äœæ éç IP ã¢ãã¬ã¹ã䜿çšãã Cloud NAT ãèšå®ãã ãããã¯ãŒã¯ ãµãŒãã¹ ã®ã³ã³ãœãŒã«ãã Cloud NAT ãäœæããŠãããŸãã ãããã¯ãŒã¯ ãµãŒãã¹ã®ã³ã³ãœãŒã«ãã Cloud NAT ãäœæãã å
ã»ã©äœæãã Cloud Router ãèšå®ãã Cloud NAT IP ã¢ãã¬ã¹ é
ç®ã§ãæåããéžæããŠããIP ã¢ãã¬ã¹ãäœæããã¯ãªãã¯ããŸãã Cloud NAT ã®äœæ äºçŽããéç IP ã¢ãã¬ã¹ã®ååãå
¥åãããäºçŽããã¯ãªãã¯ããŸãã éç IP ã¢ãã¬ã¹ã®äºçŽ äºçŽããéç IP ã¢ãã¬ã¹ã CLoud NAT ã«èšå®ãããã®ã§ããäœæããã¯ãªãã¯ããŸãã äºçŽããéç IP ã¢ãã¬ã¹ãèšå®ããã ã³ãã¯ã¿ã䜿çšããããã« Cloud Run ãµãŒãã¹ãèšå®ãã Cloud Run ãµãŒãã¹ã®è©³çްç»é¢ãã æ°ãããªããžã§ã³ã®ç·šéãšããã〠ãéžæãããµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ ã³ãã¯ã¿ã䜿çšããããã«ãµãŒãã¹ãèšå®ããŸãã Cloud Run ãµãŒãã¹ãç·šéãã ç·šéç»é¢ã® æ¥ç¶ ã¿ãã«ãã VPC é
ç®ã§ ã³ãã¯ã¿ãäœæãã VPC ãéžæããããã¹ãŠã®ãã©ãã£ãã¯ã VPC ã³ãã¯ã¿çµç±ã§ã«ãŒãã£ã³ã°ãããã«ãã§ãã¯ãå
¥ããŸãã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ ã³ãã¯ã¿ã®èšå® ããããã€ããéžæããCloud Run ãµãŒãã¹ãæŽæ°ããŸãã ã€ã³ã¿ãŒãããæ¥ç¶ã«éç IP ã¢ãã¬ã¹ã䜿çšãããããšã確èªãã Cloud Run ãµãŒãã¹ã® URL ãã¯ãªãã¯ããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã ãããŸã§ã®èšå®ã«ãããã³ã³ãã 㯠VPC ã«ãã Cloud NAT ãçµç±ããŠã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãè¡ãããããã©ãŠã¶ã«è¡šç€ºããã IP ã¢ãã¬ã¹ã Cloud NAT ã«èšå®ããéç IP ã¢ãã¬ã¹ã«ãªã£ãŠããŸãã Cloud NAT ã®éç IP ã¢ãã¬ã¹ã衚瀺ããã Cloud NAT ã®éç IP ã¢ãã¬ã¹ äœã
æš é§¿å€ª (èšäºäžèЧ) G-genæå端ãåæµ·éåšäœã®ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšãšã³ãžã㢠2022幎6æã«G-genã«ãžã§ã€ã³ãGoogle Cloud Partner Top Engineer 2024ã«éžåºã奜ããªGoogle Cloudãããã¯ãã¯Cloud Runã è¶£å³ã¯ã³ãŒããŒãå°èª¬ïŒSFããã¹ããªïŒãã«ã©ãªã±ãªã©ã Follow @sasashun0805
G-gen ã®ææã§ãã Google CloudïŒæ§ç§° GCPïŒã®ã ã¿ã° ïŒTagsïŒãš ã©ãã« ïŒLabelsïŒã®éãã«ã€ããŠè§£èª¬ããŸãã ã¿ã°ãšã©ãã« ã¿ã°ãšã©ãã«ã®æŠèŠ å©çšäŸ ã¿ã°ãšã©ãã«ã®éã æ¯èŒè¡š ãªãœãŒã¹ãšããŠã®æ±ã IAM ãçµç¹ããªã·ãŒã§ã®å©çš IAM çµç¹ããªã·ãŒ 課é管ç 課éæçްãžã®åæ 課éæ
å ±ã® BigQuery ãšã¯ã¹ããŒã ã¿ã°ã®äœ¿ãæ¹ ã¿ã°ããŒã»ããªã¥ãŒã®äœæ ãªãœãŒã¹ãžã®çŽã¥ã ãã©ã«ãã»ãããžã§ã¯ã åå¥ãªãœãŒã¹ ãã©ãã«ã·ã¥ãŒã ã©ãã«ã®äœ¿ãæ¹ ã©ãã«ã®ä»äž ã©ãã«ã«ãããã£ã«ã¿ ã¿ã°ãšã©ãã« ã¿ã°ãšã©ãã«ã®æŠèŠ Google CloudïŒæ§ç§° GCPïŒã«ã¯ã ã¿ã° ïŒTagsïŒãš ã©ãã« ïŒLabelsïŒãšããããã䌌ãŠãããã®ã®ãŸã£ããç°ãªãæŠå¿µãååšããŸãã åè : ã¿ã°ã®æŠèŠ åè : ã©ãã«ã䜿çšããŠãªãœãŒã¹ã«ã³ã³ããã¹ãã远å ãã - æŠèŠ ã¿ã°ãšã©ãã«ã¯ãã©ã¡ããããŒã»ããªã¥ãŒã®æååã®ãã¢ã§ãããGoogle Cloud ãªãœãŒã¹ã«çŽã¥ããããšãã§ãããšããæ§è³ªãæã¡ãŸãããããããã®2ã€ã¯ ãŸã£ããå¥ã®æ©èœ ã§ããã¿ã°ãšã©ãã«ã®éãã¯ã端çã«è¿°ã¹ããšä»¥äžã®ãšããã§ãã ã¿ã°ã¯ æš©é管ç ã®ããã®æ©èœ ã©ãã«ã¯ ãªãœãŒã¹æŽç ã 課éã®æŽç ã®ããã®æ©èœ å©çšäŸ ã¿ã°ã®å©çšäŸã¯ã以äžã§ãã æ¬çªç°å¢ãã©ã«ãã«ã¯ environment: prod ã¿ã°ãä»äžãã æ€èšŒç°å¢ãã©ã«ãã«ã¯ environment: test ã¿ã°ãä»äžãã IAM èš±å¯ããªã·ãŒã®æ¡ä»¶ïŒconditionsïŒã«ã¿ã°ãæ¡ä»¶ãšããŠè¿œå ããŠãç°å¢ãæäœã§ããã¢ã«ãŠã³ããå¶éãã äžæ¹ã§ãã©ãã«ã®å©çšäŸã¯ä»¥äžã®ãããªãã®ã§ãã gcloud ã³ãã³ãã§ VM ã€ã³ã¹ã¿ã³ã¹ãäžèŠ§è¡šç€ºïŒlistïŒããéã«ãã©ãã«ãæå®ããŠãã£ã«ã¿ãããããã«ãããç¹å®ãµãã·ã¹ãã ã® VM ã ããæœåºãã ã¿ã°ãšã©ãã«ã®éã æ¯èŒè¡š ã¿ã°ãã©ãã«ã®æ§è³ªã®éããäžèЧã«ãããšã以äžã®ãšããã§ãã åè : ã¿ã°ãšã©ãã« ã¿ã° ã©ãã« ãªãœãŒã¹æ§é ããŒãããªã¥ãŒããã€ã³ãã£ã³ã°ïŒçŽã¥ãïŒã¯ããèªäœããªãœãŒã¹ ã©ãã«èªäœã¯ãªãœãŒã¹ã§ãªãããªãœãŒã¹ã®ã¡ã¿ããŒã¿ å®çŸ© çµç¹ãŸãã¯ãããžã§ã¯ãã§ãªãœãŒã¹ãšããŠäœæ åãªãœãŒã¹ã®ã¡ã¿ããŒã¿ãšããŠå®çŸ© ã¢ã¯ã»ã¹å¶åŸ¡ ã¿ã°ç®¡ççšã® IAM æš©éãååš ä»äžå¯Ÿè±¡ãªãœãŒã¹ããšã® IAM æš©é äºåå®çŸ© ããŒãšããªã¥ãŒãäºåå®çŸ©ãã äºåå®çŸ©ãªã ç¶æ¿ Google Cloud éå±€ã®åãªãœãŒã¹ã«ç¶æ¿ããã åãªãœãŒã¹ã«ç¶æ¿ãããªã æåé· 256æåä»¥äž 63æåä»¥äž IAM ããªã·ãŒ IAM ããªã·ãŒã®æ¡ä»¶ (Condition) ãšããŠå©çšå¯èœ IAM ããªã·ãŒããå©çšäžå¯ çµç¹ããªã·ãŒ çµç¹ããªã·ãŒã®æ¡ä»¶ä»ãå¶çŽãšããŠå©çšå¯èœ çµç¹ããªã·ãŒããå©çšäžå¯ Billing 飿º ã»BigQuery ã® Cloud Billing ããŒã¿ãšããŠãšã¯ã¹ããŒãããã ã»BigQuery ã® Cloud Billing ããŒã¿ãšããŠãšã¯ã¹ããŒãããã ã»Cloud Billing ã¬ããŒãã®ãã£ã«ã¿ãªã³ã°ã«äœ¿çšå¯ ãªãœãŒã¹ãšããŠã®æ±ã 倧ããªéããšããŠã ã¿ã°ã¯ããèªäœããªãœãŒã¹ã§ãã äžæ¹ã§ãã©ãã«ã¯ãªãœãŒã¹ã«ä»äžãã ã¡ã¿ããŒã¿ã§ãã ãšããç¹ã§ãã ã¿ã°ã¯çµç¹ã¬ãã«ããŸãã¯ãããžã§ã¯ãã¬ãã«ã§ãäºåã«ããŒãšããªã¥ãŒã®ãã¢ãå®çŸ©ããŸããå®çŸ©ãããŠããããŒãããªã¥ãŒãããªãœãŒã¹ã«çŽã¥ããããšãã§ããŸãããŸããçŽã¥ãèšå®ã¯ãã€ã³ãã£ã³ã°ãšãããªãœãŒã¹ãšããŠå®äœããããŸãã ã©ãã«ã¯ããªãœãŒã¹ã®ã¡ã¿ããŒã¿ãšããŠä»äžããã®ã§ãããèªäœã¯ãªãœãŒã¹ã§ã¯ãããŸããã ãŸããã¿ã°ã«ã¯ç¶æ¿ã®æŠå¿µããããŸããäŸãã°ãã©ã«ãã«ã¿ã°ãçŽã¥ãããšãé
äžã®ãããžã§ã¯ãã«ãåŒãç¶ãããŸãã IAM ãçµç¹ããªã·ãŒã§ã®å©çš IAM ã¿ã°ã¯ãäž»ã«æš©é管çã®ããã«çšããããŸãã IAM èš±å¯ããªã·ãŒã®ããŒã«ãã€ã³ãã£ã³ã°ã«ã¯ãæ¡ä»¶ïŒConditionïŒãèšèŒããããšãã§ããäŸãã°ãâ¯æãâ¯æã®éã ãæš©éãæå¹ããªã©æ¡ä»¶ãã€ããããšãã§ããŸããããŒã«ãã€ã³ãã£ã³ã°ã®æ¡ä»¶ãšããŠããããšããã¿ã°ããªãœãŒã¹ã«ä»äžãããŠããããšãã®ããã«èšå®ãå¯èœã§ãã åè : ã¿ã°ãšæ¡ä»¶ä»ãã¢ã¯ã»ã¹ åè : Google Cloudã®IAMã培åºè§£èª¬ïŒ - G-gen Tech Blog - IAM ããªã·ãŒã®æ§é äŸãã°æ¬çªãããžã§ã¯ããæ ŒçŽãããŠãããã©ã«ãã« environment : prod ã¿ã°ããéçºçšãããžã§ã¯ããå
¥ã£ãŠãããã©ã«ãã« environment : test ã¿ã°ãä»äžããŸããããŒã«ãã€ã³ãã£ã³ã°ã®æ¡ä»¶ã«ã environment : test ã¿ã°ããæå®ããã°ããã® Google ã°ã«ãŒã㯠environment : test ã¿ã°ã®ã€ãããããžã§ã¯ãã«ã ãæš©éãæå¹ã§ãããã®ããã«å¶éããããšãå¯èœã§ãã çµç¹ããªã·ãŒ ã¿ã°ã¯ãçµç¹ã®ããªã·ãŒã®æ¡ä»¶ãšããŠãå©çšã§ããŸãã ç¹å®ã¿ã°ã®ã€ãããããžã§ã¯ãã«ã®ã¿ããªã·ãŒãé©çšããããšãã£ãæ¡ä»¶ä»ããå¯èœã§ãã åè : çµç¹ã®ããªã·ãŒã解説 - G-gen Tech Blog åè : çµç¹ã®ããªã·ãŒãã¿ã°ã§å¶åŸ¡ããŠã¿ã - G-gen Tech Blog åè : ã¿ã°ã䜿çšããçµç¹ã®ããªã·ãŒã®èšå® 課é管ç 課éæçްãžã®åæ ã©ãã«ã¯ã課é管çã®ããã«çšããããšãã§ããŸãã è«æ±å
ã¢ã«ãŠã³ãã®èª²éã¬ããŒãç»é¢ã§ããªãœãŒã¹ã«ä»äžãããã©ãã«ã«ãã£ãŠãäœã«ãããå©çšæéãããã£ãŠããã®ãããæçŽ°è¡šç€ºããããšãã§ããŸãã è«æ±å
ã¢ã«ãŠã³ãã®ã¬ããŒãç»é¢ äŸãã° owner : xxx ã®ããã«ãªãŒããŒéšçœ²ã®ã©ãã«ãä»äžããŠããã°ãå©çšæéã瀟å
è«æ±ãããšãã«å©çšã§ããŸãã ãªãã©ãã«æ
å ±ã課éã«åæ ãããã®ã¯ã ã©ãã«ãä»äžããæããåŸã®èª²éã®ã¿ ã§ããã©ãã«ä»äžåã®èª²éæ
å ±ã«ãŸã§é¡ã£ãŠåæ ãããããšã¯ãããŸããã®ã§ããæ³šæãã ããã åè : Cloud Billing ã®æŠèŠ - ã©ã㫠課éæ
å ±ã® BigQuery ãšã¯ã¹ããŒã è«æ±å
ã¢ã«ãŠã³ãã®èª²éæçŽ°ã¯ BigQuery ã«ãšã¯ã¹ããŒãããããšãã§ããŸãããšã¯ã¹ããŒãå
容ã«ã¯ãã©ãã«æ
å ±ãå«ãŸããŸããBigQuery ãçšã㊠SQL ã«ãã詳现ã«èª²éæ
å ±ã®åæãè¡ãéã«ãã©ãã«ã掻çšã§ããŸãã åè : Cloud Billing ããŒã¿ã®ãšã¯ã¹ããŒã ã¯ãšãªã®äŸ - ã©ãã«ã䜿çšããã¯ãšãªã®äŸ ãªã2022幎10æã®ã¢ããããŒãã«ãããã¿ã°ã®æ
å ±ã BigQuery ãšã¯ã¹ããŒãã«å«ãŸããããã«ãªããŸããããã ãããªãœãŒã¹ã¬ãã«ã§åæ ãããã®ã¯ Compute Engine VMãAlloyDB ã¯ã©ã¹ã¿ãCloud Run ãµãŒãã¹ãªã©ããµããŒããããŠãããªãœãŒã¹ã®èª²éã®ã¿ã§ãããŸãã¿ã°ãä»äžããããåé€ãããããŠãã BigQuery ãšã¯ã¹ããŒãã«åæ ããããŸã§ãæå€§1æéçšåºŠããããŸãã åè : æšæºããŒã¿ã®ãšã¯ã¹ããŒãã®æ§é - ã¿ã°ã«ã€ã㊠ã¿ã°ã®äœ¿ãæ¹ ã¿ã°ããŒã»ããªã¥ãŒã®äœæ åºæ¬çãªã¿ã°ã®äœ¿ãæ¹ãã玹ä»ããŸãã ã¿ã°ã䜿ãã«ã¯ãŸããã¿ã°ããŒãšã¿ã°ããªã¥ãŒãã çµç¹ ãŸã㯠ãããžã§ã¯ã ã§äºãäœæããŠããå¿
èŠããããŸãã ã¿ã°ãäœæããã«ã¯ãçµç¹ãŸãã¯ãããžã§ã¯ãã¬ãã«ã§ãã¿ã°ç®¡çè
ïŒ roles/resourcemanager.tagAdmin ïŒããŒã«ãå¿
èŠã§ãã ã³ã³ãœãŒã«ã®å Žå ãŸãã¯ãGoogle Cloud ã³ã³ãœãŒã«ã®å·Šäžã«ãããããžã§ã¯ãã»ã¬ã¯ã¿ã§ãã¿ã°ãäœæãããçµç¹ãŸãã¯ãããžã§ã¯ããéžæããŠãã ããã ãã®åŸã Google Cloud ã³ã³ãœãŒã« ïŒ IAM ãšç®¡ç ïŒ ã¿ã° ãã + äœæ ãæŒäžããããšã§ãããŒã»ããªã¥ãŒãå®çŸ©ã§ããŸããå®çŸ©ãããšãããŒãšããªã¥ãŒã«ã¯ããããäžæãšãªã ID ãæãåºãããŸãã ã¿ã°ããŒã»ããªã¥ãŒäœæç»é¢ ã³ãã³ãã©ã€ã³ã®å Žå gcloud ã³ãã³ãã©ã€ã³ã§ã¯ã gcloud resource-manager tags keys create ãš gcloud resource-manager tags values create ãçšããŸãã ããŒãäœæããéã parent ã«ã¯ãã¿ã°ãäœæããçµç¹ãŸãã¯ãããžã§ã¯ããæå®ããŸããçµç¹ã®å Žåã organizations/${çµç¹ ID} ã®ãããªåœ¢åŒã«ããŸãã gcloud resource-manager tags keys create test-tag-key \ --parent = organizations/ 1234567890 \ --description =" This is my description " ããªã¥ãŒãäœæããéã parent ã«ã¯ã tagKes/ ã§å§ãŸãå
ã»ã©äœæããããŒã® ID ãæå®ããŸãã gcloud resource-manager tags values create test-value1 \ --parent = tagKeys/ 123456789012 \ --description =" This is for test. " åè : gcloud resource-manager tags keys create åè : gcloud resource-manager tags values create ãªãœãŒã¹ãžã®çŽã¥ã ãã©ã«ãã»ãããžã§ã¯ã ã¿ã°ããã©ã«ãããããžã§ã¯ãã«çŽã¥ããã«ã¯ã Google Cloud ã³ã³ãœãŒã« ïŒ Manage ResourcesïŒãªãœãŒã¹ã®ç®¡çïŒ ã§ãªãœãŒã¹ããªãŒã衚瀺ãããŸãã ã³ã³ãœãŒã«ã®å Žå Google Cloud ã³ã³ãœãŒã«ã®ããªãœãŒã¹ã®ç®¡çãç»é¢ãžé·ç§»ããŸãã察象ã®ãã©ã«ãããããžã§ã¯ããéžæããŠç»é¢äžéšã«è¡šç€ºããããã¿ã°ããã¿ã³ãæŒäžããŸããä»äžããã¿ã°ããŒã»ããªã¥ãŒã远å ããŠãä¿åããŸãã 察象ãªãœãŒã¹éžæ ã¿ã°ä»äžç»é¢ ã³ãã³ãã©ã€ã³ã®å Žå ã¿ã°ãšãªãœãŒã¹ãçŽã¥ããã«ã¯ã gcloud resource-manager tags bindings create ã³ãã³ãã©ã€ã³ã䜿çšã§ããŸãããã®ã³ãã³ãã©ã€ã³ãèŠããšãã¿ã°ã®ãã€ã³ãã£ã³ã°ïŒçŽã¥ãïŒèªäœã Resource Manager API ã®ãªãœãŒã¹ã§ãããšããããšãåãããŸãã çŽã¥ãã察象ãªãœãŒã¹ã¯ parent ã«æå®ããŸãããã®ãšãã察象ãªãœãŒã¹ã¯ å®å
šãªãªãœãŒã¹å ã§æå®ããŸãã gcloud resource-manager tags bindings create \ --tag-value = tagValues/ 123456789012 \ --parent = //cloudresourcemanager.googleapis.com/projects/my-project åè : gcloud resource-manager tags bindings create åè : å®å
šãªãªãœãŒã¹å åå¥ãªãœãŒã¹ ãŸãããããžã§ã¯ãé
äžã®åå¥ã®ãªãœãŒã¹ã«ãã察å¿ããŠãããµãŒãã¹ã§ããã°ã¿ã°ãä»äžã§ããŸããäŸãšããŠãCompute Engine VM ã¯ãã³ã³ãœãŒã«ã§ã®ã¿ã°çŽã¥ãã§ããã»ããã³ãã³ãã©ã€ã³ã§ãå¯èœã§ãã åè : ã¿ã°ããµããŒããããµãŒãã¹ ã³ã³ãœãŒã«ã®å Žå ã€ã³ã¹ã¿ã³ã¹ãžã®ã¿ã°çŽã¥ãç»é¢ ã³ãã³ãã©ã€ã³ã®å Žå åºæ¬ã¯ãããžã§ã¯ãã®ãšããšåæ§ã§ãããã€ã³ã¹ã¿ã³ã¹ã¯ãŸãŒã³ïŒãã±ãŒã·ã§ã³ïŒã®æŠå¿µããããªãœãŒã¹ã®ããããã±ãŒã·ã§ã³ãæç€ºçã«æå®ããŸãã gcloud resource-manager tags bindings create \ --tag-value = tagValues/ 123456789012 \ --parent = //compute.googleapis.com/projects/my-project/zones/asia-northeast1-c/instances/my-instance \ --location = asia-northeast1-c ãã©ãã«ã·ã¥ãŒã ã¿ã°ã®çŽã¥ããè¡ãããšããéã«ã以äžã®ãããªã¡ãã»ãŒãžãåºãå ŽåããããŸãã ERROR: (gcloud.resource-manager.tags.bindings.create) PERMISSION_DENIED: The caller does not have permission ãã®ãšã©ãŒã¡ãã»ãŒãžã¯ãIAM æš©éãäžè¶³ããŠããããšãæå³ããŸããã¿ã°äœææã«å¿
èŠãªã¿ã°ç®¡çè
ïŒ roles/resourcemanager.tagAdmin ïŒããŒã«ã¯ãçŽã¥ããè¡ãæš©éãæã£ãŠããŸãããçŽã¥ããè¡ãïŒãã€ã³ãã£ã³ã°ãäœæããïŒã«ã¯ãã¿ã°ãŠãŒã¶ãŒïŒ roles/resourcemanager.tagUser ïŒããŒã«ãå¿
èŠã§ãã ã¿ã°çŽã¥ãã®äœæã«ã¯ resourcemanager.tagValueBindings.create æš©éãå¿
èŠãªã»ããCompute Engine VM ã«å¯ŸããŠã¯ã compute.instances.createTagBinding ã®ããã«ãå API ãªãœãŒã¹ããšã«ã¿ã°ãã€ã³ãã£ã³ã°ãäœæããããã®æš©éãå¿
èŠã§ããã¿ã°ãŠãŒã¶ãŒïŒ roles/resourcemanager.tagUser ïŒããŒã«ã«ã¯ãå€ãã®ãªãœãŒã¹ã«å¯Ÿãã *.createTagBinding ãå«ãŸããŠããŸãã åè : IAM basic and predefined roles reference - Tag User (roles/resourcemanager.tagUser) ã©ãã«ã®äœ¿ãæ¹ ã©ãã«ã®ä»äž ã©ãã«ã¯ãäºåå®çŸ©ãå¿
èŠãããŸããã ä»äžã®æ¹æ³ã¯ãªãœãŒã¹ããšã«ç°ãªããŸããäŸãšã㊠Compute Engine VM ã®å Žåãæ°èŠ VM äœææã«ä»äžããããVM ã®ç·šéã«ããä»äžã§ããŸãã ã³ã³ãœãŒã«ã®å Žå ã©ãã«ã®ä»äžç»é¢ ã³ãã³ãã©ã€ã³ã®å Žå VM ãžã®ã©ãã«ä»äžã®å Žåã¯ã gcloud compute instances add-labels ã䜿ããŸããã³ãã³ãã©ã€ã³ãèŠãŠåããããã«ãã©ãã«ããèªäœã¯ãªãœãŒã¹ã§ã¯ãããŸãããã©ãã«ã¯ VM ãªãœãŒã¹ã«ä»äžããã¡ã¿ããŒã¿ã§ãã®ã§ãã©ãã«ã®ä»äžã¯ããªãœãŒã¹ã«å¯Ÿããç·šéæäœã«ãªããŸãã gcloud compute instances add-labels my-instance \ --zone = asia-northeast1-c \ --labels = my-test-label = value-01 åè : gcloud compute instances add-labels ãã®ãããã©ãã«ã®ä»äžã«å¿
èŠãª IAM ããŒã«ã¯ãCompute 管çè
ïŒ roles/compute.admin ïŒçãVM ãç·šéã§ãã IAM ããŒã«ã§ãã ã©ãã«ã«ãããã£ã«ã¿ Compute Engine ãäŸã«åããšãç¹å®ã®å€ã®ã©ãã«ãã€ãã VM ã®ã¿ããã£ã«ã¿ããããšãã£ãäœ¿ãæ¹ãã§ããŸãã ã³ã³ãœãŒã«ç»é¢ã§ããã°ãVM äžèЧç»é¢ã®ããã¹ãããã¯ã¹ã«æ¡ä»¶ãæå®ã§ããŸãã ã³ã³ãœãŒã«ç»é¢ã§ã®ãã£ã«ã¿ ã³ãã³ãã©ã€ã³ã§ããã°ããã£ã«ã¿æ¡ä»¶ã --filter ãªãã·ã§ã³ã§æå®ããŸãã gcloud compute instances list --filter =" labels.my-test-label:value-01 " åè : gcloud topic filters ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãX (æ§ Twitter) ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-genã®å€§æŽ¥ã§ããæ¬èšäºã§ã¯ Google Cloud (æ§ç§° GCP) ã«ããã Cloud Interconnect ã®ç¹åŸŽãã¡ãªãããæ¥ç¶æ¹æ³ã«ã€ããŠã玹ä»ããŸãã Cloud Interconnect ãšã¯ Cloud Interconnect ã䜿ãã¡ãªãã å
Œ
±ã®ã€ã³ã¿ãŒããããééããªã æ¥ç¶åž¯åãæè»ã«èª¿æŽã§ãã äžãïŒå€åãïŒæéãå²å® Dedicated Interconnect Dedicated Interconnect ãšã¯ 4ã€ã®æé軞 Partner Interconnect Partner Interconnect ãšã¯ ãŠãŒã¹ã±ãŒã¹ ã¬ã€ã€ïŒæ¥ç¶ãšã¬ã€ã€ïŒæ¥ç¶ 3ã€ã®æé軞 æ¥ç¶æé ïŒPartner InterconnectïŒ VLAN ã¢ã¿ããã¡ã³ããš Cloud Router ã®äœæ ãµãŒãã¹ãããã€ãããã®ãªã¯ãšã¹ããæ¿è«Ÿ æ¥ç¶ãæå¹ã«ãã BGP ã»ãã·ã§ã³ã®æ§æ Partner Interconnect ã®æ¥ç¶ã確ç«ãã Cloud Interconnect ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã° Cloud Interconnect ãšã¯ Cloud Interconnect ãšã¯ãèªç€Ÿã®æ ç¹ãããŒã¿ã»ã³ã¿ãŒãªã©ã®ãªã³ãã¬ãã¹ãããã¯ãŒã¯ãšãGoogle Cloud ã® Virtual Private CloudïŒVPCïŒãããã¯ãŒã¯ãã å°çšç·ãããã¯éåç¶²ã§æ¥ç¶ãããµãŒãã¹ ã§ãã åè : Cloud Interconnect ã®æŠèŠ èªç€Ÿæ ç¹çãã Google Cloud ç°å¢ã«ãã©ã€ããŒã IP ã¢ãã¬ã¹ã§æ¥ç¶ããã«ã¯ãIPsec ãããã³ã«ã§ã® VPN ãå®çŸãã Cloud VPN ããåœèšäºã§ç޹ä»ãã Cloud Interconnect ã®ãããããéžæããããšã«ãªããŸããCloud Interconnect ã¯ãå
¬è¡ã€ã³ã¿ãŒããããå©çšãã Cloud VPN ããããäœã¬ã€ãã³ã·ã§ãã£ããã垯åãå®å®ããå¯èœæ§ããããŸãã Cloud VPN ã«ã€ããŠã¯ä»¥äžã®èšäºããåç
§ãã ããã blog.g-gen.co.jp Cloud Interconnect ã«ã¯ã Dedicated Interconnect ãš Partner Interconnect ã®2çš®é¡ã®æ¥ç¶æ¹æ³ããããŸãã åè : äž»ãªçšèª - Cloud Interconnect ã®èŠçŽ Cloud Interconnect ã䜿ãã¡ãªãã å
Œ
±ã®ã€ã³ã¿ãŒããããééããªã Cloud Interconnect ã¯å
Œ
±ã®ã€ã³ã¿ãŒããããçµç±ããã«ããªã³ãã¬ãã¹ãããã¯ãŒã¯ãš VPC ãããã¯ãŒã¯ãæ¥ç¶ã§ããŸãã Cloud Interconnect ãçšãããšããã©ãã£ãã¯ã¯å°çšç·ãŸãã¯éåç¶²ãããã¯ãŒã¯ãæã€ãããã¯ãŒã¯ãµãŒãã¹ãããã€ããééããŸãããã®ãããå
Œ
±ã®ã€ã³ã¿ãŒãããã®èŒ»èŒ³ã®åœ±é¿ãåããããšãªããå®å®ããéä¿¡ãå®çŸã§ããŸãã æ¥ç¶åž¯åãæè»ã«èª¿æŽã§ãã Cloud Interconnect ã§ã¯ãæ¥ç¶åž¯åãå¿
èŠãšãããµãŒãã¹ã®èŠä»¶ã«å¿ããŠæè»ã«éžã¶ããšãã§ããŸãã Dedicated Interconnect ã®å Žåã1åç·ããã 10 Gbps ãŸãã¯100 Gbps ã®ã€ãŒãµãããæ¥ç¶ Partner Interconnect ã®å ŽåãVLANã¢ã¿ããã¡ã³ãããã 50 Mbpsïœ50 Gbps ã®ç¯å²ã§èšå®å¯èœããã ããµãŒãã¹ãããã€ãããæäŸããããµãŒãã¹ã«ãã£ãŠã¯äœ¿çšã§ããªã垯åãããã äžãïŒå€åãïŒæéãå²å® Cloud Interconnect ãä»ãã VPC ãããã¯ãŒã¯ããã®äžãïŒGoogle CloudããèŠãŠå€åãïŒãã©ãã£ãã¯æéã¯ãã€ã³ã¿ãŒããããçµç±ãã VPC ãããã¯ãŒã¯äžãæéãšæ¯ã¹ãŠãå²å®ã«ãªã£ãŠããŸãã Dedicated Interconnect ã®å Žåãã¢ãžã¢å°åã§ $0.042/GB Partner Interconnect ã®å Žåãã¢ãžã¢å°åã§ $0.042/GB éåžžã®Virtual Private CloudïŒVPCïŒããã®äžãæéã¯ãã¢ãžã¢å°åã§ $0.12/GB Dedicated Interconnect Dedicated Interconnect ãšã¯ Dedicated Interconnect ã¯ããªã³ãã¬ãã¹ãããã¯ãŒã¯ãš VPC ãããã¯ãŒã¯éãã å°çšç·ã§çŽæ¥æ¥ç¶ ããŸãã Google ãæå®ããã³ãã±ãŒã·ã§ã³æœèšã«èšçœ®ããã客æ§ã«ãŒã¿ãšãGoogle ãã¢ãªã³ã°ãšããžã å
ãã¡ã€ããŒã±ãŒãã«ã§æ¥ç¶ããæ§æ ã§ãã åè : Dedicated Interconnect ã®æŠèŠ 10 Gbps 以äžã®åž¯åãå¿
èŠãªããŒã¿è»¢éãå©çšãããããªãŠãŒã¹ã±ãŒã¹ã«é©ããŠãããå
Œ
±ã®ã€ã³ã¿ãŒãããäžã§ã®ããŒã¿è»¢éãããããã³ã¹ãå¹çé¢ã§åªããŠããŸãã ã³ãã±ãŒã·ã§ã³æœèšã«ã¯ã以äžã®æè¡èŠä»¶ãæºãããŠããã«ãŒã¿ãèšçœ®ããå¿
èŠããããŸãã 10 Gbps åç·ãã·ã³ã°ã«ã¢ãŒã ãã¡ã€ããŒã10GBASE-LRïŒ1310 nmïŒã100 Gbps åç·ãã·ã³ã°ã«ã¢ãŒã ãã¡ã€ããŒã100GBASE-LR4 IPv4 ãªã³ã¯ã®ããŒã«ã« ã¢ãã¬ã¹æå® LACPïŒåäžåç·ã䜿çšããŠããå Žåãå¿
èŠïŒ EBGP-4 ãã«ãããã 802.1Q VLAN 4ã€ã®æé軞 Dedicated Interconnect ãå©çšããå Žåã以äžã®1ïœïŒã®æéãå¿
èŠãšãªããŸããæ¥ç¶ãããã±ãŒã·ã§ã³ãå©çšåž¯åãªã©ã«ãããæéã¯ç°ãªããŸãã Dedicated Interconnect ã®å©çšæ VLAN ã¢ã¿ããã¡ã³ãã®æé çžäºæ¥ç¶ãä»ãã VPC ãããã¯ãŒã¯ããã®äžãïŒå€åãïŒãã©ãã£ã㯠æ¥ç¶ããããŒã¿ã»ã³ã¿ãŒã®æ§å
é
ç·ã®æé 1ïœ3ã®æéã«ã€ããŠãåãªãœãŒã¹ïŒInterconnect æ¥ç¶ãŸã㯠VLAN ã¢ã¿ããã¡ã³ãïŒã®æéåäœã®æéã¯ããªãœãŒã¹ãææãããããžã§ã¯ãã«èª²éãããŸãã4ã¯ãŠãŒã¶ãŒãå¥çŽããã³ãã±ãŒã·ã§ã³æœèšããè«æ±ãããŸãã åè : Cloud Interconnect ã®æé - Dedicated Interconnect Partner Interconnect Partner Interconnect ãšã¯ Partner Interconnect ã¯ã ãµãŒãã¹ãããã€ããŒã®ãããã¯ãŒã¯ãå©çš ããŠããªã³ãã¬ãã¹ãããã¯ãŒã¯ãš Google Cloud ã® Virtual Private CloudïŒVPCïŒãæ¥ç¶ãããµãŒãã¹ã§ãã åè : Partner Interconnect ã®æŠèŠ æ¥æ¬ã§ã¯ãã¢ããæ±äº¬ãEquinixãã€ã³ã¿ãŒããã ã€ãã·ã¢ãã£ãïŒIIJïŒãªã©ãå€ãã®ãããã¯ãŒã¯ãããã€ããŒã Partner Interconnect ã«å¯Ÿå¿ããŠããŸãã åè : ãµããŒããããŠãããµãŒãã¹ ãããã€ã ãŠãŒã¹ã±ãŒã¹ ãã§ã«å©çšäžã«ãµãŒãã¹ ãããã€ããŒã®è¿œå å¥çŽã§å¯Ÿå¿å¯èœãªå Žå Google ãæå®ããã³ãã±ãŒã·ã§ã³æœèšã«ã«ãŒã¿ãçšæã§ããªã åžžæ 10 Gbps ã®åºåž¯åã§ã®çŽæ¥æ¥ç¶ããå¿
èŠããªã ã¬ã€ã€ïŒæ¥ç¶ãšã¬ã€ã€ïŒæ¥ç¶ Partner Interconnect ã«ã¯ãã¬ã€ã€2æ¥ç¶ãšã¬ã€ã€3æ¥ç¶ãéžæã§ããŸãããããã¯ãŒã¯ãµãŒãã¹ãããã€ããŒã«ãã£ãŠããµããŒãããŠããæ¥ç¶æ¹æ³ãç°ãªããŸãã 2ã€ã®æ¥ç¶æ¹æ³ã®éãã¯ãGoogle Cloud ã® Cloud Router ã®å¯Ÿåã«ãŒã¿ãŒãšãªããBGP ãã¢ã®æ¥ç¶å
ã§ãã ã¬ã€ã€2æ¥ç¶ïŒã客æ§ã®ãªã³ãã¬ãã¹æ ç¹ã®ã«ãŒã¿ãŒ ã¬ã€ã€3æ¥ç¶ïŒãããã¯ãŒã¯ãµãŒãã¹ãããã€ããŒã®ã«ãŒã¿ãŒ 3ã€ã®æé軞 Partner Interconnect ã§ã¯ã以äžã®1ïœ3ã®æéãçºçããŸãã VLAN ã¢ã¿ããã¡ã³ãã®æé çžäºæ¥ç¶ãä»ãã VPC ãããã¯ãŒã¯ããã®äžãïŒå€åãïŒãã©ãã£ã㯠ãµãŒãã¹ãããã€ããŒã®æ¥ç¶æé 1ã2ã®æéã«ã€ããŠãåãªãœãŒã¹ïŒInterconnect æ¥ç¶ãŸã㯠VLAN ã¢ã¿ããã¡ã³ãïŒã®æéåäœã®æéã¯ããªãœãŒã¹ãææãããããžã§ã¯ãã«èª²éãããŸãã3ã¯ãŠãŒã¶ãŒãå¥çŽãããµãŒãã¹ãããã€ããŒããè«æ±ãããŸãã ãã®ä»ã«å¿
èŠãšãªãè²»çšãšããŠãå¥çŽãããµãŒãã¹ãããã€ããŒã®éåç¶²ãµãŒãã¹ããå°çšç·ãµãŒãã¹çã®æéãå¿
èŠãšãªãå ŽåããããŸãã åè : Cloud Interconnect ã®æé - Partner Interconnect æ¥ç¶æé ïŒPartner InterconnectïŒ å©çšé »åºŠã®é«ã Partner Interconnect ãå©çšããŠããŠãŒã¶ãŒã®ãªã³ãã¬ãã¹ãããã¯ãŒã¯ãšãGoogle Cloud ã® VPC ãããã¯ãŒã¯ãæ¥ç¶ããæé ã玹ä»ããŸãã VLAN ã¢ã¿ããã¡ã³ããš Cloud Router ã®äœæ Google Cloud ã¡ãã¥ãŒã®ãçžäºæ¥ç¶ãïŒãçžäºæ¥ç¶ãããã VLAN ã¢ã¿ããã¡ã³ããäœæããŸãã ã¯ããã«ããDedicated InterconnectãããPartner Interconnect ãã®éžæãè¡ããŸãã VLAN ã¢ã¿ããã¡ã³ãã®äœææã« Cloud Router ãäœæããããšãã§ããŸãããäœææžã¿ã® Cloud Router ãå©çšããããšãã§ããŸãã æ£ãã VLANã¢ã¿ããã¡ã³ããš Cloud Router ãäœæããããšãGoogle Cloud ãã ãã¢ãªã³ã°ã㌠ãçæãããŸãã ãã¢ãªã³ã°ããŒã¯ããµãŒãã¹ ãããã€ãã Virtual Private CloudïŒVPCïŒãšé¢é£ãã Cloud Router ãèå¥ããŠæ¥ç¶ã§ããããã«ããããã®äžæã®ããŒã§ãã ãµãŒãã¹ãããã€ãã¯ãVLAN ã¢ã¿ããã¡ã³ãã®æ§æãå®äºããããã«ããã®ãã¢ãªã³ã°ããŒãå¿
èŠã«ãªããŸãã ãµãŒãã¹ãããã€ãããã®ãªã¯ãšã¹ããæ¿è«Ÿ ãµãŒãã¹ãããã€ãã«ãã¢ãªã³ã°ããŒã®æ
å ±ãéä¿¡ãããµãŒãã¹ãããã€ããæ¥ç¶ãæ§æãããŸã§åŸ
æ©ããŸãã ãã®æãGoogle Cloud äžã®ã¹ããŒã¿ã¹ã¯ããµãŒãã¹ ãããã€ããŒãåŸ
æ©ããŠããŸãããšè¡šç€ºãããŠããŸãã ãµãŒãã¹ãããã€ãã¯ããã¢ãªã³ã°ããŒãããµãŒãã¹ãããã€ããŒåŽã® VLAN ã¢ã¿ããã¡ã³ããäœæããŸãããã®åŸããµãŒãã¹ãããã€ãã¯ãGoogle Cloud ãžæ¥ç¶ã®ãªã¯ãšã¹ããè¡ããŸãã Google Cloud ã® Web ã³ã³ãœãŒã«ã«ãŠããµãŒãã¹ãããã€ãã®ãªã¯ãšã¹ããæ¿è«ŸããŸãã æ¥ç¶ãæå¹ã«ãã ãµãŒãã¹ ãããã€ãã®ãªã¯ãšã¹ããæ¿è«ŸããåŸã¯ãVLAN ã¢ã¿ããã¡ã³ããæå¹ã«ããå¿
èŠããããŸãã VLAN ã¢ã¿ããã¡ã³ããæå¹ã«ããŠãµãŒãã¹ ãããã€ããšã®æ¥ç¶ã確ç«ãããŠããããšã確èªããŸãããã®æãGoogle Cloud äžã®ã¹ããŒã¿ã¹ã¯ãæå¹åããå¿
èŠããããŸãããšè¡šç€ºãããŠããŸãã BGP ã»ãã·ã§ã³ã®æ§æ ã¬ã€ã€2æ¥ç¶ã®å ŽåãCloud Router ãšæ ç¹ã®ã«ãŒã¿ãŒãšã®éã§ãBGP ã»ãã·ã§ã³ã確ç«ããå¿
èŠããããŸãã Google Cloud ã³ã³ãœãŒã«ã® VLAN ID ãš BGP ã㢠IP ã¢ãã¬ã¹ã䜿çšããŠãã«ãŒã¿ãŒãæ§æããŸãã ã¬ã€ã€3æ¥ç¶ã®å Žåããã®æ§æã¯èªååãããŠããã®ã§ãGoogle Cloud ã®Web ã³ã³ãœãŒã«ãããBGP ãæ§æããããã¯ãªãã¯ããŸãã ãã®æãGoogle Cloud äžã®ã¹ããŒã¿ã¹ã¯ãBGP æ§æãå¿
èŠã§ãããšè¡šç€ºãããŠããŸãã Partner Interconnect ã®æ¥ç¶ã確ç«ãã 以äžã®æé ã«ãŠããªã³ãã¬ãã¹ãããã¯ãŒã¯ãš Google Cloud ã® VPC ãããã¯ãŒã¯éãæ¥ç¶ãããŸããã æ£ããæ§ç¯ãå®äºãããšãGoogle Cloud äžã®ã¹ããŒã¿ã¹ã¯ã皌åäžããšè¡šç€ºãããŠããŸãã Cloud Interconnect ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã° Cloud Interconnect ã§çºçããå¯èœæ§ãããäžè¬çãªåé¡ã«ã€ããŠã¯ã以äžã®å
¬åŒããã¥ã¡ã³ããåç
§ããŠãã ããã åè : ãã©ãã«ã·ã¥ãŒãã£ã³ã° 倧接 å幞 (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2022幎4æã«G-gen ã«ãžã§ã€ã³ã åè·ãŸã§ã¯AWSãã¯ããã€ã³ãã©é åå
šè¬ã®ãªãã§ãå±ãäºåæµã¯ã©ãŠããšã³ãžãã¢ãç®æããŠãAWSã®ã¹ãã«ãGoogle Cloudã«ãã€ã°ã¬ãŒã·ã§ã³äžã®æ¥ã
ã
G-gen ã®äœã
æšã§ããåœèšäºã§ã¯ãGoogle Cloud (æ§ç§° GCP) ã®ãµãŒããŒã¬ã¹ã³ã³ãããµãŒãã¹ã§ãã Cloud Run ããããããŒãžããªãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãµãŒãã¹ã® Cloud SQL ã«å®å
šã«æ¥ç¶ããæ¹æ³ã玹ä»ããŸãã 䜿çšãããµãŒãã¹ Cloud Run Cloud SQL Cloud Run ãã Cloud SQL ã«æ¥ç¶ããæ¹æ³ ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ ã®äœ¿çš Cloud SQL Auth Proxy ã®äœ¿çš Cloud SQL ã®äœæãšèšå® Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãäœæãã ããŒã¿ããŒã¹ãäœæãã ãŠãŒã¶ãŒãäœæãã Cloud SQL ã«æ¥ç¶ãã Cloud Run ãµãŒãã¹ãäœæ Cloud Run ãµãŒãã¹ã«çŽä»ãããµãŒãã¹ã¢ã«ãŠã³ããäœæãã ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã Cloud Run ã«ãããã€ãã ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã® Git ãªããžããªã䜿çšãã ãµã³ãã«ã¢ããªã®ã³ã³ããã€ã¡ãŒãžããã«ããã Cloud Run ãµãŒãã¹ããããã€ãã åçš®èšå®å€ãå
¥åãã Cloud SQL ã®æ¥ç¶æ
å ±ãç°å¢å€æ°ã«èšå®ãã æ¥ç¶ãã Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãèšå®ãã ãµãŒãã¹ã¢ã«ãŠã³ããèšå®ãã ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã®åäœç¢ºèª 䜿çšãããµãŒãã¹ Cloud Run Cloud Run ã¯ãµãŒããŒã¬ã¹ãªç°å¢ã§ã³ã³ãããå®è¡ã§ãããµãŒãã¹ã§ãã 詳现ã«ã€ããŠã¯ä»¥äžã®èšäºã§è§£èª¬ããŠããŸãã®ã§ããäžèªãã ããã blog.g-gen.co.jp Cloud SQL ä»å㯠PostgreSQL ããŒã¿ããŒã¹ ã®ãããŒãžããµãŒãã¹ã§ãã Cloud SQL for PostgreSQL ã䜿çšããŸãã Cloud SQL ã®è©³çްã«ã€ããŠã¯ä»¥äžã®èšäºã§è§£èª¬ããŠããŸãã blog.g-gen.co.jp Cloud Run ãã Cloud SQL ã«æ¥ç¶ããæ¹æ³ Cloud Run ã§ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã䜿çšãããå Žåãæåã«æ€èšããããšã«ãªãã®ã Cloud SQL ã§ãã Cloud SQL ã®ã€ã³ã¹ã¿ã³ã¹ã¯ Google Cloud ã®ãããŒãžã VPC ( ãµãŒãã¹ãããã¥ãŒãµãŒãããã¯ãŒã¯ ) ã«é
眮ãããCloud Run ããæ¥ç¶ããå Žåã¯ã以äžã«ç€ºã 2 çš®é¡ã®æ¹æ³ã®ããããã䜿çšããŸãã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ ã®äœ¿çš ãã©ã€ããŒã IP ã䜿çšã㊠Cloud SQL ã«æ¥ç¶ãããå Žåã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ ã䜿çšããŸãã èªèº«ã®ãããžã§ã¯ãå
ã«ãã VPC ãš Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãååšãããµãŒãã¹ãããã¥ãŒãµãŒãããã¯ãŒã¯ã ãã©ã€ããŒããµãŒãã¹ã¢ã¯ã»ã¹ ã䜿çšããŠãã¢ãªã³ã°æ¥ç¶ããVPC å
ã«äœæããã³ãã¯ã¿ã䜿çšã㊠Cloud SQL ã«æ¥ç¶ããããã« Cloud Run ãæ§æããŸãã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ã䜿çšããæ¥ç¶ Cloud SQL Auth Proxy ã®äœ¿çš Cloud SQL Auth Proxy ãšãããããã·ãœãããŠã§ã¢ã䜿çšããããšã§ãCloud SQL ã€ã³ã¹ã¿ã³ã¹ã®ãããªã㯠IP ã䜿çšãã€ã€ãTLS æå·åã«ããå®å
šãªæ¥ç¶ãå®çŸã§ããŸãã ãŸããCloud SQL Auth Proxy ã䜿çšããå ŽåãããŒã¿ããŒã¹ã®æ¥ç¶å
ã IAM ã§å¶åŸ¡ããããšãã§ããããã Cloud SQL Auth Proxy ã䜿çšããã〠Cloud SQL ã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ãã IAM æš©éãæã£ãŠããã¯ã©ã€ã¢ã³ãã«æ¥ç¶å
ãå¶éããããšãã§ããŸãã Cloud Run ã§ã¯ããããªã㯠IP ã䜿çšãã Cloud SQL ã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ããå Žåãããããã Cloud Run å®è¡ç°å¢ã«ãã Cloud SQL Auth Proxy ã䜿çšããããã«æ§æããããšãã§ããUNIX ãã¡ã€ã³ãœã±ããã䜿çšããŠé«éãªéä¿¡ãè¡ãããšãã§ããŸãã ãªããCloud SQL ã«ãããªã㯠IP ã䜿çšããããªãå Žåã¯ãå
è¿°ã®ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã³ãã¯ã¿ãš Cloud SQL Auth Proxy ã䜵çšããããšã§ããã©ã€ããŒã IP ã䜿çšãããããã·çµç±ã®æ¥ç¶ãå¯èœãšãªã£ãŠããŸãã åœèšäºã§ã¯ããããªã㯠IP ã¢ãã¬ã¹ã䜿çšãã Cloud SQL ã«å¯ŸããŠãCloud SQL Auth Proxy çµç±ã®æ¥ç¶ãå®éã«è©ŠããŠã¿ãŸãã Cloud SQL Auth Proxy ã䜿çšããæ¥ç¶ Cloud SQL ã®äœæãšèšå® Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãäœæãã åœèšäºã§ã¯ PosgreSQL ã® Cloud SQL ã€ã³ã¹ã¿ã³ã¹ã䜿çšããŸãã ä»»æã® ã€ã³ã¹ã¿ã³ã¹ ID ããã¹ã¯ãŒãããªãŒãžã§ã³çãèšå®ãã ãããªã㯠IP ãæå¹å ããŠäœæããŸãã ãããªã㯠IP ãæå¹ã«ã㊠Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãäœæãã ããã©ã«ãã®ãã·ã³ã¿ã€ã㯠4 vCPU ãã¡ã¢ãª 26 GB ãšãªã£ãŠãããæ€èšŒç®çã®å Žåã¯å°ã
é«ãã®èª²éããããŠããŸããããå¿
èŠã«å¿ããŠèª¿æŽãããšè¯ãã§ãããã ããŒã¿ããŒã¹ãäœæãã ã€ã³ã¹ã¿ã³ã¹ãäœæããããã ããŒã¿ããŒã¹ ã¿ãããããŒã¿ããŒã¹ãäœæããŠãããŸãã ããã§èšå®ããããŒã¿ããŒã¹åã¯ãåŸã»ã© Cloud Run ã®ç°å¢å€æ°ã«èšå®ããŸãã ããŒã¿ããŒã¹ã®äœæâ ããŒã¿ããŒã¹ã®äœæâ¡ ãŠãŒã¶ãŒãäœæãã ãŠãŒã¶ãŒ ã¿ãããããŒã¿ããŒã¹ã®ãŠãŒã¶ãŒã¢ã«ãŠã³ããäœæããŸãã ããã§èšå®ãããŠãŒã¶ãŒåããã¹ã¯ãŒãããåŸã»ã© Cloud Run ã®ç°å¢å€æ°ã«èšå®ããŸãã ãŠãŒã¶ãŒã¢ã«ãŠã³ãã远å â ãŠãŒã¶ãŒã¢ã«ãŠã³ãã远å â¡ Cloud SQL ã«æ¥ç¶ãã Cloud Run ãµãŒãã¹ãäœæ Cloud Run ãµãŒãã¹ã«çŽä»ãããµãŒãã¹ã¢ã«ãŠã³ããäœæãã Cloud Run ãã Cloud SQL ã«ã¢ã¯ã»ã¹ã§ããæš©éãæã£ããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãã«ã¯ä»¥äžã®ããŒã«ãä»äžããŸãã Cloud SQL ã¯ã©ã€ã¢ã³ã ( Cloud SQL Client ) Cloud Run çšãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã Cloud Run ã«ãããã€ãã ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã® Git ãªããžããªã䜿çšãã Google Cloud ã«ãã£ãŠãCloud SQL Auth Proxy ã䜿çšããããã«æ§æããã Cloud Run ã®ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ãæäŸãããŠããŸãã åœèšäºã§ã¯ Python ã®ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŸãïŒ GitHub ãªããžã㪠ïŒã $ git clone git@github.com:GoogleCloudPlatform/python-docs-samples.git ãµã³ãã«ã¢ããªã®ã³ã³ããã€ã¡ãŒãžããã«ããã python-docs-samples/cloud-sql/postgres/sqlalchemy/ ã«ãDockerfile ãå«ãããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã®åçš®ãã¡ã€ã«ãé
眮ãããŠããã®ã§ãåœè©²ãã£ã¬ã¯ããªã«ç§»åããŸãã $ cd python-docs-samples/cloud-sql/postgres/sqlalchemy/ Cloud Build ã䜿çšããŠãDockerfile ãå
ã« Docker ã³ã³ããã®ã€ã¡ãŒãžããã«ãããŸãã $ gcloud builds submit --tag gcr.io/{ã³ã³ããã€ã¡ãŒãžäœæå
ã®ãããžã§ã¯ãID}/{ä»»æã®åå} ãã«ãããã³ã³ããã€ã¡ãŒãžã¯ãæå®ãããããžã§ã¯ãã® Container Registry ã«æ ŒçŽãããŸãã ãã«ãããã³ã³ããã€ã¡ãŒãž Cloud Run ãµãŒãã¹ããããã€ãã åçš®èšå®å€ãå
¥åãã ãã«ãããã³ã³ããã€ã¡ãŒãžãã Cloud Run ãµãŒãã¹ããããã€ããŠãããŸãã ã³ã³ããã€ã¡ãŒãžã Cloud Run ã«ããã〠ãã«ãããã³ã³ããã€ã¡ãŒãžãå
¥åãããŠããããšã確èªããä»»æã®ãµãŒãã¹åãšãªãŒãžã§ã³ãèšå®ããŸãã Cloud Run ãµãŒãã¹ã®äœæâ ä»å㯠Cloud Run ãµãŒãã¹ã«å¯Ÿããã¢ã¯ã»ã¹å¶åŸ¡ã¯ããªãã®ã§ã ãã¹ãŠã®ãã©ãã£ãã¯ãèš±å¯ãã ãš æªèªèšŒã®åŒã³åºããèš±å¯ ã«ãã§ãã¯ãå
¥ããŸãã Cloud Run ãµãŒãã¹ã®äœæâ¡ Cloud SQL ã®æ¥ç¶æ
å ±ãç°å¢å€æ°ã«èšå®ãã Cloud SQL ã«æ¥ç¶ããããã®æ
å ±ã Cloud Run ã®ç°å¢å€æ°ãšããŠèšå®ããŸãã ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãUNIX ãœã±ããã䜿çšããå Žåã以äžã®ã¢ãžã¥ãŒã«ã䜿çšããŠæ¥ç¶ãè¡ãããŸãã connect_unix.py ïŒä»¥äžæç²ïŒ def connect_unix_socket () -> sqlalchemy.engine.base.Engine: # Note: Saving credentials in environment variables is convenient, but not # secure - consider a more secure solution such as # Cloud Secret Manager (https://cloud.google.com/secret-manager) to help # keep secrets safe. db_user = os.environ[ "DB_USER" ] # e.g. 'my-database-user' db_pass = os.environ[ "DB_PASS" ] # e.g. 'my-database-password' db_name = os.environ[ "DB_NAME" ] # e.g. 'my-database' unix_socket_path = os.environ[ "INSTANCE_UNIX_SOCKET" ] # e.g. '/cloudsql/project:region:instance' pool = sqlalchemy.create_engine( # Equivalent URL: # postgresql+pg8000://<db_user>:<db_pass>@/<db_name> # ?unix_sock=<INSTANCE_UNIX_SOCKET>/.s.PGSQL.5432 # Note: Some drivers require the `unix_sock` query parameter to use a different key. # For example, 'psycopg2' uses the path set to `host` in order to connect successfully. sqlalchemy.engine.url.URL.create( drivername= "postgresql+pg8000" , username=db_user, password=db_pass, database=db_name, query={ "unix_sock" : "{}/.s.PGSQL.5432" .format(unix_socket_path)}, ), # [START_EXCLUDE] # Pool size is the maximum number of permanent connections to keep. pool_size= 5 , # Temporarily exceeds the set pool_size if no connections are available. max_overflow= 2 , # The total number of concurrent connections for your application will be # a total of pool_size and max_overflow. # 'pool_timeout' is the maximum number of seconds to wait when retrieving a # new connection from the pool. After the specified amount of time, an # exception will be thrown. pool_timeout= 30 , # 30 seconds # 'pool_recycle' is the maximum number of seconds a connection can persist. # Connections that live longer than the specified amount of time will be # re-established pool_recycle= 1800 , # 30 minutes # [END_EXCLUDE] ) return pool ã³ã³ãããæ¥ç¶ãã»ãã¥ãªã㣠é
ç®ã® ã³ã³ãã ã¿ãããç°å¢å€æ°ãèšå®ããããšãã§ããã®ã§ã以äžã®ç°å¢å€æ°ã«å¯Ÿå¿ããå€ã Cloud Run ãµãŒãã¹ã«èšå®ããŠãããŸãã ç°å¢å€æ°å èšå®å€ INSTANCE_UNIX_SOCKET äœæãã Cloud SQL ã€ã³ã¹ã¿ã³ã¹ã®æ
å ±ãå
ã«ã以äžã®å€ãèšå® /cloudsql/{ãããžã§ã¯ãå}:{ãªãŒãžã§ã³}:{ã€ã³ã¹ã¿ã³ã¹ã®åå} INSTANCE_CONNECTION_NAME Cloud SQL ã® ã€ã³ã¹ã¿ã³ã¹æ¥ç¶å Google Cloud ã³ã³ãœãŒã«ã® Cloud SQL ã€ã³ã¹ã¿ã³ã¹äžèЧç»é¢ãã確èªå¯èœ DB_NAME Cloud SQL ã€ã³ã¹ã¿ã³ã¹ã«äœæããããŒã¿ããŒã¹ã®åå DB_USER äœæããããŒã¿ããŒã¹ãŠãŒã¶ãŒã®åå DB_PASS äœæããããŒã¿ããŒã¹ãŠãŒã¶ãŒã®ãã¹ã¯ãŒã Cloud SQL ã®ã€ã³ã¹ã¿ã³ã¹æ¥ç¶å Cloud Run ãµãŒãã¹ã®ç°å¢å€æ°ãèšå® ã³ãŒãå
ã³ã¡ã³ãã«èšèŒãããéããããŒã¿ããŒã¹ã®æ¥ç¶æ
å ±ãããã»ãã¥ã¢ã« Cloud Run ã«æž¡ãããå Žåã¯ã Secret Manager ã䜿çšããããšãã§ããŸãã æ¥ç¶ãã Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãèšå®ãã ã³ã³ãããæ¥ç¶ãã»ãã¥ãªã㣠é
ç®ã® æ¥ç¶ ã¿ããéãã Cloud SQL æ¥ç¶ ã§ç°å¢å€æ°ã«èšå®ãããã®ãšåã ã€ã³ã¹ã¿ã³ã¹æ¥ç¶å ãéžæããŸãã ããã«ãããCloud Run ãµãŒãã¹ã§ Cloud SQL Auth Proxy ãæå¹åããããããã·ãçšããããŒã¿ããŒã¹æ¥ç¶ãå¯èœã«ãªããŸãã æ¥ç¶ãã Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãèšå® ãµãŒãã¹ã¢ã«ãŠã³ããèšå®ãã ã³ã³ãããæ¥ç¶ãã»ãã¥ãªã㣠é
ç®ã® ã»ãã¥ãªã㣠ã¿ãã§ Cloud SQL ã€ã³ã¹ã¿ã³ã¹ãžã®æ¥ç¶ãèš±å¯ãããµãŒãã¹ã¢ã«ãŠã³ããèšå®ããŸãã ãµãŒãã¹ã¢ã«ãŠã³ããèšå® ãããŸã§èšå®ããã äœæ ãæŒäžã㊠Cloud Run ãµãŒãã¹ãäœæããŸãã ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã®åäœç¢ºèª ãã©ãŠã¶ãã Cloud Run ãµãŒãã¹ã® URL ã«ã¢ã¯ã»ã¹ãããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ãåãããŠã¿ãŸãã ãã©ãŠã¶ãããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ åœèšäºã§äœ¿çšãããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã TAB ãš SPACE ã®ã©ã¡ããã«æç¥šããããšã§ãæç¥šçµæãããŒã¿ããŒã¹ã«èšé²ãããããã«ãªã£ãŠããŸãã ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã®ç»é¢ æç¥šãã¿ã³ãäœåºŠãæŒäžããŸãã æç¥šãããã³ã«æ°åãå ç®ããã ããŒã¿ããŒã¹ã«æç¥šçµæãä¿æãããŠããã確èªãããããCloud Run ãµãŒãã¹ã®ã³ã³ããããã¹ãŠç Žæ£ãããã®ãåŸ
ã£ãŠãããããäžåºŠ URL ã«ã¢ã¯ã»ã¹ããŸãã ãµãŒãã¹ã®è©³çް ã® ææš ã¿ããã ã³ã³ãã ã€ã³ã¹ã¿ã³ã¹æ° ã確èªã§ããŸãã active ãš idle ã®å€ã 0 ã«ãªããŸã§å°ãåŸ
ã¡ãŸãã ã³ã³ãã ã€ã³ã¹ã¿ã³ã¹æ°ã 0 ã«ãªã£ãããšãç¢ºèª 2 ã€ã®å€ã 0 ã«ãªã£ãããããäžåºŠãµãŒãã¹ã® URL ã«ã¢ã¯ã»ã¹ããŸãã ãã®ãšããå
çšãšã¯å¥ã®ã³ã³ãããèµ·åãããŸãããæç¥šçµæã¯ããŒã¿ããŒã¹åŽã§ä¿æãããŠãããããæç¥šåŸãšåãæç¥šæ°ãç»é¢ã«è¡šç€ºãããŸãã äœã
æš é§¿å€ª (èšäºäžèЧ) G-genæå端ãåæµ·éåšäœã®ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšãšã³ãžã㢠2022幎6æã«G-genã«ãžã§ã€ã³ãGoogle Cloud Partner Top Engineer 2025 Fellowã«éžåºã奜ããªGoogle Cloudãããã¯ãã¯Cloud Runã è¶£å³ã¯ã³ãŒããŒãå°èª¬ïŒSFããã¹ããªïŒãã«ã©ãªã±ãªã©ã Follow @sasashun0805
G-gen ã®ææã§ããInfrastructure as Code (IaC) ãå®çŸãã Terraform ã Google Cloud (æ§ç§° GCP) ã§äœ¿ã£ãŠã¿ãŸããã Terraform ãšã¯ 䜿ã£ãŠã¿ã Cloud Shell Terraform ã³ãã³ãã®ç¢ºèª ãã¡ã€ã«äœæ ãšãã£ã¿ã§ã®ç·šé Terraform åæå 確èªã³ãã³ã é©çš ç°å¢ã®åé€ Cloud Storage ã«ç¶æ
(state) ãä¿åãã åæç¥è ç¶æ
(state) ãšã¯ ç¶æ
(state) ã®å
±æ ãã±ããã®äœæ ããã¯ãšã³ãæ§æã®äœæ å init å¿çš Terraform ãšã¯ Terraform 㯠Infrastructure as Code (IaC) ãå®çŸãããªãŒãã³ãœãŒã¹ (Mozilla Public License v2.0) ã®ããŒã«ã§ãã Google Cloud (æ§ç§° GCP) ã®ã»ã Amazon Web Services (AWS) ã Microsoft Azure ã«ã察å¿ããŠããã IaC ããŒã«ãšããŠæ ¹åŒ·ã人æ°ãèªããŸãã Terraform ã§ã¯ç¬èªãã©ãŒãããã®èšå®ãã¡ã€ã«ã§ãªãœãŒã¹ãèšè¿°ããã³ãã³ãã©ã€ã³ããŒã«ã§æäœããŸãããŸãç¶æ
(state) ããã¡ã€ã«ãšããŠä¿åãããå®ç°å¢ãšèšå®ãã¡ã€ã«ã®å·®åãææ¡ãããŸãã èšå®ãã¡ã€ã«ã§ã¯ã©ãŠãã€ã³ãã©ã管çã§ããããã IT ã€ã³ãã©ã®ããŒãžã§ã³ç®¡çã CI/CD (ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ / ç¶ç¶çããªããª) ãå¯èœã«ããŸãã Google Cloud ã§ã¯å
¬åŒã® IaC ããŒã«ãšã㊠Cloud Deployment Manager ãååšããŠãããã®ã®ãäºå®äž Terraform ã Google Cloud ã® IaC ããŒã«ãšããŠå®çããŠããŸãã 䜿ã£ãŠã¿ã Cloud Shell Google Cloud ã® Web ã³ã³ãœãŒã«ã«ã¯ Cloud Shell ãåãã£ãŠãããããŒã«ã« PC ã«ããŒã«ãã€ã³ã¹ããŒã«ãããäœæ¥çšã® VM ãèµ·åããªããŠããã©ãŠã¶äžã§ Linux ããŒã¹ã®äœæ¥ã¹ããŒã¹ã䜿ãããšãã§ããŸãã Google Cloud ã³ã³ãœãŒã« ã«ãã°ã€ã³ããå³äžã®åè§ãã¢ã€ã³ã³ãã¯ãªãã¯ããŸã (ããŠã¹ãªãŒããŒãããš Cloud Shell ãã¢ã¯ãã£ãã«ãã ãšè¡šç€ºãããŸã) ã Cloud Shell ãèµ·å å§ããŠèµ·åããå Žå㯠1 åçšåºŠåŸ
ã€å¿
èŠããããããããŸãããã2åç®ä»¥éã¯æ°ç§çšåºŠã«ãªããŸãããã°ãããããšé»ãã¿ãŒããã«ç»é¢ãåºãŠããŸãã 以äžã¹ã¯ãªãŒã³ã·ã§ããã®èµ€æ éšåããã©ãã°ããŠäžäžã«åãããšãã¿ãŒããã«ç»é¢ã®ãµã€ãºãå€ããããšãã§ããŸãã ã¿ãŒããã«ç»é¢ Terraform ã³ãã³ãã®ç¢ºèª å®ã¯ Cloud Shell ã«ã¯ããã©ã«ãã§ Terraform ãã€ã³ã¹ããŒã«æžã¿ã§ãã terraform --version ãšå
¥åããŠãšã³ã¿ãŒãæŒããŠã¿ãŠãã ããã $ terraform --version Terraform v1. 2 . 8 on linux_amd64 Your version of Terraform is out of date! The latest version is 1 . 2 . 9 . You can update by downloading from https://www.terraform.io/downloads.html ããããŒã«ã« PC ã« Terraform ãã€ã³ã¹ããŒã«ãããå Žåã å
¬åŒãµã€ã çããåç
§ãã ããã ãã¡ã€ã«äœæ ãã©ã«ããäœã£ãŠãã®äžã« Terraform èšå®ãã¡ã€ã«ãäœæããŸãã ããã§ã¯ Cloud Storage ãã±ãããå®çŸ©ããããã® storage.tf ãšãããã¡ã€ã«ãäœæããŸãããã¡ã€ã«åã¯ä»»æã§ãã mkdir terraform-demo cd terraform-demo touch storage.tf ãšãã£ã¿ã§ã®ç·šé ãªããš Cloud Shell ã«ã¯ ãã©ãŠã¶äžã§åäœããã³ãŒããšãã£ã¿ãŸã§ä»å±ããŠããŸãããšãã£ã¿ãéãããã以äžã¹ã¯ãªãŒã³ã·ã§ããã® ãšãã£ã¿ãéã ãã¿ã³ãæŒäžããŸãã ãšãã£ã¿ãéã å·ŠåŽã®ãã¡ã€ã«ãšã¯ã¹ãããŒã©ããå
çšã® storage.tf ãéžæããç·šéããŸãã ãšãã£ã¿ç»é¢ 以äžã®èšå®å
容ã貌ãä»ããŠãä¿å ( File ã¡ãã¥ãŒãã Save ããã㯠Ctrl + S æŒäž) ããŸãã <ä»»æã®ãªãœãŒã¹å> ã¯ä»»æã®åç§°ã«çœ®ãæããŠãã ããããã㯠Terraform å
ã§ãªãœãŒã¹ãäžæã«ç¹å®ããããã®èå¥åã§ãããã®å·ŠåŽã«ãã "google_storage_bucket" ã¯ãã®ãªãœãŒã¹ã®çš®é¡ã衚ããŸãã ãŸã <ãã±ããå> ãäžçã§äžæã«ãªãããã«çœ®ãæããŠãã ãããããã Cloud Storage ãã±ããåãšãªããŸãã resource "google_storage_bucket" "<ä»»æã®ãªãœãŒã¹å>" { name = "<ãã±ããå>" location = "asia-northeast1" force_destroy = true uniform_bucket_level_access = true lifecycle_rule { condition { age = 5 } action { type = "Delete" } } } äžèšã¯ä»¥äžã®ãã㪠Cloud Storage ãã±ãããå®çŸ©ããèšå®ã§ãã èšå®å å€ ãã±ããå <ãã±ããå> ãã±ãŒã·ã§ã³ asia-northeast1 (æ±äº¬) force_destroy æå¹ (ãã±ããå逿ã«ãªããžã§ã¯ããæ®ã£ãŠãããäžèº«ãå
šãŠåé€ããŠãããã±ããåé€) åäžãªã¢ã¯ã»ã¹å¶åŸ¡ æå¹ ã©ã€ããµã€ã¯ã« 5 æ¥ã§åé€ ãªãœãŒã¹ã¿ã€ãããšã«ãã©ã¡ãŒã¿ã®èšå®æ¹æ³ãå®çŸ©ãããŠãã Terraform ã®å
¬åŒãªãã¡ã¬ã³ã¹ãã確èªå¯èœã§ãã åè : google_storage_bucket Terraform åæå 次ã«ãã³ãã³ããå®è¡ã㊠Terraform ã®åæåãè¡ããŸãããšãã£ã¿ã®ç·šééšåäžéšã«çœãã¿ãŒããã«ã衚瀺ãããŠããŸãã®ã§ãããããã³ãã³ããå®è¡ãããããšãã£ã¿äžéšã® ã¿ãŒããã«ãéã ãã¿ã³ãæŒããŠå
çšã®é»ãã¿ãŒããã«ã«æ»ãããšãã§ããŸãã terraform init ã³ãã³ããå®è¡ããŠãã ããã Terraform has been successfully initialized! ãšè¡šç€ºããããæåã§ãã terraform init ã®å®è¡ ãã®ã³ãã³ããå®è¡ãããšãã«ã¬ã³ããã£ã¬ã¯ããªã®é
äžã«ãã *.tf ãèªåçã«èªã¿èŸŒãŸããå¿
èŠãªãã¡ã€ã«ãã»ããã¢ãããããŸãã ä»åã¯ãªãœãŒã¹ã¿ã€ãã google_storage_bucket ã®ãªãœãŒã¹ãå®çŸ©ãããŠããã®ã§ãèªåçã« Google çšã® ãããã€ã ãããŠã³ããŒããããŠã»ããã¢ãããããŸãããããã€ããšã¯ Terraform æ¬äœãšã¯å¥åã®ãã€ããªã§ãã AWS ã Google Cloud ãªã©å¯Ÿå¿ãããã©ãããã©ãŒã ããšã«ååšããŠããŸãã ls -la ã³ãã³ããå®è¡ãããšã以äžã®ããã« . ããå§ãŸãé ããã¡ã€ã«ãçæãããŠããããšãåãããŸãã $ ls -la total 20 drwxr-xr-x 3 sugimura sugimura 4096 Sep 19 02:04 . drwxr-xr-x 27 sugimura 1001 4096 Sep 19 01:19 .. -rw-r--r-- 1 sugimura sugimura 294 Sep 19 01:02 storage.tf drwxr-xr-x 3 sugimura sugimura 4096 Sep 19 02:04 .terraform -rw-r--r-- 1 sugimura sugimura 1155 Sep 19 02:04 .terraform.lock.hcl 確èªã³ãã³ã 次㯠terraform plan ã³ãã³ããå®è¡ããŸããã«ã¬ã³ããã£ã¬ã¯ããªã«ãã *.tf èšå®ãã¡ã€ã«ãç°å¢ã«ã©ã®ãããªåœ±é¿ãåãŒãããäºåã«ç¢ºãããããã®ã³ãã³ãã§ãã $ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_storage_bucket.ggen-test-storage will be created + resource " google_storage_bucket " " ggen-test-storage " { + force_destroy = true + id = ( known after apply ) + location = " ASIA-NORTHEAST1 " + name = " ggen-test-storage " + project = ( known after apply ) + self_link = ( known after apply ) + storage_class = " STANDARD " + uniform_bucket_level_access = true + url = ( known after apply ) + lifecycle_rule { + action { + type = " Delete " } + condition { + age = 5 + matches_prefix = [] + matches_storage_class = [] + matches_suffix = [] + with_state = ( known after apply ) } } } Plan: 1 to add, 0 to change, 0 to destroy. ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ Note: You didn ' t use the -out option to save this plan, so Terraform can ' t guarantee to take exactly these actions if you run " terraform apply " now. Plan: 1 to add, 0 to change, 0 to destroy. ã¯ç°å¢ã«æ°ãããªãœãŒã¹ãäœæãããããšãæå³ããŠããŸãã å®éã«ãªãœãŒã¹ãäœæãããæŽæ°ããåã«æ¯å terraform plan ãå®è¡ããããšã§ãæå³ããªã倿Žã«äºåã«æ°ãã€ãããšãã§ããŸãã é©çš å®éã«ãªãœãŒã¹ãäœæãããã terraform apply ãå®è¡ããŸãã å®è¡ãããš plan ãå®è¡ãããšããšåããããªç°å¢å·®åã®è¡šç€ºã«å ããŠä»¥äžã®ããã³ããã衚瀺ãããŸãã Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes ãå
¥åã㊠Enter ãæŒäžãããšãå®éã«ç°å¢ã«é©çšãããŸãã Apply complete! Resources: 1 added, 0 changed, 0 destroyed. ã衚瀺ãããã°æåã§ãã Cloud Storage ã®ã³ã³ãœãŒã«ç»é¢ã§ããã±ãããäœæãããããšã確èªããŠãã ãããã©ã€ããµã€ã¯ã«ããªã·ãŒãèšå®ãããŠããã¯ãã§ãã ç°å¢ã®åé€ ç°å¢ãåé€ããå Žå㯠terraform destroy ãå®è¡ããŸãã å
çšãšåãããã«ããã³ããã衚瀺ãããŸãã®ã§ yes ãå
¥åã㊠Enter ãæŒäžããŸããããã§ç°å¢ãåé€ãããŸãã Cloud Storage ã«ç¶æ
(state) ãä¿åãã åæç¥è ç¶æ
(state) ãšã¯ Terraform ã® ç¶æ
(state) ãšã¯ Terraform ãææ¡ããŠããå®ç°å¢ã®çŸåšã®ç¶æ
ã§ãã Terraform 㯠state ããã¡ã€ã«ãšããŠä¿æããŸãã ãç¶æ
ããã¡ã€ã«ãšããŠä¿æãããåžžã«å®ç°å¢ãèŠãŠãããã°ããã®ã«ãããããªããšãã¡ã€ã«ãšå®ç°å¢ã®å·®ç°ãçãŸããŠããŸãã®ã§ã¯ããšèãã人ããããããããŸãããããããè€æ°ãªãœãŒã¹ã®äŸåé¢ä¿ãä¿æããããèšå®ãã¡ã€ã«ãšå®ãªãœãŒã¹ã®ãããã³ã°ãä¿æããããæ¯åå®ç°å¢ã粟æ»ãããšå€æ°ã® API ã³ãŒã«ãèµ°ããªãœãŒã¹ãå€ãå Žåã«åŠçãéãããããªã©ã®çç±ã§ Terraform 㯠state ããã¡ã€ã«ãšããŠä¿æããŠããŸã ( åè ) ã state 㯠tfstate ãã¡ã€ã« ãšããŠä¿ç®¡ãããå
çšã®æé ã§å®è¡ãããšãã¡ã€ã«ã¯ããŒã«ã« (Cloud Shell) ã«ä¿åãããŸããããããŒã«ã« PC ã§ Terraform ãå®è¡ããããããŒã«ã« PC ã«ä¿ç®¡ãããŸãã ç¶æ
(state) ã®å
±æ ããããããã§ã¯è€æ°äººã§ Terraform èšå®ãã¡ã€ã«ã管çããå Žåã«åé¡ãçããŸãã 誰ãã®ããŒã«ã«ã® tfstate ãã¡ã€ã«ãä¿åãããŠããã®ã§ã¯ããã®äººãæ¯å terraform plan terraform apply ããå¿
èŠãåºãŠããŸããããã§ã¯ããŒã éçºã CI/CD ã¯å®çŸã§ããŸããã ããã解決ãããã tfstate ãã¡ã€ã«ããªã¢ãŒã管çããããšãã§ããŸãã Google Cloud ã§ã¯ Cloud Storage ãã±ãã ã« tfstate ãã¡ã€ã«ãä¿ç®¡ãããããå
±æããããšãã§ããŸãã å®éã«ãã£ãŠã¿ãŸãã ãã±ããã®äœæ tfstate ãã¡ã€ã«ãä¿åããããã®ãã±ãããæåã§äœæããŠãããŸãã ãã®ãã±ããã Terraform ã§äœæããŠãæ§ããŸããããããã Terraform ã®ç®¡çã«äœ¿ããããã¡ã€ã«ãä¿ç®¡ãããã±ããã Terraform ã§ç®¡çãããã¹ãã§ã¯ãªãããšããèãæ¹ãã§ãããããä»åã¯æåã§äœæããããšã«ããŸãã ããã¯ãšã³ãæ§æã®äœæ 以äžã®ãããªãã¡ã€ã«ã backend.tf ãšããŠæ°èŠäœæããå
çšäœæãã storage.tf ãšåããã£ã¬ã¯ããªã«é
眮ããŸãã terraform { backend "gcs" { bucket = "ggen-terraform-demo" prefix = "terraform/state" } } å init terraform init ãå®è¡ããŸãã Terraform has been successfully initialized! ãšãã衚瀺ãåºããæåã§ãã ãã±ããã®äžèº«ãèŠãŠã¿ããš terraform/state ãã©ã«ãã®äžã« tfstate ãã¡ã€ã«ãçæãããŠããã¯ãã§ãã ãã±ããå
ã® tfstate ãã¡ã€ã« ãã以é㯠terraform plan ã terraform apply ãå®è¡ãããã³ã«ææ°ã®ç¶æ
ããã±ããããååŸããã apply ã«ããç°å¢ãæŽæ°ããããšãã±ããäžã® tfstate ãã¡ã€ã«ãæŽæ°ãããŸãã ããã«å ã㊠Terraform èšå®ãã¡ã€ã«ã Git çã§ããŒãžã§ã³ç®¡çããããšã§ãè€æ°äººã«ããéçºã»ç®¡çãå¯èœã«ãªããŸãã å¿çš 以äžã¯ãGoogle Cloud ãå
¬åŒã«æ²èŒããŠãããTerraform ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹ã«é¢ããããã¥ã¡ã³ãã§ãã å®ç°å¢ã§ Terraform ãéçšããŠããã«ãããã圹ã«ç«ã€ãã¹ããã©ã¯ãã£ã¹ãèšèŒãããŠããŸãã åè : Terraform ã䜿çšããããã®ãã¹ã ãã©ã¯ãã£ã¹ ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãX (æ§ Twitter) ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
ä»åã¯ãSecurity Command Center ããæ€åºãããè
åšã Slack ã«éç¥ããããç¹å®ã®æ€åºæ©èœã«ãããŠã¯èªåã§ä¿®åŸ©ããä»çµã¿ãå®è£
ããŠã¿ãããšæããŸãã æŠèŠ Security Command Centerãšã¯ äœæãããã® äœæã®æé Pub/Sub ãããã¯ãäœæ ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ Cloud Functions ã®äœæ main.py ã®å
容 requirements.txt ã®å
容 ããªã·ãŒã®æŽæ°æé ããªã·ãŒã®æŽæ°æé get_iam_policy set_iam_policy åäœç¢ºèª "@gmail.com" ã«åäžã®ããŒã«ãçŽã¥ããæ "@gmail.com" ã«è€æ°ã®ããŒã«ãçŽã¥ããæ æ€åºæ©èœããNON_ORG_IAM_MEMBERã以å€ã®æ æŠèŠ Security Command Centerãšã¯ Security Command Center ãšã¯ãGoogle Cloud ç°å¢ã®æ§æãã¹ãè匱æ§ãè
åšãç¹å®ããŠãã»ãã¥ãªãã£åŒ·åã»ãªã¹ã¯è»œæžãããããã®ãµãŒãã¹ã§ãã Security Command Center ã«ã€ããŠã¯ã以äžã®èšäºã§è©³ãã解説ãããŠããããäºåã«ã芧ããã ãããšå¹žãã§ãã blog.g-gen.co.jp ãŸãçè
ã®ç°å¢ã¯ãSecurity Command Center ã® ã¹ã¿ã³ããŒã ãã£ã¢ ãçµç¹ãšçµç¹é
äžã®ãããžã§ã¯ãã§ãã¹ãŠæå¹åãããç¶æ
ã§ãã®ã§ããŸã æå¹åãããŠããªãæ¹ã¯äºåã«ä»¥äžãåèã«Security Command Center ãæå¹åããŠããã ããŸããšå¹žãã§ãã https://cloud.google.com/security-command-center/docs/set-up?hl=ja äœæãããã® Security Command Center ããæ€åºæ©èœã®äžã§ãéèŠåºŠãã é倧 ããŸãã¯ã é« ãã®ãã®ã察象㫠Slack ã«æšå¥šäºé
ïŒæ¹åçïŒãšãšãã«æ€åºçµæãéç¥ããŸãã äžèšã¯ããã¡ãã®ãã¥ãŒããªã¢ã«ãåèã«ããŸããã cloud.google.com ãŸããæ€åºæ©èœã®äžã§ã ç¹å®ã®æ€åºæ©èœ ãæ€åºãããæã èªåã§ä¿®åŸ©ããä»çµã¿ ãå®è£
ããŸãã ä»åããã¯ã¢ããããæ€åºæ©èœã¯ãã NON_ORG_IAM_MEMBER ãã§ãããã¡ãã¯ãçµç¹å
ã§ "@gmail.com" ã¡ãŒã«ã¢ãã¬ã¹ã®ã¢ã«ãŠã³ãã« IAM æš©éãçŽã¥ããããŠããå Žåã«ããªã¢ã«ã¿ã€ã ã«æ€åºãããŸãã ãNON_ORG_IAM_MEMBERããæ€åºãããéã¯ã察象㮠"@gmail.com" ã®ãŠãŒã¶ãŒã«çŽã¥ããããããŒã«ãèªåã§åé€ããŠãåé€çµæã Slack ã«ãŠå ±åããã¹ã¯ãªãããèšè¿°ããCloud Functions ã§å®è£
ããŠãããããšæããŸãã äœæã®æé æé ãšããŠã¯ã倧ãã以äžã®3ã€ãšãªããŸãã Pub/Sub ãããã¯ãäœæ ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ Cloud Functions ãæ§æ Pub/Sub ãããã¯ãäœæ Cloud Shell ãèµ·åããŠãCloud Pub/Sub ãããã¯ãèšå®ããŠãããŸãã äžèšã®èµ€æ ãã¯ãªãã¯ãããš Cloud Shell ãèµ·åããŸãã®ã§ãCloud Shell ã¿ãŒããã«ãã以äžãå®è¡ããŸãã # ç°å¢å€æ°ã« Google Cloud ãããžã§ã¯ã ãæå® export PROJECT_ID =PROJECT_ID # ç°å¢å€æ°ã« Google Cloud çµç¹ãæå® export ORG_ID =ORG_ID # gcloud ã³ãã³ãã«ãããžã§ã¯ã ID ãèšå® gcloud config set project PROJECT_ID # éç¥ããããªãã·ã¥ãã Pub/Sub ãããã¯ãäœæ gcloud pubsub topics create scc-critical-and-high-severity-findings-topic # ç°å¢å€æ°ã«ãããã¯ãæå® export TOPIC =projects/ $PROJECT_ID /topics/scc-critical-and-high-severity-findings-topic # ã¡ãã»ãŒãžããããã¯ã«ãããªãã·ã¥ããããšãã«ã Cloud Functions ã«éç¥ãããµãã¹ã¯ãªãã·ã§ã³ãäœæ gcloud pubsub subscriptions create scc-critical-and-high-severity-findings-sub --topic scc-critical-and-high-severity-findings-topic # ãããã¯ã«éç¥ããããªãã·ã¥ããããã«ãSecurity Command Center ãæ§æ (ãã£ã«ã¿æ©èœãçšããŠãéèŠåºŠããé倧ããšãé«ãã®ã¢ã¯ãã£ããªæ€åºçµæã«é¢ããéç¥ããããªãã·ã¥) gcloud scc notifications create scc-critical-and-high-severity-findings-notify --pubsub-topic $TOPIC --organization $ORG_ID --filter " (severity= \" HIGH \" OR severity= \" CRITICAL \" ) AND state= \" ACTIVE \" " ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ Cloud Functions ã«çŽã¥ããµãŒãã¹ã¢ã«ãŠã³ããäœæããŠãããŸãã IAM ãšç®¡ç ïŒ ãµãŒãã¹ã¢ã«ãŠã³ã ãžç§»å ãµãŒãã¹ã¢ã«ãŠã³ããäœæ ãã¯ãªã㯠ãCloud Functions èµ·åå
ããšãPub/Sub ãµãã¹ã¯ã©ã€ããŒãããProject IAM 管çè
ãã®ããŒã«ãã¢ã¿ãã å®äº ãã¯ãªã㯠Cloud Functions ã®äœæ Cloud Functions ãäœæããŠãããŸãã Cloud Functions ãžç§»å 颿°ã®äœæ ãã¯ãªã㯠ããªã¬ãŒ ã«ãCloud Pub/Subããããããã¯ã«å
çšäœæããã${TOPIC}ããéžæ ãµãŒãã¹ã¢ã«ãŠã³ã ã«å
çšäœæããã${ãµãŒãã¹ã¢ã«ãŠã³ã}ããå
¥å ç°å¢å€æ°ã« Slack Webhook ã®URLãå
¥å Slack Webhook URL ã®çºè¡æé 㯠ãã¡ã ãåèã«ããŸããã æ¬¡ãž ãã¯ãªã㯠ã©ã³ã¿ã€ã ã« Python 3.9 ãéžæãããšã³ããªãã€ã³ãããsend_slack_chat_notificationããšå
¥å main.py ãšrerequirements.txt ã®ãã¡ã€ã«ããããã以äžã®ã³ãŒãã«æžãæãã[ãããã€]ãã¯ãªã㯠main.py ã®å
容 import base64 import json import os import slackweb from google.cloud import resourcemanager_v3 from google.iam.v1 import iam_policy_pb2 # type: ignore # ç°å¢å€æ°ãã SLACK_WEB_HOOK_URL ãååŸ SLACK_WEB_HOOK_URL = os.environ.get( "SLACK_WEB_HOOK_URL" ) # slack ã¯ã©ã€ã¢ã³ãã®åæå slack = slackweb.Slack(url=SLACK_WEB_HOOK_URL) # ProjectsClient ã¯ã©ã€ã¢ã³ãã®åæå client = resourcemanager_v3.ProjectsClient() def send_slack_chat_notification (event, context): # SCC ããåãåã£ãããŒã¿ã json 圢åŒã§å±é pubsub_message = base64.b64decode(event[ 'data' ]).decode( 'utf-8' ) message_json = json.loads(pubsub_message) finding = message_json[ 'finding' ] # ã«ããŽãªãŒïŒæ€åºæ©èœïŒãšã¬ã³ã¡ã³ãïŒæ¹åçïŒãååŸ category = finding[ 'category' ] recommendation = finding[ 'sourceProperties' ][ 'Recommendation' ] # æ€åºæ©èœããNON_ORG_IAM_MEMBERãã®æã"@gmail.com" ã®å¯Ÿè±¡ãŠãŒã¶ãŒã«çŽã¥ããããŠããããŒã«ãåé€ãã if category == "NON_ORG_IAM_MEMBER" : # ãããžã§ã¯ãIDãšã¡ã³ããŒã®ã¡ãŒã«ã¢ãã¬ã¹ãçŽã¥ããããããŒã«ã®æ
å ±ãååŸ project_id = finding[ 'sourceProperties' ][ 'ResourcePath' ][ 0 ].split( '/' )[ 1 ] member = finding[ 'sourceProperties' ][ 'OffendingIamRolesList' ][ 0 ][ 'member' ] roles = [] for i in range ( len (finding[ 'sourceProperties' ][ 'OffendingIamRolesList' ][ 0 ][ 'roles' ])): roles.append(finding[ 'sourceProperties' ][ 'OffendingIamRolesList' ][ 0 ][ 'roles' ][i]) # 察象ã¡ã³ã㌠(@gmail.com) ãçŽä»ãããŒã«ããã察象ã¡ã³ããŒãåé€ãã颿°ãå®è¡ modify_policy_remove_member(project_id, roles, member) # åé€çµæã Slack ã§éç¥ slack.notify(text=f "ãã»ãã¥ãªãã¯ãªã¹ã¯æ€åºã \n {category} \n ãå ±åã \n project_id:{project_id} ã«@gmailãå«ããŠãŒã¶ãŒã远å ãããããšãæ€ç¥ããããã察象ãŠãŒã¶ã«ä»äžãããããŒã«ãèªåçã«åé€ããŸãã \n ã察象ãŠãŒã¶ã \n {member} \n ãåé€ããããŒã«ã \n {roles} " ) return else : # æ€åºæ©èœããNON_ORG_IAM_MEMBERã以å€ã®æãæ€åºæ©èœãšã¬ã³ã¡ã³ãïŒæ¹åçïŒã®æ
å ±ã Slack ã§éç¥ slack.notify(text=f "ãã»ãã¥ãªãã¯ãªã¹ã¯æ€åºã \n {category} \n ãæšå¥šäºé
ã \n {recommendation}" ) return def modify_policy_remove_member (project_id, roles, member): # ãããžã§ã¯ãå
ã®å
šãŠã®ã¢ã¯ãã£ããªããŒã«ãååŸ iam_policy = get_iam_policy(project_id) # roles ãªã¹ãã«ãã role ã®æ°ã ãåŠçãåã for i in range ( len (roles)): # iam_policy ã®äžã®ããŒã«ãšãåŒæ°ã§åãåã£ãããŒã«ãåãå Žåã察象㮠bindings ãååŸ bindings = next (b for b in iam_policy.bindings if b.role == roles[i]) # bindings ã®äžã«ãåŒæ°ã§åãåã£ãã¡ã³ããŒïŒ"@gmail.com"ïŒãå«ãŸããå Žåãåãé€ã if bool (bindings.members) and member in bindings.members: bindings.members.remove(member) # äžèšã§ä¿®æ£ããããªã·ãŒãããããžã§ã¯ãã®æ°ããªã·ãŒãšããŠäžæžããã set_iam_policy(project_id, iam_policy) return def get_iam_policy (project_id): # 察象ãããžã§ã¯ãå
ã® IAM Policy ã®ååŸ request = iam_policy_pb2.GetIamPolicyRequest( resource=f "projects/{project_id}" ) iam_policy = client.get_iam_policy(request=request) return iam_policy def set_iam_policy (project_id, iam_policy): # 察象ãããžã§ã¯ãå
ã® IAM Policy ãäžæžã request = iam_policy_pb2.SetIamPolicyRequest( resource=f "projects/{project_id}" , policy=iam_policy, ) response = client.set_iam_policy(request=request) return requirements.txt ã®å
容 slackweb==1.0.5 requests==2.28.1 google - cloud - resource - manager==1.6.1 grpc - google - iam - v1==0.12.4 ããªã·ãŒã®æŽæ°æé "@gmail.com" ã®å¯Ÿè±¡ãŠãŒã¶ãŒã«çŽã¥ããããŠããããŒã«ãåé€ããä»çµã¿ã¯ã以äžã®æµãã§è¡ãããŠããŸãã ããªã·ãŒã®æŽæ°æé æ¢åã®ããªã·ãŒã®ååŸ ïŒ get_iam_policy ïŒ ããªã·ãŒã®å€æŽ ïŒ modify_policy_remove_member ïŒ ããªã·ãŒå
šäœã®æžãèŸŒã¿ ïŒ set_iam_policy ïŒ 2 ããªã·ãŒã®å€æŽæã«ã"@gmail.com" ã®å¯Ÿè±¡ãŠãŒã¶ãŒã«çŽã¥ããããŠããããŒã«ãåé€ããŠããŸãã get_iam_policy get_iam_policy ã§ååŸã§ããããŒã¿ã¯ä»¥äžã®ãããªåœ¢åŒã§ãã version: 1 bindings { role: " roles/bigquery.admin " members: " user:hogehoge@gmail.com " members: " user:matayuuu@g-gen.co.jp " } bindings { role: " roles/owner " members: " user:matayuuu@g-gen.co.jp " } ã» ã» ã» etag: " \007\005\351\264\211 C \021\344 " 察象ã®ãããžã§ã¯ãå
ã§ã¢ã¯ãã£ããªããŒã«ã«çŽã¥ãã¡ã³ããŒã bindings ãšããŠååŸã§ããŸãã ãŸãã etag ã¯ããªã·ãŒãæŽæ°ããããã³ã«å€æŽãããããã ããªã·ãŒã®æžãèŸŒã¿æã®ç«¶å鲿¢ ã«äœ¿ãããŠããŸãïŒ åè ïŒã set_iam_policy get_iam_policy ã§ååŸã§ããããŒã¿ã®äžéšã倿ŽããŠãset_iam_policy ã§ããªã·ãŒãæŽæ°ã§ããŸãã ä»®ã«ã hogehoge@gmail.com ã®ãŠãŒã¶ãŒãã "roles/bigquery.admin" ã®ããŒã«ãåé€ãããšãããšã以äžã®ããã«ãªããŸãã version: 1 bindings { role: " roles/bigquery.admin " members: " user:matayuuu@g-gen.co.jp " } bindings { role: " roles/owner " members: " user:matayuuu@g-gen.co.jp " } ã» ã» ã» etag: " \007\005\351\264\211 C \021\344 " äžèšã®ç¶æ
ã§ãset_iam_policy ãããããšã§ã etag ã®äžèº«ã get_iam_policy ã§ååŸãããšããšåã ã§ããã°æ°ããããªã·ãŒãšããŠäžæžãã æå ããŸãã éã«ãetag ã®äžèº«ã get_iam_policy ã§ååŸãããšããšå€ãã£ãŠããã°ãèªåã get_iam_policy ããåŸã« ä»ã®èª°ããããªã·ãŒã倿ŽããŠäžæžãããŠãã ããæŽæ°ã 倱æ ãšãªããŸãïŒç«¶åã®çºçïŒã ãã®å Žåã¯ãå床 get_iam_policy ããŠããããã®å
容ã«å€æŽãå ã㊠set_iam_policy ããæµãã«ãªããŸãã åäœç¢ºèª "@gmail.com" ã«åäžã®ããŒã«ãçŽã¥ããæ IAM ãšç®¡ç ïŒ IAM ããã"@gmail.com" ãŠãŒã¶ãŒã« ä»»æã®ããŒã«ãçŽã¥ãããèªåã§çŽã¥ããããŒã«ãåé€ãããã確èªããŸãã ä¿å ãã¯ãªãã¯ããã¿ã€ãã³ã°ã§ãSlack ã«ä»¥äžã®éç¥ãå±ããŸããã "@gmail.com" ãŠãŒã¶ãŒã®ããŒã«ãäžæãåé€ã§ããéãåé€ããããšãå ±åããå
容ã Slack ã«å±ããŸãã 念ã®çºã IAM ãšç®¡ç ïŒ IAM ã§ã â@gmail.com" ã®ãŠãŒã¶ãŒã«ããŒã«ãçŽä»ããŠããªãã確èªããŸããããåé¡ãªãåé€ãããŠãããŸããã "@gmail.com" ã«è€æ°ã®ããŒã«ãçŽã¥ããæ æ¬¡ã«ãäžäººã®ãŠãŒã¶ãŒã«å¯ŸããäžåºŠã«è€æ°ã®ããŒã«ãçŽã¥ããéã®æåã確èªããŠãããããšæããŸãã å
çšãšåæ§ã "@gmail.com" ãŠãŒã¶ãŒã«ä»»æã®ããŒã«ãè€æ°çŽã¥ããŸãã ä¿å ãã¯ãªãã¯ããã¿ã€ãã³ã°ã§ãSlack ã«ä»¥äžã®éç¥ãå±ããŸããã "ïŒ gmail.com" ãŠãŒã¶ãŒããããŒã«ãåé€ã§ããŠããŸãã æ€åºæ©èœããNON_ORG_IAM_MEMBERã以å€ã®æ æåŸã«ãæ€åºæ©èœããNON_ORG_IAM_MEMBERã以å€ã®æã®æåã確èªããŸãã ãã¡ãã¯ã SCC ïŒ æ€åº ããé©åœãªæ€åºæ©èœãéžæãã éã¢ã¯ãã£ã ã«ããåŸãå床 æå¹ ã«ããããšã§ Slack ãžéç¥ãããã確èªããããšæããŸãã ãOPEN_FIREWALLãããäžåºŠ éã¢ã¯ãã£ã ã«ããåŸãå床 æå¹ ã«ããã¿ã€ãã³ã°ã§ãSlack ã«ä»¥äžã®éç¥ãå±ããŸããã ãNON_ORG_IAM_MEMBERã以å€ã®æã¯ãã»ãã¥ãªãã£ãªã¹ã¯ãæ€åºããããšãå ±åããæšå¥šäºé
(æ¹åæ¡) ãéç¥ããæã Slack ã«å±ããŸãã ä»åäœæããèªå修埩ã®ä»çµã¿ã¯ã NON_ORG_IAM_MEMBER ãã®æ€åºæ©èœã®ã¿ã§ãããããã¡ããå¿çšãããšçµç¹ãšããŠã¯ãªãã£ã«ã«ãªè
åšã«å¯ŸããŠãèªå修埩ãã æ¯æ£çãªçµ±å¶ ãå®çŸã§ãããã§ããã G-gen ç·šééš (èšäºäžèЧ) æ ªåŒäŒç€ŸG-genã¯ããµãŒããŒã¯ãŒã¯ã¹ã°ã«ãŒããšããŠãã¯ã©ãŠãã§ãäžçãããã£ãšãã¯ããããããããããžã§ã³ã«æ²ããã¯ã©ãŠãã®å°å
¥ããæé©åãŸã§ãæ¯æŽããŠãã Google Cloud å°æ¥ã®ã¯ã©ãŠãã€ã³ãã°ã¬ãŒã¿ãŒã§ãã
G-gen ã®ææã§ããGoogle CloudïŒæ§ç§° GCPïŒã® Cloud Run functionsïŒç¬¬2äžä»£ïŒã䜿ããCloud Storage ãžãã¡ã€ã«ãé
眮ãããããšãèµ·ç¹ã«èµ·åããããã°ã©ã ãäœã£ãŠã¿ãŸããã åæç¥è Cloud Storage ãš Cloud Run functions Cloud Storage ããªã¬ã® Cloud Run functions ãšã¯ æ€èšŒ ããããš ãœãŒã¹ã³ãŒã å®è¡çµæ ãããã€ã®æé å¿
èŠãª API ã®æå¹å Cloud Storage ãµãŒãã¹ãšãŒãžã§ã³ãã«æš©éä»äž ããªã¬ãŒçšãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ ãœãŒã¹ã³ãŒãã®é
眮 Cloud Run functions 颿°ã®ããã〠å®è¡çµæç¢ºèª ãã©ãã«ã·ã¥ãŒãã£ã³ã° Please verify that the bucket exists Build failed with status: FAILURE and message: An unexpected error occurred The request was not authenticated. ããŒã«ã«ã§ã®ãã¹ã åæç¥è Cloud Storage ãš Cloud Run functions Cloud Storage ãš Cloud Run functions ã®åºç€ç¥èã«ã€ããŠã¯ä»¥äžã®èšäºããåç
§ãã ããã blog.g-gen.co.jp blog.g-gen.co.jp Cloud Storage ããªã¬ã® Cloud Run functions ãšã¯ Cloud Storage ã«ãªããžã§ã¯ããã¢ããããŒããããããšãããªã¬ãŒã«ã㊠Cloud Run functions ãèµ·åãããããšãã§ããŸãããã®åŒã³åºãæ¹ã Cloud Storage ããªã¬ãŒ ãšåŒã³ãŸãã Cloud Storage ããªã¬ã®é¢æ° ãŠãŒã¹ã±ãŒã¹ãšããŠã¯ãäŸãã°ä»¥äžã®ãããªãã®ãæããããŸãã csv ãã¡ã€ã«ãã¢ããããŒãããããšäžèº«ãèªåçã« BigQuery ã®ããŒãã«ã«æå
¥ãã ç»åãã¡ã€ã«ãã¢ããããŒããããã©èªåçã«åãæã & ç»åãµã€ãºã調æŽããŠãµã ãã€ã«ãäœã Zip ãã¡ã€ã«ãã¢ããããŒãããããšèªåçã«å±éããŠé©åãªãã¹ (ãã©ã«ã) ã«æ¯ãåãã ãªã Cloud Run functions ã®ç¬¬1äžä»£ãšç¬¬2äžä»£ã§å°ãå®è£
æ¹æ³ãç°ãªããŸãã詳现ã¯ä»¥äžã®å
¬åŒããã¥ã¡ã³ããã確èªãã ããã åè : Cloud Storage ããªã¬ãŒ åè : ã€ãã³ã ããªãã³é¢æ°ãäœæãã æ€èšŒ ããããš Cloud Storage ããªã¬ã® Cloud Run functionsïŒç¬¬2äžä»£ïŒã§ã¯ãããªã¬ã®æ
å ±ïŒCloud Storage ã«ã¢ããããŒãããããªããžã§ã¯ãã®ãã¹ããã¡ã€ã«åããµã€ãºçïŒã CloudEventåœ¢åŒ ã§æž¡ãããŠããŸãã åè : CloudEvents åœ¢åŒ - HTTP ãããã³ã« ãã€ã³ãã£ã³ã° ä»åã¯ã颿°ã«æž¡ãããã€ãã³ãã®å
容ã確ãããæ€èšŒã®ãããç¹ã«ãã¡ã€ã«ã«å¯ŸããŠåŠçããããã€ãã³ãã®äžèº«ãããã¹ããšã㊠Cloud Logging ã«åºåããã ãã®ããã°ã©ã ãéçºããŸããã ä»åã®æ€èšŒ ãœãŒã¹ã³ãŒã import functions_framework @ functions_framework.cloud_event def main (cloud_event): # printing all the event data print (cloud_event) # Name of the bucket and the object bucket = cloud_event.data[ 'bucket' ] object = cloud_event.data[ 'name' ] size = cloud_event.data[ 'size' ] print (f "bucket : {bucket}" ) print (f "object : {object}" ) print (f "size : {size}" ) åé ã® import functions_framework 㯠CloudEvent 颿°ã䜿ããšãã«å¿
é ã®ã©ã€ãã©ãªã§ããCloud Run functions ã®å®è¡ç°å¢ã«ã¯ããã©ã«ãã§å«ãŸããŸãã®ã§ã©ã€ãã©ãªããããã€ããã±ãŒãžã«å«ãŸããå¿
èŠã¯ãããŸããããŸãã¯ããŸããªããšæã£ãŠãåé¡ãããŸããã main 颿°ã®åã® @functions_framework.cloud_event ã¯ãã³ã¬ãŒã¿ã§ãããã³ã¬ãŒã¿ãšã¯ããã颿°ã®å®è¡ååŸã«å¥ã®åŠçãå ããéãªã©ã«çšãã Python ã®æ©èœã§ãããã¡ããããŸããªãã ãšæã£ãŠãæ§ããŸããã def main(cloud_event): 以éãæ¬æ¥ã®åŠçãšãªããŸãã Cloud Storage ã«ãã¡ã€ã«ïŒãªããžã§ã¯ãïŒãã¢ããããŒãããããšããã®ãã¡ã€ã«ã®æ
å ±ã cloud_event ãšããŠæž¡ããã main 颿°ãå®è¡ãããŸãããã®é¢æ°ã®åŠç㯠cloud_event ã®äžèº«ã cloud_event ããåãåºãããã±ããåããã¡ã€ã«åããã¡ã€ã«ãµã€ãºã print ããç°¡åãªãã®ã§ãã Cloud Run functions ã§ã¯æšæºåºåã Cloud Logging ã«èªåçã«éä¿¡ãããããã print ã³ãã³ãã§ç°¡æçã«ãã®ã³ã°ããŠããŸãã å®è¡çµæ æé ã¯åŸè¿°ããŸãããäžèšã®ãœãŒã¹ã Cloud Run functionsïŒç¬¬2äžä»£ïŒã«ãããã€ããŠã gcs-function-test ãšãã Cloud Storage ãã±ãããšçŽã¥ããŸããã ãã®ãã±ããã« animal_panda.png ãšããåç§°ã®ãã¡ã€ã«ãã¢ããããŒããããšé¢æ°ãèµ·åãã以äžã®ãããªåºåçµæãšãªããŸããããªã Cloud Run functions ãã print ãããš Cloud Logging åŽã§ã¯æ§ã
ãªã¡ã¿æ
å ±ãä»å ããŸããã以äžã«æšæºåºåã®äžèº«ã ããæ²èŒããŸãã print(cloud_event) ã®çµæ { 'attributes' : { 'specversion' : '1.0' , 'id' : '5635814697830791' , 'source' : ' //storage.googleapis.com/projects/_/buckets/gcs-function-test' , 'type' : 'google.cloud.storage.object.v1.finalized' , 'datacontenttype' : 'application/json' , 'subject' : 'objects/animal_panda.png' , 'time' : '2022-09-17T05:59:11.036457Z' , 'bucket' : 'gcs-function-test' }, 'data' : { 'kind' : 'storage#object' , 'id' : 'gcs-function-test/animal_panda.png/1663394351028903' , 'selfLink' : 'https://www.googleapis.com/storage/v1/b/gcs-function-test/o/animal_panda.png' , 'name' : 'animal_panda.png' , 'bucket' : 'gcs-function-test' , 'generation' : '1663394351028903' , 'metageneration' : '1' , 'contentType' : 'image/png' , 'timeCreated' : '2022-09-17T05:59:11.036Z' , 'updated' : '2022-09-17T05:59:11.036Z' , 'storageClass' : 'STANDARD' , 'timeStorageClassUpdated' : '2022-09-17T05:59:11.036Z' , 'size' : '214319' , 'md5Hash' : '8ui/28TJi+Qi/kJrJHWYuA==' , 'mediaLink' : 'https://storage.googleapis.com/download/storage/v1/b/gcs-function-test/o/animal_panda.png?generation=1663394351028903&alt=media' , 'crc32c' : 'cYHNvQ==' , 'etag' : 'CKe1qOuSm/oCEAE=' } } ããã Cloud Storage ããªã¬ã§åŸãããæ
å ±ã®å
šéãšãªããŸããæž¡ãããããŒã¿ã¯ StorageObjectData ã¿ã€ãã§ããããã©ãŒãããã¯ä»¥äžã®ããã«æ±ºãŸã£ãŠããŸãã åè : GitHub - proto/google/events/cloud/storage/v1/data.proto attributes ã«ã¯ã€ãã³ãã®æ§è³ªãå
¥ã£ãŠããŸããä»åã®ã€ãã³ãããªããžã§ã¯ãã® finalize (æ°èŠãªããžã§ã¯ãäœæãæ¢åãªããžã§ã¯ãäžæžãã®å®äº) ããã£ããã§ããããšããã€ãã³ãã®æå» (UTC) ãå
¥ã£ãŠããŸãã data ã«ã¯ãªããžã§ã¯ãåïŒ name ïŒããã±ããåïŒ bucket ïŒãã¹ãã¬ãŒãžã¯ã©ã¹ïŒ storageClass ïŒããã€ãæ°ïŒ size ïŒãªã©ãå«ãŸããŠããããšãåãããŸãã print(f"bucket : {bucket}") ã®çµæ bucket : gcs-function-test print(f"object : {object}") ã®çµæ object : animal_panda.png print(f"size : {size}") ã®çµæ size : 214319 å
çšã® cloud_event ããæ
å ±ãèªã¿åºããŠå©çšã§ããããšãåãããŸãã ä»åã¯è¡ã£ãŠããŸããããç¶ãããã°ã©ã å
ã§ Cloud Storage API ãåŒã³åºããŠã¢ããããŒãããããã¡ã€ã«ã«å¯ŸããŠåŠçãããããšçãã§ããŸãã ãªã cloud_event.data['name'] ã«ã¯ãªããžã§ã¯ãåãå
¥ããŸããããã©ã«ãã®äžã«å
¥ã£ãŠããå Žå㯠myfolder/myfile.txt ã®ããã«ãã«ãã¹ãå
¥ããŸãã äœè«ã§ãããCloud Storage ã«ã¯ãã©ã«ããšããæŠå¿µã¯å®äœãšããŠã¯ååšããŸããã åè : Cloud Storage ãªããžã§ã¯ãã«ã€ã㊠- ãªããžã§ã¯ãã®åå空é Cloud Storage ã¯ãããŸã§ããŒã»ããªã¥ãŒã¹ãã¢ã§ããããã©ãããªç©ºéã«ãªããžã§ã¯ããé
眮ãããŸãã myfolder/myfile.txt ã® myfolder ã¯ãã©ã«ããšããå®äœãããããã§ã¯ãªãããªããžã§ã¯ãåã®äžéšã«ãããŸããããã ãã³ã³ãœãŒã«ç»é¢ã CLI ã§ã¯ãã©ã«ãéå±€ããããã®ããã«è¡šç€ºã«ããããªããžã§ã¯ããæŽçããããããããšãã§ããŸãã ãããã€ã®æé åè : Cloud Storage ããçŽæ¥ã€ãã³ããåä¿¡ããïŒgcloud CLIïŒ å¿
èŠãª API ã®æå¹å 以äžã®ã³ãã³ãã§ãå¿
èŠãª API ãæå¹åããŸãã gcloud services enable \ artifactregistry.googleapis.com cloudfunctions.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ pubsub.googleapis.com \ eventarc.googleapis.com \ ãã®ã³ãã³ãã§æå¹åãããã®ã¯ä»¥äžã®ãµãŒãã¹ã§ããæ¢ã«æå¹åãããŠãããã®ããã£ãŠãæªåœ±é¿ã¯ãããŸããã®ã§ãã®ãŸãŸå®è¡ããŠæ§ããŸããã Artifact Registry Cloud Run functions Cloud Run Cloud Logging Cloud Build Cloud Storage Pub/Sub Eventarc Cloud Storage ãµãŒãã¹ãšãŒãžã§ã³ãã«æš©éä»äž 以äžã®ã³ãã³ããå®è¡ã㊠Cloud Storage ã®ãµãŒãã¹ãšãŒãžã§ã³ãã«å¯Ÿãã Pub/Sub ãžãããªãã·ã¥ããããã® IAM æš©éãä»äžããŸãã ãããžã§ã¯ãåã«çœ®ãæããŠãã ãã ã®éšåã¯ããèªèº«ã®ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ããã PROJECT_ID = " ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ãã " SERVICE_AGENT = " $( gcloud storage service-agent --project = ${PROJECT_ID}) " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_AGENT} " \ --role =' roles/pubsub.publisher ' gcloud storage service-agent --project=${PROJECT_ID} ã«ãã Cloud Storage ã®ãµãŒãã¹ãšãŒãžã§ã³ãåãååŸããŠããŸãããµãŒãã¹ãšãŒãžã§ã³ããšã¯ãGoogle Cloud ãµãŒãã¹ãä»ã®ãµãŒãã¹ãåŒã³åºããšãã«å©çšããç¹å¥ãªãµãŒãã¹ã¢ã«ãŠã³ãã§ããCloud Storage ã®ãµãŒãã¹ãšãŒãžã§ã³ãã¯ãããžã§ã¯ãã«1ã€ã ãååšããŸãã ãã®ãµãŒãã¹ã¢ã«ãŠã³ãã« Pub/Sub ãžãããªãã·ã¥ïŒã¡ãã»ãŒãžãçºè¡ïŒããæš©éãäžããŠããã®ã§ããCloud Storage ããªã¬ã®é¢æ°èµ·åæã«ã¯ãå
éšçã«ã¯ Pub/Sub ãå©çšãããŠããŸãïŒæ£ç¢ºã«èšããšãè£ã§äœ¿ãããŠãã Eventarc ã Cloud Run functions ã Cloud Run ãåŒã³åºãéã«ãPub/Sub ã䜿ããŸãïŒã ããªã¬ãŒçšãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ Eventarc ã颿°ãèµ·åããããã«äœ¿ããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãããµãŒãã¹ã¢ã«ãŠã³ãã«ã¯ãEventarc ã€ãã³ãåä¿¡è
ïŒ roles/eventarc.eventReceiver ïŒããŒã«ãšãCloud Run ãµãŒãã¹èµ·åå
ïŒ roles/run.servicesInvoker ïŒããŒã«ããããžã§ã¯ãã¬ãã«ã§ä»äžããŸããåè
㯠Eventarc ã Cloud Storage ããã®ã€ãã³ããåä¿¡ããããã«ãåŸè
㯠Eventarc ã颿°ãèµ·åããããã«å¿
èŠã§ãã PROJECT_ID = " ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ãã " SA_NAME = " gce-trigger-test " gcloud iam service-accounts create ${SA_NAME} --project = ${PROJECT_ID} gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =' roles/eventarc.eventReceiver ' gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =' roles/run.servicesInvoker ' ãœãŒã¹ã³ãŒãã®é
眮 æ°ãããã£ã¬ã¯ããªãäœæããå
çšã®ãµã³ãã«ã³ãŒãã main.py ãšããåç§°ã§é
眮ããŸãã ãŸãã requirements.txt ãšãã空ã®ããã¹ããã¡ã€ã«ãåããã£ã¬ã¯ããªã«é
眮ããŠãã ããã requirements.txt 㯠Python ã©ã€ãã©ãªã®äŸåé¢ä¿ãèšè¿°ãããã¡ã€ã«ã§ãããCloud Run functions ããããã€ãããšããã®ãã¡ã€ã«ã«åºã¥ããŠå®è¡ç°å¢ãèªåçã«çšæãããŸããä»åã®ãµã³ãã«ãœãŒã¹ã³ãŒãã§ã¯ãäœãèšè¿°ããªãç¶æ
ã§åé¡ãããŸããã Cloud Run functions 颿°ã®ããã〠ãœãŒã¹ã³ãŒããšåããã£ã¬ã¯ããªã«ç§»åããŠã以äžã®ã³ãã³ããå®è¡ããŠãã ããã ã ãããžã§ã¯ãåã«çœ®ãæããŠãã ãã ãã®éšåã¯ããèªèº«ã®ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ãããã ãã±ããåã«çœ®ãæããŠãã ãã ãã®éšåã¯ããèªèº«ã®ãã±ããåã«çœ®ãæããŠãã ããã function= 以é㯠Cloud Run functions ã®é¢æ°åã§ãããä»»æã®åç§°ã«ããŠãã ããã PROJECT_ID = " ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ãã " BUCKET = " ãã±ããåã«çœ®ãæããŠãã ãã " SA_NAME = " gce-trigger-test " FUNCTION_NAME = " gcs-trigger-test " gcloud functions deploy ${FUNCTION_NAME} \ --gen2 \ --project = ${PROJECT_ID} \ --region = asia-northeast1 \ --runtime = python39 \ --memory = 128Mi \ --entry-point main \ --trigger-bucket = ${BUCKET} \ --trigger-service-account =" ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " äžèšã®ã³ãã³ãã§ã¯ãªãŒãžã§ã³ãã©ã³ã¿ã€ã ãã¡ã¢ãªæ°ãªã©ãæå®ããŠããŸãããã®ã³ãã³ããå®è¡ãããšããã«ããšãããã€ã«ããã 2 åçšåºŠããããŸãããããã€ãå®äºãããšé¢æ°ãå©çšå¯èœã«ãªãããã±ããã«ãã¡ã€ã«ãé
眮ãããäžæžãããããããšé¢æ°ãèµ·åããããã«ãªããŸãã å®è¡çµæç¢ºèª æå®ãã Cloud Storage ãã±ããã«ãã¡ã€ã«ãã¢ããããŒãããŠã¿ãŠãã ããã ããŸãããã° Cloud Logging ã®ãã°ãšã¯ã¹ãããŒã©ã§ print ããå
容ã確èªã§ããŸãã Cloud Logging ç»é¢ ä»ã®ãã°ãå€ããŠç¢ºèªãã¥ããå Žåã以äžã®ã¯ãšãªã§ãã£ã«ã¿ããã°ã Cloud Run (Cloud Run functions 第2äžä»£) ã®ãã°ã ãã«çµãããšãã§ããŸãã resource . type = " cloud_run_revision " ãã©ãã«ã·ã¥ãŒãã£ã³ã° Please verify that the bucket exists gcloud functions deploy ã³ãã³ããå®è¡åŸã以äžã®ãããªãšã©ãŒã¡ãã»ãŒãžãåºåãããããšããããŸãã ERROR: (gcloud.functions.deploy) PERMISSION_DENIED: Cannot create trigger projects/my-project-id/locations/asia-northeast1/triggers/gcs-trigger-test-489977: Permission "storage.buckets.get" denied on "Bucket \"my-test-bucket\" could not be validated. Please verify that the bucket exists and that the Eventarc service account has permission." çŽ çŽã«èªããšããã±ããåãæ£ãããããEventarc ãµãŒãã¹ã¢ã«ãŠã³ããæ£ããæš©éãæã£ãŠãããããªã©ã確ãããå¿
èŠãããããã«æããŸãã ãããããã¯ãåœèšäºã®æé ãå§ããŠå®æœããçŽåŸã«èµ·ããããšããããæéããããŠåå®è¡ãããšçºçããªããªãããšããããŸãã ããã¯ã API ã®æå¹åã IAM æš©éã®ä»äžã Google Cloud å
ã§äŒæ¬ããã®ã«æéããããå Žåãããããã§ããæ°åãåæ°åçšåºŠãéãéããŠåå®è¡ããŠãã ããã Build failed with status: FAILURE and message: An unexpected error occurred åãã gcloud functions deploy ã³ãã³ããå®è¡åŸã以äžã®ãããªãšã©ãŒã¡ãã»ãŒãžãåºåãããããšããããŸãã ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed with status: FAILURE and message: An unexpected error occurred. Refer to build logs: https://console.cloud.google.com/cloud-build/builds;region=asia-northeast1/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?project=0000000000000. For more details see the logs at https://console.cloud.google.com/cloud-build/builds;region=asia-northeast1/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?project=0000000000000. ãã«ã倱æãæå³ããã¡ãã»ãŒãžã§ãããšã©ãŒã¡ãã»ãŒãžå
ã« Cloud Logging ãžã®ãªã³ã¯ãããã®ã§ãã¡ããžç§»åããŠããã«ãã°ã粟æ»ãããšã以äžã®ãããªã¡ãã»ãŒãžãèŠã€ããããšããããŸãã Artifact Registry API has not been used in project 0000000000000 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/artifactregistry.googleapis.com/overview?project=0000000000000 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. ã¡ãã»ãŒãžéãã API ã®æå¹åã Google Cloud å
ã§äŒæ¬ããã®ã«æéãããã£ãŠããããã«åºããšã©ãŒã§ããæ°åãåæ°åçšåºŠãéãéããŠåå®è¡ããŠãã ããã ãã®åå 以å€ã§ãããœãŒã¹ã³ãŒãã®èª€ãçã§ãã®ãšã©ãŒãçºçããããšãããããŸãã®ã§ããã«ãã®ãã°ã確èªããããšã解決ãžã®è¿éã§ãã The request was not authenticated. ãã«ãã»ãããã€ãæåãããã¡ã€ã«ããã±ããã«ã¢ããããŒãããŠã print å
容ã Cloud Logging ã«çŸããã以äžã®ãããªãšã©ãŒãåºãŠããããšããããŸãã The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header. Read more at https://cloud.google.com/run/docs/securing/authenticating Additional troubleshooting documentation can be found at: https://cloud.google.com/run/docs/troubleshooting#unauthorized-client The request was not authenticated. ããã¯ãèªèšŒãããŸãããã颿°ãå®è¡ãããªãã£ãããšãæå³ããŠããŸããåœèšäºã«ç€ºãããããã€ã³ãã³ãã§ãããã€ããå Žåãæå®ãããµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã䜿ã£ãŠé¢æ°ãèµ·åãããŸãããã®éã«æš©éãè¶³ããããšã©ãŒãèµ·ããŠããããšãèããããŸãã Cloud Storage ããªã¬ã§ Cloud Run functions 第2äžä»£ïŒå®äœã¯ Cloud RunïŒãåŒã³åºãéã«ãèåŸã§ã¯ Eventarc ãš Pub/Sub ãåããŠããŸãããã®ãšããµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã䜿ã£ãŠé¢æ°ãåŒã³åºãããŸããããµãŒãã¹ã¢ã«ãŠã³ãã«ã¯ Cloud Run ãµãŒãã¹èµ·åå
ïŒ roles/run.servicesInvoker ïŒããŒã«ããã㯠Cloud Run èµ·åå
ïŒ roles/run.invoker ïŒããŒã«ãå¿
èŠã§ãããªãåè
ã®ããŒã«ã®ã»ããæš©éãå°ãããæå°æš©éã®ååã«åŸã£ãŠããŸãã æš©éäžè¶³ã¯ã以äžã®ã³ãã³ãã§å¯Ÿè±¡ã®ãµãŒãã¹ã¢ã«ãŠã³ãã« Cloud Run ãµãŒãã¹èµ·åå
ïŒ roles/run.servicesInvoker ïŒããŒã«ãä»äžããããšã§è§£æ±ºããŸãã PROJECT_ID = " ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ãã " SA_NAME = " ãµãŒãã¹ã¢ã«ãŠã³ãåã«çœ®ãæããŠãã ãã " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =' roles/run.servicesInvoker ' ãªããä»äžãã¹ãããŒã«ã¯ Cloud Functions èµ·åå
ïŒ roles/cloudfunctions.invoker ïŒããŒã« ã§ã¯ãªã ããšã«æ³šæããŠãã ããããã®ããŒã«ã¯ã第1äžä»£ã®å€ã Cloud Run functions 颿°ãèµ·åããããã®ããŒã«ã§ãã ãã颿°ã®ãããã€æã« --service-account ãªãã·ã§ã³ã§é¢æ°èªäœã«ãµãŒãã¹ã¢ã«ãŠã³ããã¢ã¿ããããŠãããã〠--trigger-service-account ãªãã·ã§ã³ãæå® ããªãã£ã å Žåã¯ã --service-account ãªãã·ã§ã³ã§æå®ãããµãŒãã¹ã¢ã«ãŠã³ãã Eventarc ã«èšå®ãããŸãããŸããããã®ãªãã·ã§ã³ãæå®ããªãã£ãå Žåã¯ãEventarc ãšé¢æ°ã®äž¡æ¹ã« Comute Engine ã®ããã©ã«ããµãŒãã¹ã¢ã«ãŠã³ããèšå®ãããŸããEventarc ã«ã©ã®ãµãŒãã¹ã¢ã«ãŠã³ããèšå®ãããŠãããã¯ãGoogle Cloud ã³ã³ãœãŒã«ã§ Eventarc ããªã¬ãŒã®äžèЧç»é¢ã«é·ç§»ãã颿°ã®ååãå«ãããªã¬ãŒã®èšå®ãé²èЧããããšã§ç¢ºèªããããšãã§ããŸãããã®ãµãŒãã¹ã¢ã«ãŠã³ãã«ãCloud Run ãµãŒãã¹èµ·åå
ïŒ roles/run.servicesInvoker ïŒããŒã«ãä»äžããŠãã ããã ããŒã«ã«ã§ã®ãã¹ã 以äžã®èšäºã« functions-framework ã䜿ã£ãŠããŒã«ã«ç°å¢ã§ Cloud Run functions 颿°ã®åäœãã¹ããè¡ãæ¹æ³ãæžããŠãããŸãã blog.g-gen.co.jp functions-framework ã䜿ããç°å¢ãæŽã£ããã以äžã®ããã«ä»®æ³ function ãèµ·åããŸãã functions-framework --debug --target main 以äžã®ãã㪠curl ã³ãã³ãã§ CloudEvents ãåçŸããŠåäœãã¹ããå®è¡ã§ããŸãã curl localhost:8080 \ -X POST \ -H " Content-Type: application/json " \ -H " ce-id: 123451234512345 " \ -H " ce-specversion: 1.0 " \ -H " ce-time: 2022-09-17T05:59:11.036Z " \ -H " ce-type: google.cloud.storage.object.v1.finalized " \ -H " ce-source: //storage.googleapis.com/projects/_/buckets/gcs-function-test " \ -H " ce-subject: objects/animal_panda.png " \ -d ' { "bucket": "gcs-function-test", "contentType": "image/png", "kind": "storage#object", "md5Hash": "...", "metageneration": "1", "name": "animal_panda.png", "size": "214319", "storageClass": "STANDARD", "timeCreated": "2022-09-17T05:59:11.036Z", "timeStorageClassUpdated": "2022-09-17T05:59:11.036Z", "updated": "2022-09-17T05:59:11.036Z" } ' ãã® curl ãªã¯ãšã¹ã㯠gcs-function-test ãã±ããã« animal_panda.png ãšãããã¡ã€ã«ã眮ããããšãã®ã€ãã³ããåçŸããŠããŸãã åè : ããŒã«ã«é¢æ°ã®åŒã³åºã ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãX (æ§ Twitter) ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ã®ææã§ããCloud Run functions ã§ Python ããã°ã©ã ãåäœãããéã«ããã°ãã©ã®ããã«æ±ããåºåãããã°ãããã«ã€ããŠã玹ä»ããŸãã Cloud Run functions ã®ãã°åºå æšæºåºåãšæšæº logger Cloud Logging ã©ã€ãã©ãª ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã« ãµã³ãã«ã³ãŒã å®è¡çµæ Cloud Run functions ã®ãã°åºå æšæºåºåãšæšæº logger Cloud Run functions ã Cloud Run services çã§åäœããããã°ã©ã ãæšæºåºåã«æååãåºåãããšã èªåçã« Cloud Logging ã«ãã°ãšããŠèšé²ãããŸããã€ãŸã Python ããã°ã©ã ã§ print ããã ãã§ãããã¹ãã Cloud Logging ã«éä¿¡ã§ããŸãã åè : æ§é åãã®ã³ã° - Google Cloud observability åè : Cloud Run ã§ã®ãã°ã®èšé²ãšè¡šç€º - Cloud Run print æã«ãã Cloud Logging ã«éåºãããããã¹ã Cloud Logging ã©ã€ãã©ãª æ¬çªéçšã«ããããã©ãã«ã·ã¥ãŒãã£ã³ã°ãªã©ãã¹ã ãŒãºã«è¡ãããã«ã¯ã Cloud Logging ãšã³ããªã« severity ïŒéèŠåºŠïŒãåæ ãããã JSON 圢åŒã§è¿œå ã®æ
å ±ãæãããŠãããããšã«ãã£ã«ã¿ããããšã Cloud Logging ã®åŒ·åãªãã£ã«ã¿æ©èœãšçµã¿åãããŠå©çšããããšãæçšã§ãã Cloud Logging ã®ãã°ãšã¯ã¹ãããŒã©ãŒã«è¡šç€ºããã severity severity ã®äžèЧ åè¿°ã® print ã logging ã§åçŽã«æååãåºåããã ãã§ã¯ãCloud Logging ã®ãã°ãšã³ããªã« severity ãåæ ããããšã¯ã§ããŸãããæšæº logging ã©ã€ãã©ãªã§ãã°ã¬ãã«ãèšå®ããŠåºåãããšããŠããCloud Logging äžã§ã¯å
šãŠ Default ãã°ã¬ãã«ãšããŠè¡šç€ºãããŠããŸããŸãããã°ã¬ãã«ãåæ ããã«ã¯ JSON 圢åŒã§ãã°ãæ§é åãã severity ãšããããŒãå«ããããšã§åæ ãããããšãã§ããŸãã print ãæšæº logger ã§ã¯ãã°ã¬ãã«ãå
šãŠ Default ã«ãªã ããããCloud Run functions ã§åäœããããã°ã©ã ã§ Cloud Logging ã® ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª ã䜿çšããããšã§ãç°¡åã«ãã°ã¬ãã«ïŒseverityïŒãåæ ãããããã«ã¹ã¿ã 屿§ã远å ããããšãã§ããŸãã åè : Python çš Cloud Logging ã®èšå® ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã« pip ã³ãã³ãã§å®è¡ç°å¢ã« google-cloud-logging ãã€ã³ã¹ããŒã«ããŸãã Cloud Run functions ãžãããã€ããéã«å®è¡ç°å¢ã«ã©ã€ãã©ãªã远å ãããããã requirements.txt ã«ãåæ ããŠãã ããã pip install google-cloud-logging ãµã³ãã«ã³ãŒã æ¯èŒã®ããã Cloud Logging ã©ã€ãã©ãªãçšããå Žåãšçšããªãå Žåã®2ãã¿ãŒã³ã® Cloud Run functions 颿°ãäœæããŸãã 1. Cloud Logging ã©ã€ãã©ãªç¡ã #!/usr/bin/env python import logging # æšæº Logger ã®èšå® logging.basicConfig( format = "[%(asctime)s][%(levelname)s] %(message)s" , level = logging.DEBUG ) logger = logging.getLogger() def main (request): logger.critical( "This is a CRITICAL log entry." ) logger.error( "This is an ERROR log entry." ) logger.warning( "This is a WARNING log entry." ) logger.info( "This is an INFO log entry." ) logger.debug( "This is a DEBUG log entry." ) return "OK" 2. Cloud Logging ã©ã€ãã©ãªäœ¿çš #!/usr/bin/env python import logging import google.cloud.logging # æšæº Logger ã®èšå® logging.basicConfig( format = "[%(asctime)s][%(levelname)s] %(message)s" , level = logging.DEBUG ) logger = logging.getLogger() # Cloud Logging ãã³ãã©ã logger ã«æ¥ç¶ logging_client = google.cloud.logging.Client() logging_client.setup_logging() logger.setLevel(logging.DEBUG) def main (request): logger.critical( "This is a CRITICAL log entry." ) logger.error( "This is an ERROR log entry." ) logger.warning( "This is a WARNING log entry." ) logger.info( "This is an INFO log entry." ) logger.debug( "This is a DEBUG log entry." ) return "OK" åè
ã®ã³ãŒããšåŸè
ã®ã³ãŒãã®å·®ã¯ã4è¡ç®ã® import æãšã13ã16è¡ç®ã®ã¿ã§ãã 13ã16è¡ç®ã§ã¯ãCloud Logging ã®ã¯ã©ã€ã¢ã³ããçæããŠæšæº logger ã©ã€ãã©ãªãšæ¥ç¶ãããŠããŸããããã«ãããã¬ãŒã«éåºããããã°ã¯ãå
šãŠ Cloud Logging ã«éä¿¡ãããŸãã åè : Python çš Cloud Logging ã®èšå® åè : Integration with Python logging module å®è¡çµæ äžèšã® Python ããã°ã©ã ã Cloud Run functionsïŒç¬¬2äžä»£ïŒã«ãããã€ããå®è¡ããŸããã 1. Cloud Logging ã©ã€ãã©ãªç¡ã æšæº logger æšæº logger ã§æå®ãããã°ã¬ãã«ã¯ãCloud Logging ãã°ãšã³ããªã® severity ãšããŠåæ ãããŠããŸããã 2. Cloud Logging ã©ã€ãã©ãªäœ¿çš Cloud Logging ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª Cloud Logging ã©ã€ãã©ãªã䜿çšããå Žåããã°ãšã³ããªã®å·Šç«¯ã«è²ä»ãã§ severity ã衚瀺ãããŠããã®ãåãããŸãããœãŒã¹ã³ãŒãå
ã§æå®ãããã°ã¬ãã«ããCloud Logging ãã°ãšã³ããªã® severity ãšããŠåæ ãããŠããŸãã Cloud Logging ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªãšçµ±åãããŠããããšã«ããããã°ã¬ãã«ã®ã»ããå®è¡ãã¡ã€ã«åãããã°éåºå
ã®é¢æ°åïŒmainïŒãããã°ãçºçããããã°ã©ã ã®è¡æ°ããªã©ããã°ã«å«ãŸããŠããŸãã æ§ã
ãªä»å æ
å ± ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS èªå®è³æ Œããã³ Google Cloud èªå®è³æ Œã¯ãã¹ãŠååŸãXïŒæ§ TwitterïŒã§ã¯ Google Cloud ã Google Workspace ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ã®äœã
æšã§ããåœèšäºã§ã¯ Google Cloud ã®ãµãŒãã¹ã§ã¯ãªããåãã Google ã«ãã£ãŠæäŸãããŠãã Firebase ã«ã€ããŠè§£èª¬ããŠãããŸãã Firebase ãšã¯ Firebase ãš Google Cloud ã®å
±éç¹ã»çžéç¹ å
±éç¹ ãããã¯ã ãããžã§ã¯ã æéã®è«æ± ã¢ã¯ã»ã¹å¶åŸ¡ å©çšèŠçŽ ãŠãŒã¶ãŒã¢ã«ãŠã³ã çžéç¹ Firebase ãããã¯ãã®æŠèŠ Build ãããã¯ã Release & Monitor ãããã¯ã Engage ãããã¯ã æé æš©é管ç Built with Firebase Firebase ãšã¯ Firebase 㯠Firebase, Inc. ã 2011 幎ã«éçºãã2014 幎㫠Google ãè²·åãã ã¢ãã€ã«ã»Web ã¢ããªã±ãŒã·ã§ã³éçºãã©ãããã©ãŒã ã§ãã 2022 幎 9 æ çŸåšãGoogle Cloud ã®ãµãŒãã¹ã«ã¯å«ãŸããŠããŸããããäžéšã®ãããã¯ããè«æ±ã Google Cloud ãšçµ±åãããŠããŸãã Firebase 㯠BaaS ( Backend as a Service ) ããã㯠MBaaS (Mobile Backend as a Service) ãšåŒã°ãããµãŒãã¹åœ¢æ
ãšãªã£ãŠãããã¢ããªã±ãŒã·ã§ã³ãå¿
èŠãšãããµãŒãæ©èœãäžæ¬ããŠæäŸãããŸãã BaaS ã«ãããŠãŒã¶ãŒã«ããéçšä¿å®ãäžèŠãªããã¯ãšã³ãç°å¢ãæäŸããããŠãŒã¶ãŒã¯ããã³ããšã³ãã®éçºã«å°å¿µããããšãã§ããŸãã Firebase ã§ã¯ãWeb ããŒãžã®ãã¹ãã£ã³ã°ãã¢ããªã±ãŒã·ã§ã³ã®èªèšŒãNoSQL ããŒã¿ããŒã¹ãªã©ã®åºæ¬çãªæ©èœãããã¢ããªã®ãã¹ãããªãªãŒã¹ãã¢ãã¿ãªã³ã°ããµããŒãããæ©èœããã㊠Google Analytics ã Google Cloud ãµãŒãã¹ïŒCloud StorageãCloud Functionsãªã©ïŒãšã®é£æºãæäŸãããŸãã Firebase ãš Google Cloud ã®å
±éç¹ã»çžéç¹ å
±éç¹ ãããã¯ã Firebase ãš Google Cloud ã¯ã Cloud Firestore ã Cloud Functions ã Cloud Storage ã® 3 ã€ãå
±æããããããã¯ããšããŠæäŸãããŠããŸãã ãããã®ãããã¯ãã¯ãFirebase ãš Google Cloud ã®ã©ã¡ãã®ã³ã³ãœãŒã«ããã§ã管çããããšãã§ãããµãŒã㌠SDK ( Google Cloud ) ãšã¯ã©ã€ã¢ã³ã SDK (Firebase) ã®äž¡æ¹ããã¢ã¯ã»ã¹ããããšãã§ããŸãã ãããžã§ã¯ã Firebase ã®ãããã¯ããå©çšããããã«ã¯ãäœæãããªãœãŒã¹ã®ç®¡çåäœã§ãã Firebase ãããžã§ã¯ã ãäœæããå¿
èŠããããŸãã ããã§äœæãããããžã§ã¯ã㯠å
éšçã« Google Cloud ã®ãããžã§ã¯ããšåããã® ãšãªã£ãŠãããæ¢åã® Google Cloud ãããžã§ã¯ãã Firebase ãããžã§ã¯ããšããŠå©çšããããšãããã®éãå¯èœã§ãã æéã®è«æ± æéã¯ãããžã§ã¯ãåäœã§è«æ±ãããŸãã Firebase ã§ã Google Cloud åæ§ãè«æ±å
ã¢ã«ãŠã³ãããããžã§ã¯ãã«çŽä»ããŸãã è«æ±å
ã¢ã«ãŠã³ãã®è©³çްã«ã€ããŠã¯ã以äžã®èšäºã§è§£èª¬ããŠããŸãã blog.g-gen.co.jp ã¢ã¯ã»ã¹å¶åŸ¡ Google Cloud åæ§ããããžã§ã¯ãã¬ãã«ã®ããŒã«ããŒã¹ã¢ã¯ã»ã¹å¶åŸ¡ãå¯èœã§ãã Firebase ã®ã³ã³ãœãŒã«ããã¯ãããžã§ã¯ãã® ãªãŒã㌠ã ç·šéè
ã é²èЧè
ã®åºæ¬ããŒã«ãšã Firebase ã®äºåå®çŸ©ããŒã« ãèšå®ã§ããŸãã å©çšèŠçŽ 2022幎 9 æçŸåšã以äžã® Firebase ãããã¯ãã¯ã Google Cloud ã®å©çšèŠçŽ ã®ããšã§æäŸãããŸãã Firebase Authentication Cloud Storage for Firebase Cloud Functions for Firebase Cloud Firestore Firebase Test Lab ä»åŸãããå€ãã® Firebase ãããã¯ãã Google Cloud å©çšèŠçŽã«ç§»è¡ããŠããããã§ãã ãŠãŒã¶ãŒã¢ã«ãŠã³ã Firebase ãš Google Cloud ã«å¯ŸããŠã¯ãGoogle ã¢ã«ãŠã³ãã䜿çšããŠã¢ã¯ã»ã¹ããããšãå¯èœã§ãã çžéç¹ Firebase 㯠Google ã®ã¢ãã€ã«éçºãã©ãããã©ãŒã ã§ãããã¯ã©ã€ã¢ã³ããµã€ãã®ã¢ããªã±ãŒã·ã§ã³ã®éçºè
ã«ãã£ãŠå©çšãããããšãæ³å®ãããŠããŸãã Firebase ã§ã¯ãæ°èŠã¢ããªã®æ§ç¯ãšæ¢åã¢ããªãžã®æ©èœè¿œå ããŠãŒã¶ãŒã®æ¡å€§ã«çŠç¹ãåœãŠãããŸãã Google Cloud ã¯ã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ãµãŒãã¹ã®ã¹ã€ãŒãã§ãããããã¯ãšã³ãããµãŒããŒãµã€ãã®éçºè
ã«ããå©çšãæ³å®ãããŠããŸãã Google Cloud ã¯ãGoogle ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ïŒã³ã³ãã¥ãŒãã£ã³ã°ãã¹ãã¬ãŒãžããããã¯ãŒãã³ã°ãããŒã¿åæãæ©æ¢°åŠç¿ïŒã掻çšããéçºã«å©çšãããŸãã Firebase ãããã¯ãã®æŠèŠ Firebase ã®ãããã¯ãã¯ã倧ãã 3 ã€ã®ã«ããŽãªã«åããããŸãã åœèšäºã§ã¯ãåãããã¯ããæŠèŠã¬ãã«ã§ç޹ä»ããŠãããŸãã Build ãããã¯ã Build ãããã¯ã ã¯ãäž»ã«ã¢ããªã«å¿
èŠãªãããŒãžããªïŒãŠãŒã¶ãŒã«ãã管çãäžèŠãªïŒã€ã³ãã©ã¹ãã©ã¯ãã£ãæäŸãããããã¯ãã§ãã ãããã¯ã 説æ Cloud Firestore Firebase ã®ææ°ã®ããŒã¿ããŒã¹ã§ãã¹ã±ãŒã©ãã«ãª NoSQL ããŒã¿ããŒã¹ ã§ãã ããŒã¿ã¯ããã¥ã¡ã³ããšããŠä¿åãããæè»ãªéå±€åããŒã¿æ§é ããã€ããã¥ã¡ã³ãã髿©èœãªã¯ãšãªã§æ±ãããšãã§ããŸãã ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¢ããªéã® ãªã¢ã«ã¿ã€ã ãªããŒã¿åæ ãè¡ãããŸãã ããã€ã¹ããªãã©ã€ã³ã®ãšãã¯ãããŒã¿ãã£ãã·ã¥ãçšãã ãªãã©ã€ã³ã®ããŒã¿èªã¿æžã ãå®è¡ã§ããŸããããã€ã¹ããªã³ã©ã€ã³ã«æ»ããšããŒã«ã«ã®å€æŽããã¹ãŠåæãããŸãã ããŒã¿ã¯ãªãŒãžã§ã³å
ïŒè€æ°ãŸãŒã³ïŒããããã¯ãã«ããªãŒãžã§ã³ã§ã¬ããªã±ãŒã·ã§ã³ãããŸãã Realtime Database Firebase ã«åŸæ¥ããããããŒã¿ããŒã¹ã§ãCloud Firestore ãšåã NoSQL ããŒã¿ããŒã¹ ã§ãã ããŒã¿ã¯ JSON 圢åŒã§ä¿åãããCloud Firestore ãšæ¯èŒãããšè€éãªéå±€åããŒã¿ã®åãæ±ãã«ã¯åããŸããã Cloud Firestore åæ§ã ãªã¢ã«ã¿ã€ã ãªããŒã¿åæ ãš ãªãã©ã€ã³ã®èªã¿æžã ãæäŸãããŠããŸãã Cloud Firestore ãšæ¯èŒãããšã ãªã¢ã«ã¿ã€ã åæã«ãããã¬ã€ãã³ã·ã®äœã ãç¹é·ãšãªã£ãŠããŸããããè©³çŽ°ãªæ¯èŒã«ã€ããŠã¯ãã¡ãã® ããã¥ã¡ã³ã ããäžèªãã ããã Firebase Extensions 2022 幎 9 æçŸåš ããŒã¿ãªãªãŒã¹ã®ãããã¯ãã§ãã ããã±ãŒãžåãããŠããæ¢åã®ãœãªã¥ãŒã·ã§ã³ãèªåã®ã¢ããªã®æ¡åŒµæ©èœãšããŠäœ¿çšããããšãã§ããŸãã ãœãªã¥ãŒã·ã§ã³ã«ã¯ Google ãæäŸãã å
¬åŒ Firebase Extension ãšããããªãã·ã£ãŒããæäŸããã æ©æã¢ã¯ã»ã¹ ããŒãããŒæ¡åŒµæ©èœ ããããŸãã æ¡åŒµæ©èœã¯ Cloud Functions 颿°ãšããŠå®è£
ãããŠãããFirebase äžã®ã€ãã³ãã HTTPãªã¯ãšã¹ã ãCloud Scheduler ã€ãã³ããªã©ã®ããªã¬ãŒããããããå®çŸ©ãããŠããŸãã App Check æ¿èªãããŠããªãã¯ã©ã€ã¢ã³ããããã¯ãšã³ããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããã®ãé²ãããšãã§ããŸãã ä¿è·å¯Ÿè±¡ã®ããã¯ãšã³ããªãœãŒã¹ãšããŠã¯ Cloud Firestore ãRealtime Database ãCloud Functions ãCloud Storage ããµããŒããããŠããŸãã èªèšŒãããã€ããšã㊠Apple ãã©ãããã©ãŒã ã® DeviceCheck ãŸã㯠App Attest ãAndroid ã® Play Integrity ãŸã㯠SafetyNet ãWeb ã¢ããªã® reCAPTCHA v3 ãŸã㯠reCAPTCHA Enterprise ã䜿çšã§ããã»ããã«ã¹ã¿ã ãããã€ããšããŠãã®ä»ãµãŒãããŒãã£ãç¬èªã®ãããã€ãã®å©çšãå¯èœã§ãã Cloud Functions Firebase äžã®ã¢ããªã®åäœæ¡åŒµãšããŠãCloud Functions 颿°ã Firebase ã¢ããªã®ãµãŒããŒãµã€ãã®ããžãã¯ãšããŠäœ¿çšã§ããŸãã 颿°ã¯ JavaScript ãTypeScript ã§å®è£
ããŸãã åŒã³åºãå
ãã¯ã©ã€ã¢ã³ããµã€ãã® Firebase SDK ã«ãªããŸãããåºæ¬çã«ã¯ Google Cloud ã® Cloud Functions ãšåã仿§ãšãªã£ãŠããŸãã Authentication OAuth 2.0 ã OpenID Connect ãªã©ã®æ¥çæšæºã«æºæ ãããŠãŒã¶ãŒèªèšŒæ©èœã Firebase ã¢ããªã«å®è£
ããããšãã§ããŸãã ãŸãã Firebase Authentication with Identity Platform ã«ã¢ããã°ã¬ãŒãããããšã§ãå€èŠçŽ èªèšŒããŠãŒã¶ãŒã¢ã¯ãã£ããã£ã®ã¢ãã¿ãªã³ã°ãç£æ»ãã®ã³ã°ããã®ä»æ§ã
ãªè¿œå æ©èœãå©çšã§ããŸãã Hosting éçã³ã³ãã³ããšåçã³ã³ãã³ãã®äž¡æ¹ã Firebase ã®ãã«ãããŒãžãç°å¢ã«ãã¹ãã£ã³ã°ã§ããŸãã Cloud Functions ãšçµã¿åãããããšã§ãFirebase äžã§ãã€ã¯ããµãŒãã¹ãæ§ç¯ããããšãã§ããŸãã SSD ã¹ãã¬ãŒãžãšã°ããŒãã« CDN ãåºç€ãšãªã£ãŠãããã³ã³ãã³ããé«éã§é
ä¿¡ããããšãã§ããã»ããçµã¿èŸŒã¿ã® SSL ãæäŸãããŸãã Cloud Storage Cloud Storage çšã® Firebase SDK ã«ãããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãã Google Cloud Storage ãã±ããã«å¯ŸããŠçŽæ¥ãã¡ã€ã«ãã¢ããããŒããããŠã³ããŒãã§ããŸãã ããã€ã¹ã®ãããã¯ãŒã¯æ¥ç¶ç¶æ³ãæªããšãã§ããã¢ããããŒããäžæãåéã§ããŸãã Firebase ML 2022 幎 9 æçŸåš ããŒã¿ãªãªãŒã¹ã®ãããã¯ãã§ãã ããã±ãŒãžåãããæ©æ¢°åŠç¿ã¢ãã«ãã¯ã©ãŠãããããã¯ã¯ã©ã€ã¢ã³ãã¢ããªã«å®è£
ããããšãã§ããŸãã ã«ã¹ã¿ã ã¢ãã« API ã AutoML Vision Edge ã¯ã¯ã©ã€ã¢ã³ãããã€ã¹äžã§ ML ã¢ãã«ã«ããæšè«ãå®è¡ã§ããŸãïŒ ãªã³ããã€ã¹ã¢ãã« ïŒããªã³ããã€ã¹ã¢ãã«ã§ã¯ãããã¯ãŒã¯æ¥ç¶ãå¿
èŠãªããããé«éã§æšè«ãè¡ãããšãã§ããŸãã ããã¹ãèªèãç»åã©ããªã³ã°ãã©ã³ãããŒã¯èªè API ã¯ã¯ã©ãŠãäžã§ ML ã¢ãã«ã«ããæšè«ãå®è¡ãããŸãããªã³ããã€ã¹ã¢ãã«ãšæ¯èŒããŠã¯ã©ãŠãã®è±å¯ãªèšç®è³æºãå©çšã§ããããã粟床ã®é«ãæšè«ãè¡ãããšãã§ããŸãã Firebase Local Emulator Suite 2022 幎 9 æçŸåš ããŒã¿ãªãªãŒã¹ã®ãããã¯ãã§ãã ããŒã«ã«ã§ Firebase ã¢ããªãéçºããããã«ãFirebase ãµãŒãã¹ã®åäœãæ£ç¢ºã«åçŸããããã®ããŒã«ã»ããïŒãšãã¥ã¬ãŒã¿ïŒãæäŸãããŸãã Release & Monitor ãããã¯ã Release & Monitor ãããã¯ã ã¯ãäž»ã«ã¢ããªã®ãã¹ãããªãªãŒã¹ããªãªãŒã¹åŸã®å質æ¹åã«åœ¹ç«ã€ããŒã«ãæäŸãããŸãã ãããã¯ã 説æ Firebase Crashlytics Apple ãAndroid ãFlutter ãUnity ã§åäœãããªã¢ã«ã¿ã€ã ã®ã¯ã©ãã·ã¥ã¬ããŒãããŒã«ãå©çšã§ããŸãã ã¢ããªã®ã¯ã©ãã·ã¥ã«å¯ŸããŠéèŠåºŠä»ããããŠã°ã«ãŒãåãããã©ãã«ã·ã¥ãŒãã£ã³ã°ããããã§ããã»ããéèŠåºŠã®å€§ããã¯ã©ãã·ã¥ããªã¢ã«ã¿ã€ã ã«éç¥ã§ããŸãã ãŸããGoogle Analytics ãšçµ±åããããšã§ãç¹å®ã®ã¯ã©ãã·ã¥ããŒã¿ã现ããåæããããã¯ã©ãã·ã¥åã®ã€ãã³ãã远跡ãããã§ããŸãã Firebase Performance Monitoring Performance Monitoring SDK ã䜿çšããŠã¢ããªããããã©ãŒãã³ã¹ããŒã¿ãåéããã³ã³ãœãŒã«äžã§ Firebase ã¢ããªã®ããã©ãŒãã³ã¹ã®åé¡ããªã¢ã«ã¿ã€ã ã«åæã§ããŸãã Firebase Test Lab Google ã®ããŒã¿ã»ã³ã¿ãŒã§ãã¹ããããŠãã iOS ãAndroid ããã€ã¹äžã§ãFirebase ã¢ããªããã¹ãããããšãã§ããŸãã Firebase App Distribution éçºéäžã® Firebase ã¢ããªãå¹ççã«ãã¹ã¿ãŒã«é
åžããããšãã§ãããã©ãããã©ãŒã ãæäŸãããŸãã ãã¹ã¿ãŒãã°ã«ãŒãã§ç®¡çããã¢ããªã®é
åžãéç¥ãè¡ãããšãã§ããŸãã Google Analytics ã Firebase Crashlytics ãšäœµçšããããšã§ãé
åžããã¢ããªã®ãã°ãåéãåæããããšãå¯èœã§ãã Engage ãããã¯ã Engage ãããã¯ã ã¯ãäž»ã«ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®æé©åã«åœ¹ç«ã€ããŒã«ãæäŸãããŸãã ãããã¯ã 説æ Remote Config ãŠãŒã¶ãŒãã¢ããªãã¢ããããŒãããªããŠãããµãŒããŒåŽã§å€æŽãããã©ã¡ãŒã¿ããã¹ãŠã®ãŠãŒã¶ãŒã®ã¢ããªã«å¯ŸããŠãªãŒããŒã©ã€ãããããšã§ãã¢ããªã®åäœãå€èгã倿Žããããšãã§ããŸãã ããŒã»ã³ããŒãžããŒã«ã¢ãŠã æ©èœã䜿çšããã¢ããªã®ã¢ããããŒããäžå®ã®å²åã®ãŠãŒã¶ãŒã«æ®µéçã«é
ä¿¡ããããšãã§ããŸãã Google Analytics Google Analytics ã®æ©èœã Firebase ã«çµ±åããFirebase SDK ã§å®çŸ©ã§ããæå€§ 500 çš®é¡ã®ã€ãã³ãã«é¢ããŠã¬ããŒããçæããããšãã§ããŸãã ããã€ã¹ããŒã¿ãã«ã¹ã¿ã ã€ãã³ãããŠãŒã¶ãŒããããã£ãªã©ã®æ
å ±ãããšã«ã«ã¹ã¿ã ã®ãŠãŒã¶ãŒãªã¹ããå®çŸ©ããæ°æ©èœãéç¥ã¡ãã»ãŒãžã®ã¿ãŒã²ãããšã㊠Firebase ã®ä»ã®æ©èœãããªã¹ãã䜿çšããããšãã§ããŸãã Firebase A/B Testing 2022 幎 9 æçŸåš ããŒã¿ãªãªãŒã¹ã®ãããã¯ãã§ãã Google ãªããã£ãã€ãº ã®æ©èœãå©çšããããšã§ãå°èŠæš¡ãªç¯å²ã®ãŠãŒã¶ãŒã« A/B ãã¹ãã宿œããŠã¢ããªã®å€æŽããã¹ããã€ã€ãåçãªã©ã®äž»èŠãªææšãžã®åœ±é¿ã確èªããããšãã§ããŸãã Cloud Massaging ãšé£æºããŠæ§ã
ãªããŒã±ãã£ã³ã°ã¡ãã»ãŒãžã®ãã¹ããããããRemote Config ãšé£æºããŠæ§ã
ãªãã©ã¡ãŒã¿ã®ã¢ããªããã¹ãããããšã§ãã¢ããªã®ã©ã®åäœãå€èгãæãé«ã广ãçºæ®ã§ããã®ãã確èªãããã§ããŸãã Cloud Messaging ç¹å®ã®ç«¯æ«ã端æ«ã®ã°ã«ãŒãããããã¯ã®ããããã«å¯ŸããŠãéç¥ã¡ãã»ãŒãžãç¡æã§ç¢ºå®ã«éä¿¡ããããšãã§ããŸãã ãšã³ããŠãŒã¶ãŒã®ããã€ã¹ã«éç¥ã衚瀺ããã éç¥ã¡ãã»ãŒãž ãšãã¯ã©ã€ã¢ã³ãã¢ããªãåŠçããããã®ã¡ãã»ãŒãžãéä¿¡ãã ããŒã¿ã¡ãã»ãŒãž ã® 2 çš®é¡ã®ã¡ãã»ãŒãžãéä¿¡ããããšãã§ããŸãã Firebase Dynamic Links ç°ãªããã©ãããã©ãŒã äžã§åãããã«åäœãã ãã£ãŒããªã³ã¯ ãå®è£
ããããšãã§ããŸãã ãŸã Google Analytics ã«ããããªã³ã¯ã«é¢ããã€ãã³ãã®ãã©ããã³ã°ã®æ
å ±ãã Firebase ã³ã³ãœãŒã«äžã§åæã§ããŸãã Firebase In-App Messaging 2022 幎 9 æçŸåš ããŒã¿ãªãªãŒã¹ã®ãããã¯ãã§ãã ã¿ãŒã²ããã®ã¢ããªç»é¢ã«å¯ŸããŠããããŒããããã¢ãããªã©ã®åœ¢åŒã§ã¡ãã»ãŒãžã衚瀺ããããšãã§ããŸãã 衚瀺ããã¡ãã»ãŒãžã¯ Firebase ã³ã³ãœãŒã«äžïŒGUI ã§ïŒã«ã¹ã¿ãã€ãºããããšãã§ããŸãã æé Firebase ã§ã¯ 2 çš®é¡ã®æéãã©ã³ãæäŸãããŠããŸãã 以å㯠Flame ãã©ã³ãšããå®é¡å¶ã®ãã©ã³ããããŸããããçŸåšã¯å»æ¢ãããŠãããæ¢åã® Flame ãã©ã³ã®ãããžã§ã¯ãã¯ãã¹ãŠ Spark ãã©ã³ã«ããŠã³ã°ã¬ãŒããããŠããŸãã ãã©ã³ 説æ Spark ãã©ã³ ç¡æã®ãã©ã³ã§ãæããšã®ãªãœãŒã¹äœ¿çšéå¶éããããŸãã ãªãœãŒã¹äœ¿çšéã®å¶éãè¶
éãããšãã¢ããªãå©çšäžå¯ã«ãªã£ãŠããŸããŸãã æ€èšŒç°å¢åãã®ãã©ã³ã Blaze ãã©ã³ åŸé課éå¶ã®ãã©ã³ã§ããããžã§ã¯ãã«å¯ŸããŠè«æ±å
ã¢ã«ãŠã³ãã®çŽä»ããå¿
é ãšãªããŸãã ãããã¯ãã«ãã£ãŠã¯ç¡ææ ãããŸãã Google Cloud ã®ãµãŒãã¹ãå©çšããŠã¢ããªã®æ©èœãæ¡åŒµããããšãã§ããŸãã æ¬çªç°å¢åãã®ãã©ã³ã ãããã¯ãããšã®äœ¿çšéå¶éãåŸé課éã«ã€ããŠã¯ ããã¥ã¡ã³ã ããäžèªãã ããã Google Cloud åŽã§ãããžã§ã¯ãã«å¯ŸããŠè«æ±å
ã¢ã«ãŠã³ããçŽä»ããå ŽåãFirebase ã®ãã©ã³ã¯èªåçã« Blaze ãã©ã³ã«ã¢ããã°ã¬ãŒããããŸãã éã«ãGoogle Cloud åŽã§ãããžã§ã¯ããšè«æ±å
ã¢ã«ãŠã³ãã®çŽä»ããè§£é€ããå ŽåãFirebase ã®ãã©ã³ãèªåçã« Spark ãã©ã³ã«ããŠã³ã°ã¬ãŒããããŸãã ãã©ã³ãããŠã³ã°ã¬ãŒãããéãBlaze ãã©ã³ã§ã®ã¿ã¢ã¯ã»ã¹ã§ãããããã¯ãã䜿ã£ãŠããããSpark ãã©ã³ã®ç¡æå©çšå¶éãè¶
ããŠããå Žåãå床 Blaze ãã©ã³ã«ã¢ããã°ã¬ãŒããããŸã§ Firebase ã«ãããã€ããã¢ããªã䜿çšã§ããªããªã£ãããææã®ãµãŒãã¹ãå©çšã§ããªããªã£ããããŸãã æš©é管ç ãããžã§ã¯ãå
ã®å Firebase ãããã¯ãã«å¯Ÿããã¢ã¯ã»ã¹å¶åŸ¡ã¯ãGoogle Cloud åæ§ã« Google ã¢ã«ãŠã³ã ã Google ã°ã«ãŒã ã ãµãŒãã¹ã¢ã«ãŠã³ã ã«å¯Ÿã㊠ããŒã« ãå²ãåœãŠãããšã§è¡ããŸãã ããŒã«ã®çš®é¡ 説æ åºæ¬ããŒã« Google Cloud ãå«ãããã¹ãŠã®ãããã¯ãã«å¯Ÿããã¢ã¯ã»ã¹æš©ãèšå®ããããŒã«ã§ãã éå°ãªæš©éãäžããŠããŸãããšã«ãªããããåºæ¬çã«ã¯å©çšã¯æšå¥šãããŠããŸããã 以äžã® 3 çš®é¡ã®åºæ¬ããŒã«ããããŸãã ã»ãªãŒã㌠ã»ç·šéè
ã»é²èЧè
äºåå®çŸ©ããŒã« åºæ¬ããŒã«ããã詳现ã«ã¢ã¯ã»ã¹æš©ãå¶åŸ¡ã§ããããŒã«ã§ãã Firebase ã«ãããäºåå®çŸ©ããŒã«ã¯ä»¥äžã® ïŒ ã€ã«åé¡ãããŸãã ã»Firebase ã¬ãã«ã®ããŒã« ïŒ Firebase å
šäœã«å¯Ÿããã¢ã¯ã»ã¹æš©ãèšå® ïŒ ã»ãããã¯ãã«ããŽãªã®ããŒã« ïŒç¹å®ã«ããŽãªã®è€æ°ã® Firebase ãããã¯ãã«å¯Ÿããã¢ã¯ã»ã¹æš©ãèšå® ïŒ ã»ãããã¯ãã¬ãã«ã®ããŒã« ïŒ ç¹å®ã® Firebase ãããã¯ãã«å¯Ÿããã¢ã¯ã»ã¹æš©ãèšå® ïŒ ã«ã¹ã¿ã ããŒã« ãŠãŒã¶ãŒãæ§æããç¬èªã®æš©éã»ãããå«ããã«ã¹ã¿ãã€ãºãããããŒã«ã§ãã æå°æš©éã®åå ã«åŸãã现ããªã¢ã¯ã»ã¹å¶åŸ¡ãè¡ãããšãæšå¥šãããŠããŸãã äœã
æš é§¿å€ª (èšäºäžèЧ) G-genæå端ãåæµ·éåšäœã®ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšãšã³ãžã㢠2022幎6æã«G-genã«ãžã§ã€ã³ãGoogle Cloud Partner Top Engineer 2024ã«éžåºã奜ããªGoogle Cloudãããã¯ãã¯Cloud Runã è¶£å³ã¯ã³ãŒããŒãå°èª¬ïŒSFããã¹ããªïŒãã«ã©ãªã±ãªã©ã Follow @sasashun0805