G-gen ã®æŠäºã§ããåœèšäºã§ã¯ Context-Aware Access ã® request.auth 屿§ã䜿ã£ãã¢ã¯ã»ã¹å¶åŸ¡ã§ããã£ãéã®é¡æ«ã«ã€ããŠè§£èª¬ããŸãã ã¯ããã« èæ¯ Context-Aware Access ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã« request.auth 屿§ äºè±¡ã®è©³çް æ§æ ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã®å®çŸ©ãšçŽã¥ã å®éã®ãšã©ãŒ åå ãšè§£æ±ºç åå 解決ç åœè©²ãŠãŒã¶ãŒãå©çšãããã©ãŠã¶ã® Cookie ãåé€ Admin ã³ã³ãœãŒã«ããåœè©²ãŠãŒã¶ãŒã®ãã°ã€ã³æ
å ±ããªã»ãã åäœç¢ºèª ã¯ããã« èæ¯ ä»åã以äžã®èŠä»¶ãæºããå Žåã« Google ãã©ã€ããžã®ã¢ã¯ã»ã¹ãèš±å¯ãããšããã¢ã¯ã»ã¹å¶åŸ¡ãæ€èšŒããŠããŸããã ç¹å®ã® IP ã¢ãã¬ã¹ ããã®ã¢ã¯ã»ã¹ã§ããããš Google ã¢ã«ãŠã³ãã MFA (Multi-Factor Authentication) ãæå¹ã«ããŠããããš 2段éç®ã®èªèšŒèŠçŽ ã« ããŒããŠã§ã¢ã»ãã¥ãªãã£ã㌠(以éãã»ãã¥ãªãã£ããŒ) ã䜿çšããŠããããš å®éã®æ€èšŒã§ã¯é©åãªã¢ã¯ã»ã¹ã¬ãã«ãå®çŸ©ãããã€ãéä¿¡å
ã® IP ã¢ãã¬ã¹ã MFA èŠä»¶ããã¹ãŠæºãããŠããã«ãããããããGoogle ãã©ã€ããžã®ã¢ã¯ã»ã¹ãæåŠãããäºè±¡ãçºçããŸããã Context-Aware Access Context-Aware Access ïŒä»¥éãCAAïŒãšã¯ãããã€ã¹æ
å ±ãã¢ã«ãŠã³ãæ
å ±ãæ¥ç¶ç¶æ³ãªã©ã® èæ¯æ
å ± ïŒã³ã³ããã¹ãïŒã«ããšã¥ãã¢ã¯ã»ã¹ãå¶åŸ¡ãããGoogle Workspace ã®äžæ©èœã§ããFrontline StandardãEnterprise StandardãEnterprise PlusãCloud Identity Premium ãªã©ã®ãšãã£ã·ã§ã³ã§å©çšå¯èœã§ãã CAA ãèšå®ããããšã§ãGoogle ãã©ã€ããGmailãGoogle ã«ã¬ã³ããŒãLooker Studio ãªã©ã«æ¡ä»¶ä»ãã®ã¢ã¯ã»ã¹å¶åŸ¡ãé©çšã§ããŸãã åèïŒ ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã®æŠèŠ ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã« ä»åã®ããã«ãã»ãã¥ãªãã£ããŒã«ããèªèšŒãã¢ã¯ã»ã¹å¶åŸ¡ã®æ¡ä»¶ãšããå Žåãæšæºã¢ã¯ã»ã¹ã¬ãã«ã§ã¯ãªãã ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã« ã䜿çšããŸãã ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã¯ Common Expression Language (CEL) ãšåŒã°ããåŒèšèªã§å®çŸ©ããŸãã åèïŒ ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã« åèïŒ CEL èšèªã®å®çŸ© request.auth 屿§ ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã§èªèšŒèŠçŽ ãçšããã«ãŒã«ãå®çŸ©ããå Žåã request.auth 屿§ã䜿çšããŸãã ãã®å±æ§ã¯ãã¢ã¯ã»ã¹å
ã®ããªã³ã·ãã«æ
å ±ã MFA ã«ãããåçš®èªèšŒèŠçŽ ãæå®ããããšãã§ããŸãã åèïŒ request.auth ã®å±æ§ äºè±¡ã®è©³çް æ§æ ä»åã®æ€èšŒæ§æãå³ç€ºãããã®ã以äžãšãªããŸãã åè¿°ã®èŠä»¶ãæºãããŠãŒã¶ãŒã®ã¢ã¯ã»ã¹ã ããèš±å¯ããæ³å®ã§ãã ã»ãã¥ãªãã£ããŒã«ãã MFA ã¯ãçµç¹éšéã®èšå®ãå©çšããŠåŒ·å¶çã«é©çšããŠããŸãã 2段éç®ã®èªèšŒèŠçŽ ã¯ã»ãã¥ãªãã£ããŒã匷å¶ããçµç¹éšéãçšæãã察象ãŠãŒã¶ãŒãçŽã¥ã ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã®å®çŸ©ãšçŽã¥ã ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã¯ä»¥äžã®ããã«å®çŸ©ããŠããŸãã # ã»ãã¥ãªãã£ããŒã«ãã MFA èªèšŒãšèš±å¯ IP ã¢ãã¬ã¹ããŸãšããã¢ã¯ã»ã¹ã¬ãã«ã AND æ¡ä»¶ã§çµå request.auth.claims.crd_str.hwk == true && levels.source_ip_allow_list_test_sq7nlybc äžèšã®ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã§ã察象ã®çµç¹éšéããã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããããã以äžã®ããã«çŽã¥ãèšå®ãããŠããŸãã å®éã®ãšã©ãŒ äžèšã®èšå®ãè¡ããå®éã«ã¢ã¯ã»ã¹ç¢ºèªããããšããã ã»ãã¥ãªãã£ããŒã«ãã MFA ãæå¹ãªã¢ã¯ã»ã¹ã§ãã£ãŠãã¢ã¯ã»ã¹æåŠãšå€å®ãããŠããŸããŸããã ãŸããGoogle ãã©ã€ãã«ã¢ã¯ã»ã¹ãããŠãŒã¶ãŒã® MFA èšå®ã¯ä»¥äžã®éãã§ãã»ãã¥ãªãã£ããŒã®ç»é²ãå®äºããŠããŸãã ã»ãã¥ãªãã£ããŒã«ãã MFA ãæå¹ãªç¶æ
解説ã®ããäžåºŠãã°ã¢ãŠãããç¶æ
ãã Google ãã©ã€ãã«ã¢ã¯ã»ã¹ãããšã ãã¹ã¯ãŒãèªèšŒ ãš2段éç®ã® ã»ãã¥ãªãã£ããŒèªèšŒ ãèŠæ±ããããããæç€ºã«åŸãèªèšŒã宿œããŸãã ãã¹ã¯ãŒãèªèšŒïŒ1段éç®ïŒ ã»ãã¥ãªãã£ããŒã«ããèªèšŒïŒ2段éç®ïŒãéå§ ã»ãã¥ãªãã£ããŒãã¿ããããŠèªèšŒã宿œ ã»ãã¥ãªãã£ããŒã«ããèªèšŒãè¡ã£ãŠããã«ãããããããGoogle ãã©ã€ããžã®ã¢ã¯ã»ã¹ãæåŠãããŸããã ã»ãã¥ãªãã£ããŒã«ããèªèšŒã«ãé¢ãããã¢ã¯ã»ã¹ãæåŠããã åå ã«ã€ããŠã¯åŸè¿°ããŸãããä»åã®ãããã©ããã¯ã ã»ãã¥ãªãã£ããŒã«ãã MFA èªèšŒãå€å®ããããã»ã¹ ã«ãããŸããã åå ãšè§£æ±ºç åå ãšã©ãŒã®åå ã¯ã 以åã«ãã°ã€ã³ããéã®ãã°ã€ã³æ
å ± ïŒãã©ãŠã¶ã® Cookie ã Google Workspace åŽã§æã£ãŠãããã°ã€ã³æ
å ±ïŒ ã§ããã ä»åã¢ã¯ã»ã¹å¶åŸ¡ããã¹ããããŠãŒã¶ãŒã¯ãçµç¹éšéç§»è¡åã MFA èªäœã¯æå¹ã§ããããèªèšŒèŠçŽ ã«ã¯ ãœãããŠã§ã¢ã㌠ã䜿çšããŠããŸããã ãã®éã® Cookie ããã°ã€ã³æ
å ±ãæ®ã£ãŠããããã ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã«ãã MFA èšå®ãå€å®ããéçšã§æ¢åã®ãã°ã€ã³æ
å ±ãå¹²æžããçµæ ãæ³å®å€ã®ã¢ã¯ã»ã¹æåŠãåŒãèµ·ãããŠããŸããã 解決ç 以äžã宿œããããšã§ãšã©ãŒã¯è§£æ¶ãããŸããã åœè©²ãŠãŒã¶ãŒãå©çšãããã©ãŠã¶ã® Cookie ãåé€ Google Chrome ã®å Žåã以äžã®ç»é¢é·ç§»ã§ Cookie ãåé€ããŸãã 3ç¹ã¢ã€ã³ã³ > é²èЧ履æŽããŒã¿ãåé€ > å
šæéã§Cookieãšä»ã®ãµã€ãããŒã¿ (å
šãã§ãã¯ã«ã¯ãªã£ãŠãããã®ã®ã察象㯠Cookie) ãåé€ Admin ã³ã³ãœãŒã«ããåœè©²ãŠãŒã¶ãŒã®ãã°ã€ã³æ
å ±ããªã»ãã 以äžã®ç»é¢é·ç§»ã§ãã°ã€ã³ Cookie ãç¡å¹åïŒãªã»ããïŒããŸãã ãã£ã¬ã¯ã㪠> ãŠãŒã¶ãŒ > 察象ãŠãŒã¶ãŒ > ã»ãã¥ãªãã£ã¿ã > ãã°ã€ã³ Cookie ã® [ãªã»ãã] ãæŒäž åäœç¢ºèª äžèšã®æäœãè¡ãå床ã¢ã¯ã»ã¹ãããš Google ãã©ã€ãã衚瀺ãããŸããã "Cookie ããã¹ãŠåé€ããŠå床ã¢ã¯ã»ã¹ãããš Google ãã©ã€ãã衚瀺ããã ã¢ã¯ã»ã¹æåŠã ã£ãéã®èªèšŒããã»ã¹ã«çç®ãããšã以åã¯2段éç®ã®èªèšŒããã»ã¹ã®ãããã¢ããã§ å¥ã®æ¹æ³ã詊ã ãéžæã§ããç¶æ
ã§ããã ã¢ã¯ã»ã¹æåŠã®éã¯ããŒããŠã§ã¢ããŒä»¥å€ã®éžæè¢ãéžã¹ãç¶æ³ã«ãã£ã ããããã¢ã¯ã»ã¹èš±å¯ãšãªã£ãéã®2段éç®ã®èªèšŒããã»ã¹ã§ã¯ãèªèšŒæ¹æ³ãéžæãããããã¢ããã¯è¡šç€ºããããããã«ã»ãã¥ãªãã£ãŒã«ããèªèšŒãéå§ãããŸããã Cookie ãåé€ãããã°ã€ã³æ
å ±ããªã»ããããããšã«ããã2段éç®ã®èªèšŒã«ã»ãã¥ãªãã£ããŒãçšããŠãããšæ£ããå€å®ãããŸããã ãã°ã€ã³æ
å ±ã®åé€ã«ããããã¹ã¯ãŒãèªèšŒæååŸããã«ã»ãã¥ãªãã£ããŒã«ããèªèšŒãéå§ æŠäº ç¥ä» (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšæå±ãG-genå¯äžã®å±±æ¢šçåšäœãšã³ãžã㢠Google Cloud Partner Top Engineer 2025 éžåºãIaC ã CI/CD åšãã®ãµãŒãã¹ããããã¯ããèå³åéã§ãã è¶£å³ã¯ããŒããã€ã¯ãããŒãã¬ãŒã¹ããµãã«ãŒèгæŠã§ãã Follow @ggenyutakei
G-gen ã®äžæµŠã§ããåœèšäºã§ã¯ãGoogle Workspace ã® Data Loss PreventionïŒä»¥äžãDLPïŒã䜿çšããŠãGoogle ãã©ã€ãäžã®æ©å¯æ
å ±ãå€éšã«æŒããªãããã«ããæ¹æ³ã玹ä»ããŸãã æŠèŠ DLP ãšã¯ åææ¡ä»¶ æ€èšŒå
容 åäœç¢ºèª DLP ã®ã«ãŒã«èšå®ïŒèŠåïŒ åäœç¢ºèªïŒèŠåïŒ DLP ã®ã«ãŒã«èšå®ïŒãããã¯ïŒ åäœç¢ºèªïŒãããã¯ïŒ æŠèŠ DLP ãšã¯ DLP ïŒData Loss PreventionãããŒã¿æå€±é²æ¢ïŒã¯ãçµç¹å
ã®éèŠæ
å ±ãä¿è·ããæ
å ±æµåºãé²ãããã®æè¡ã§ããã¯ã¬ãžããã«ãŒãçªå·ããã€ãã³ããŒãªã©ã®å人æ
å ±ãèªåçã«æ€åºããä¿è·ããŸãã Google WorkspaceïŒä»¥äžãGWSïŒã® DLP æ©èœã¯ãGoogle Chat ã Google ãã©ã€ãã«å¯Ÿå¿ããŠããã瀟å€ç§ã®ææžã顧客ããŒã¿ãªã©ã®æ©å¯æ
å ±ã®æå³ããªãå
±æãæµåºã鲿¢ããããã®ããªã·ãŒãèšå®ã§ããŸãã åè : DLP ã§æ©å¯æ
å ±ãä¿è·ãã åææ¡ä»¶ DLP ã¯ãGoogle Workspace ã®ç¹å®ã®ãšãã£ã·ã§ã³ã§å©çšã§ããŸãã詳现ã¯ä»¥äžã®ããã¥ã¡ã³ãããåç
§ãã ããã åè : Workspace ã® DLP ã䜿çšããŠããŒã¿ã®æå€±ã鲿¢ãã æ€èšŒå
容 æ€èšŒæé ã¯æ¬¡ã®ãšããã§ãããèŠåãèšå®ã§åäœã確èªããåŸãããããã¯ãã«å€æŽããŠããã匷åãªå¶åŸ¡ã確èªããŸãã DLP ã®ã«ãŒã«èšå®ïŒèŠåïŒ Google ãã©ã€ãå
ã§ã瀟å€ç§ããšããæåãå«ããã¡ã€ã«ã瀟å€ãžå
±æãããéã«èŠåã衚瀺ãã DLP ã«ãŒã«ãèšå®ããŸãã åäœç¢ºèªïŒèŠåïŒ æ¡ä»¶ãæºãããã¡ã€ã«ãäœæãã瀟å€å
±ææã«èŠåã衚瀺ãããããšã確èªããŸãã DLP ã®ã«ãŒã«èšå®ïŒãããã¯ïŒ ã«ãŒã«ãã瀟å€å
±ææã«ãããã¯ãã«å€æŽããŸãã åäœç¢ºèªïŒãããã¯ïŒ 瀟å€å
±ææã«ãšã©ãŒã衚瀺ãããå
±æã§ããªãããšã確èªããŸãã åäœç¢ºèª DLP ã®ã«ãŒã«èšå®ïŒèŠåïŒ GWS ã®ç®¡çã³ã³ãœãŒã«ïŒURL : https://admin.google.com ïŒã«ãã°ã€ã³ããŸãã åè : 管çã³ã³ãœãŒã«ã«ãã°ã€ã³ãã [ã»ãã¥ãªãã£] > [ã¢ã¯ã»ã¹ãšããŒã¿ç®¡ç] > [ããŒã¿ã®ä¿è·] ã«ç§»åãã[ã«ãŒã«ã管ç] ãéžæããŸãã [ã«ãŒã«ã管ç] ãžç§»å [ã«ãŒã«ã远å ] ãã¯ãªãã¯ãã[æ°ããã«ãŒã«] ãéžæããŸãã [æ°ããã«ãŒã«] ãéžæ ã«ãŒã«åãå
¥åããé©çšç¯å²ã [å
šçµç¹éšé] ãŸã㯠[ç¹å®ã®çµç¹éšéãŸãã¯ã°ã«ãŒã] ããéžæããŸããç¹å®ã®éšéãã°ã«ãŒãã ããé€å€ããèšå®ãå¯èœã§ãã ã«ãŒã«åãšé©çšç¯å²ã®éžæ [ãã©ã€ãã®ãã¡ã€ã«] ãéžæãã[ç¶è¡] ãã¯ãªãã¯ããŸãã ã¢ããªãéžæ æ€åºæ¡ä»¶ãšããŠã 瀟å€ç§ ãšããæååãå«ããã¡ã€ã«ã«ã«ãŒã«ãé©çšãããããã«èšå®ããŸãã DLP ã®æ¡ä»¶ãå®çŸ© ã³ã³ããã¹ãæ¡ä»¶ïŒäŸïŒç€Ÿå
ãããã¯ãŒã¯ã® IP ã¢ãã¬ã¹ä»¥å€ããæ¥ç¶ããŠããå Žåã®ã¿é©çšïŒãèšå®ã§ããŸããä»å㯠[ãªã] ãéžæãã[ç¶è¡] ãã¯ãªãã¯ããŸãã ã³ã³ããã¹ãã®æ¡ä»¶ãéžæ [å€éšãšã®å
±æãèŠåãã] ãéžæããŸãã æäœãéžæ éç¥èšå®ãè¡ããŸãã é倧床ã¬ãã« ïŒãäœããäžããé«ãããéžæããŸãã ã¢ã©ãŒãã»ã³ã¿ãŒã«éä¿¡ãã ïŒæå¹ã«ããããšãæšå¥šããŸãã éç¥å
ã®ã¡ãŒã«ã¢ãã¬ã¹ ïŒéç¥ãåãåããŠãŒã¶ãŒãèšå®ããŸãã åè : ã¢ã©ãŒã ã»ã³ã¿ãŒã«ã€ã㊠ã¢ã©ãŒããéžæ èšå®å
容ã確èªãã[äœæ] ãã¯ãªãã¯ããŸãã ã«ãŒã«ã®ç¢ºèª åäœç¢ºèªïŒèŠåïŒ ãã€ãã©ã€ãã«ãã¹ãçšã® Google ããã¥ã¡ã³ããäœæããŸãã æ€ç¥ãã¹ãçšã®ãã¡ã€ã«äœæ äœæãããã¡ã€ã«ã瀟å€ãŠãŒã¶ãŒãšå
±æããŸããèŠåç»é¢ã衚瀺ãããããšã確èªããŸãã èŠåã®ç¢ºèª 管çè
å®ãŠã«ãDLP ã«ãŒã«ã«è©²åœããæäœã®éç¥ã¡ãŒã«ãå±ãããšã確èªããŸãã ã¡ãŒã«éç¥ã®ç¢ºèª [ã»ãã¥ãªãã£] > [ã¢ã©ãŒãã»ã³ã¿ãŒ] ãžç§»åããã¢ã©ãŒããéç¥ãããŠããããšã確èªããŸãã ã¢ã©ãŒãã»ã³ã¿ãŒã®éç¥ç¢ºèª ã¢ã©ãŒããéžæãããšã詳现æ
å ±ã確èªã§ããŸãã ã¢ã©ãŒãã®è©³çŽ°ç¢ºèª åè : ãã©ã€ãã® DLP ããã·ã¥ããŒãã§ã€ã³ã·ãã³ããã¢ã©ãŒããç£æ»ã€ãã³ãã衚瀺ãã åè : ã¢ã©ãŒãã®è©³çްã衚瀺ãã DLP ã®ã«ãŒã«èšå®ïŒãããã¯ïŒ [ã»ãã¥ãªãã£] > [ã¢ã¯ã»ã¹ãšããŒã¿ç®¡ç] > [ããŒã¿ã®ä¿è·] > [ã«ãŒã«ã管ç] ã«ç§»åããäœæããã«ãŒã«ãéžæããŸãã äœæããã«ãŒã«ãéžæ [ã«ãŒã«ãç·šé] ãã¯ãªãã¯ããŸãã ã«ãŒã«ãç·šéãéžæ [æäœ] ã»ã¯ã·ã§ã³ã§ãæ¡ä»¶ã[å€éšå
±æããããã¯]ã«å€æŽããŸãã[ç¶è¡] ãã¯ãªãã¯ããŠã«ãŒã«ãæŽæ°ããŸãã æ¡ä»¶ã®å€æŽ åäœç¢ºèªïŒãããã¯ïŒ èšå®åŸãå
ã»ã©äœæãããã¡ã€ã«ã§ç€Ÿå€ãŠãŒã¶ãŒãžã®å
±æã詊ã¿ãŸãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããå
±æãã§ããªãããšã確èªããŸãã ãããã¯ç¢ºèª äžæµŠ 奿 (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2023幎10æããG-genã«ãžã§ã€ã³ãå
ãªã³ãã¬äžå¿ã®ãããã¯ãŒã¯ãšã³ãžãã¢ããããã¯ãŒã¯ã»ã»ãã¥ãªãã£ã»åæãã»èŸããã®ã奜ãã
G-gen ã®äžæµŠã§ããåœèšäºã§ã¯ãGoogle Workspace ã® ãšã³ããã€ã³ã管çã䜿çšããŠãiPhone ã Android 端æ«ãªã©ã®ã¢ãã€ã«ç«¯æ«ã管çããæ¹æ³ã玹ä»ããŸãã æŠèŠ ãšã³ããã€ã³ã管çãšã¯ ãšã³ããã€ã³ã管çã䜿çšããã¡ãªãã åææ¡ä»¶ åºæ¬ç®¡çãšè©³çŽ°ç®¡ç iOS ããã€ã¹ã®è©³çŽ°ç®¡ç æ€èšŒæé ãšã³ããã€ã³ãèšå® ããã€ã¹ã®ç»é²ïŒiOS/AndroidïŒ ããã€ã¹ã®ç»é²ç¢ºèªïŒiOS/AndroidïŒ iOS ã®ããªã·ãŒèšå® Android ã®ããªã·ãŒèšå® åäœç¢ºèª iOS ã®åäœç¢ºèªïŒããŒã«ã«ä¿åäžå¯ïŒ Android ã®åäœç¢ºèªïŒæ¥åçšã¢ããªã®é
åžïŒ Android ã®åäœç¢ºèªïŒã¢ã«ãŠã³ãã¯ã€ãïŒ æŠèŠ ãšã³ããã€ã³ã管çãšã¯ ãšã³ããã€ã³ã管ç ã¯ãGoogle Workspace ãæäŸããããã€ã¹ç®¡çæ©èœã§ããåŸæ¥å¡ã䜿çšããã¢ãã€ã«ç«¯æ«ãããœã³ã³ãäžå
çã«ç®¡çããçµç¹ã®ã»ãã¥ãªãã£ããªã·ãŒãé©çšã§ããŸãã äžè¬çã«ããã®ãããªããã€ã¹ç®¡çã®ä»çµã¿ã¯ MDM ïŒMobile Device ManagementïŒãšåŒã°ããŸããMDM ã¯ãã»ãã¥ãªãã£ããªã·ãŒã®é©çšãã¢ããªã®é
åžãããã€ã¹ã®ç£èŠãçŽå€±ã»ç飿ã®ããŒã¿æ¶å»ãªã©ã®æ©èœãæäŸããããŒã«å
šè¬ãæããŸãã åè : ãšã³ããã€ã³ã管ç ãšã³ããã€ã³ã管çã䜿çšããã¡ãªãã Google Workspace ã®ãšã³ããã€ã³ã管çã䜿çšãããšã以äžã®ãããªã¡ãªããããããŸãã ã¡ãªãã 詳现 Google Workspace ãšã®ã·ãŒã ã¬ã¹ãªçµ±å ã¢ã«ãŠã³ããšç«¯æ«ã®ç®¡çãäžå
åã§ããŸãã ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ ã§ Gmail ã Google ãã©ã€ããžã®æè»ãªã¢ã¯ã»ã¹å¶åŸ¡ãå¯èœã§ãã 远å è²»çšãå°çšã¢ããªäžèŠ Business Plus ã Enterprise ãã©ã³ãªã©ã«æšæºæèŒãããŠããã 远å è²»çšãå°çšã¢ããªã¯äžèŠ ã§ãã Android ãŒãã¿ããç»é²ãš BYOD ãŒãã¿ããç»é²ã§å€æ°ã®ç«¯æ«ãç°¡åã«ã»ããã¢ããã§ããŸãããŸãå人ææããã€ã¹ïŒBYODïŒã«ãããŠãæ¥åããŒã¿ãšå人ããŒã¿ãåé¢ã§ããããã«ãªããã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒãäž¡ç«ã§ããŸãã ãŒãã¿ããç»é² åã³ ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ ã®è©³çްãªèšå®æé ã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ããšèšäºãåç
§ããŠãã ããã åè : Android ã®ãŒãã¿ããç»é²ã®èšå® blog.g-gen.co.jp åææ¡ä»¶ åºæ¬ç®¡çãšè©³çŽ°ç®¡ç Google Workspace ã®ãšã³ããã€ã³ã管çã«ã¯ã åºæ¬ç®¡ç 㚠詳现管ç ããããŸããGoogle Workspace ã®ãšãã£ã·ã§ã³ã«ãã£ãŠãã©ã¡ãã®æ©èœãå©çšã§ããããæ±ºãŸããŸãã æ©èœã®åç§° 詳现 åºæ¬ç®¡ç ããã€ã¹ç»é²ãçŽå€±æã® Google ã¢ã«ãŠã³ããªã¢ãŒãåé€ã ããã€ã¹ã®ã»ãã¥ãªãã£ã¹ããŒã¿ã¹ïŒäŸïŒOS ããŒãžã§ã³ïŒ ã®ç¢ºèªãªã©ã®åºæ¬çãªç®¡çæ©èœãæäŸããŸãã 詳现管ç çµç¹ã§èš±å¯ãããŠããªãã¢ããªãçŠæ¢ããæ©èœãããŒã¿æäœå¶é ãªã©ãããé«åºŠãªå¶åŸ¡ãå¯èœãå人ææããã€ã¹ïŒBYODïŒ ããŒãã¿ããç»é²ã«ãããæè»ã«ããã€ã¹ã管çã§ããŸãã åè : ã¢ãã€ã«ç®¡çæ©èœã®æ¯èŒ iOS ããã€ã¹ã®è©³çŽ°ç®¡ç iOS ããã€ã¹ã§è©³çŽ°ç®¡çãè¡ãã«ã¯ãApple ããã·ã¥èšŒææžãå¿
èŠã§ãããã®èšŒææžã¯ Apple Push Certificates Portal ã§ååŸã§ããŸãã詳现ã¯ä»¥äžã®ããã¥ã¡ã³ãã確èªããŠãã ããã åè : äŒç€Ÿææã® iOS ããã€ã¹ã®ç®¡çãèšå®ãã åè : Apple ããã·ã¥èšŒææžãèšå®ãã æ€èšŒæé 以äžã®æé ã§ãšã³ããã€ã³ã管çãèšå®ããåäœã確èªããŸãã ããã€ã¹ã®ç»é²ïŒiOS/AndroidïŒ ç®¡çã³ã³ãœãŒã«ã«ããã€ã¹ãç»é²ããŸãã iOS ã®ããªã·ãŒèšå® Google ãã©ã€ããããã¥ã¡ã³ãã®æ¥åããŒã¿ãããŒã«ã«ïŒäŸïŒFiles ã¢ããªïŒã«ä¿åã§ããªãããå¶éããŸãã Android ã®ããªã·ãŒèšå® æ¥åçšã¢ããªïŒäŸïŒGoogle GeminiïŒããªã¢ãŒãé
åžããããã®èšå®ãããŸãã iOS åäœç¢ºèªïŒããŒã«ã«ä¿åäžå¯ïŒ æ¥åããŒã¿ã Files ã¢ããªã«ä¿åã§ããªãããšã確èªããŸãã Android åäœç¢ºèªïŒæ¥åçšã¢ããªã®é
åžïŒ æ¥åçšã¢ããªãã€ã³ã¹ããŒã«ãããã¢ã³ã€ã³ã¹ããŒã«ã§ããªãããšã確èªããŸãã Android åäœç¢ºèªïŒã¢ã«ãŠã³ãã¯ã€ãïŒ ç®¡çã³ã³ãœãŒã«ãã端æ«äžã®äŒç€Ÿã§äœ¿çšããŠãã Google ã¢ã«ãŠã³ããåé€ããŸãã ãšã³ããã€ã³ãèšå® ããã€ã¹ã®ç»é²ïŒiOS/AndroidïŒ ããã€ã¹ã® Google Chrome ã§ GoogleïŒ https://google.co.jp ïŒã«ã¢ã¯ã»ã¹ããŸãã Googleã«ã¢ã¯ã»ã¹ äŒç€Ÿã§äœ¿çšãã Google ã¢ã«ãŠã³ãã§ãã°ã€ã³ããããšã§ã管çã³ã³ãœãŒã«ã«ããã€ã¹ãç»é²ãããŸãã äŒç€Ÿã¢ã«ãŠã³ãã§ãã°ã€ã³ åè : iOS ããã€ã¹ã§ Google Workspace ãèšå®ãã åè : Android ããã€ã¹ã§ Google Workspace ãèšå®ãã ããã€ã¹ã®ç»é²ç¢ºèªïŒiOS/AndroidïŒ Google Workspace ã®ç®¡çã³ã³ãœãŒã«ïŒ https://admin.google.com ïŒã«ãã°ã€ã³ããŸãã åè : 管çã³ã³ãœãŒã«ã«ãã°ã€ã³ãã [ããã€ã¹] > [ã¢ãã€ã«ãšãšã³ããã€ã³ã] > [ããã€ã¹] ãžç§»åãããã£ã«ã¿ãã ã¡ãŒã«ã¢ãã¬ã¹ ã§ããã€ã¹ãæœåºããç»é²ãããŠããããšã確èªããŸãã ã¢ãã€ã«ç«¯æ«ã®ç»é²ç¢ºèª iOS ã®ããªã·ãŒèšå® [ã¢ãã€ã«ãšãšã³ããã€ã³ã] > [èšå®] > [iOS] > [ããŒã¿å
±æ] ãéžæããŸãã ããŒã¿å
±æãéžæ èšå®ãé©çšãã çµç¹éšé ãéžæãã[ããŒã¿æäœ] ã® [ç·šé] ãéžæããŸãã ç·šéãéžæ 以äžãéžæãã[ä¿å] ãŸã㯠[ãªãŒããŒã©ã€ã] ãéžæããŸãã Google Workspace ã®ããŒã¿ãå€éšãšå
±æãããå¯èœæ§ã®ããæäœã iOS ã§è¡ãããšããŠãŒã¶ãŒã«èš±å¯ããªã èšå®ãéžæ åè : iOS ããã€ã¹ã§ã®é倱ã«ããããŒã¿æŒæŽ©ã鲿¢ãã Android ã®ããªã·ãŒèšå® [ã¢ãã€ã«ãšãšã³ããã€ã³ã] > [èšå®] > [äžè¬] > [å
šè¬] ãéžæããŸãã å
šè¬ãéžæ èšå®ãé©çšãã çµç¹éšé ãéžæãã[ã¢ãã€ã«ç®¡ç] ã® [ç·šé] ãéžæããŸãã ç·šéãéžæ [ã«ã¹ã¿ã ] ãã Android ã 詳现 ã«å€æŽãã[ä¿å] ãŸã㯠[ãªãŒããŒã©ã€ã] ãéžæããŸãã èšå®ãéžæ [ã¢ããª] > [ãŠã§ãã¢ããªãšã¢ãã€ã«ã¢ããª] ãžç§»åãã[ã¢ããªã远å ] ãã [éå®å
¬éã® Android ã¢ããªã远å ] ãéžæããŸãã éå®å
¬éã®Androidã¢ããªã远å ãéžæ æ€çŽ¢ããŒã« Gemini ãšå
¥åãããªã¹ããã Google Gemini ãéžæãã[éžæ] ãéžæããŸãã Geminiã¢ããªãéžæ éžæ ã¢ããªãé©çšãã察象ïŒå
šãŠãŒã¶ãŒãŸãã¯ç¹å®ã®çµç¹éšéã Google ã°ã«ãŒãïŒãéžæãã[ç¶è¡] ãéžæããŸãã ã€ã³ã¹ããŒã«å¯Ÿè±¡ãéžæ 以äžãéžæãã[å®äº] ãéžæããŸãã èªåã€ã³ã¹ããŒã« ãŠãŒã¶ãŒãã¢ããªãã¢ã³ã€ã³ã¹ããŒã«ã§ããªãããã«ãã ã¢ããªãžã®ã¢ã¯ã»ã¹æ¹æ³ãéžæ åè : éå®å
¬éã® Android ã¢ããªã Google Play ã§ç®¡çãã åäœç¢ºèª iOS ã®åäœç¢ºèªïŒããŒã«ã«ä¿åäžå¯ïŒ Google ããã¥ã¡ã³ãã¢ããªãèµ·åããäŒç€Ÿã§äœ¿ã£ãŠãã Google ã¢ã«ãŠã³ããéžæããŸãã Google ããã¥ã¡ã³ããã¡ã€ã«ãéããå³äžã® [âŠ] ãéžæããŸãã ... ãéžæ [å
±æãšãšã¯ã¹ããŒã] > [ã³ããŒãéä¿¡] > [PDF] > [OK] ãéžæããŸãã ã³ããŒãéä¿¡ãéžæ ["ãã¡ã€ã«"ã«ä¿å] ãéžæãããšã ãã¡ã€ã«ãå
±æã§ããŸãã ãšè¡šç€ºãããããŒã«ã«ã«ä¿åãã§ããªãããšã確èªããŸãã ãã¡ã€ã«ã«ä¿åãéžæ ããŒã«ã«ãžã®ä¿å倱æ Android ã®åäœç¢ºèªïŒæ¥åçšã¢ããªã®é
åžïŒ èšå®ã¢ããªããäŒç€Ÿã§äœ¿ã£ãŠãã Google ã¢ã«ãŠã³ããéžæããä»äºçšãããã¡ã€ã«ã®ã»ããã¢ãããéå§ããŸãã ä»äºçšãããã¡ã€ã«ã®ã»ããã¢ãã åè : ä»äºçšãããã¡ã€ã«ã®äœæ 以äžã¡ãã»ãŒãžã衚瀺ãããå Žåã[ã¢ãã€ã«ãšãšã³ããã€ã³ã] > [ããã€ã¹ã®æ¿èª] ãã端æ«ãéžæãã[ããã€ã¹ãæ¿èª] ãéžæããŸãã ãã®ããã€ã¹ã¯æå¹ã«ãªã£ãŠããŸãã 管çè
ã«ããããã€ã¹ã®æ¿èªãå¿
èŠã§ãã ããã€ã¹æªæ¿èªãšã©ãŒ ã¢ãã€ã«ç«¯æ«ã®æ¿èª ã»ããã¢ãããå®äºãããšãèšå®ããã¢ããªã衚瀺ãããŸããæ¥åçšã¢ããªã¯ã¢ããªã®ã¢ã€ã³ã³ã«éã®ã¢ã€ã³ã³ã衚瀺ãããŸãã æ¥åçšã¢ããªã®ã€ã³ã¹ããŒã«ç¢ºèª æ¥åã¢ããªã¯ãå
ã®èšå®ã®éããã¢ã³ã€ã³ã¹ããŒã«ããããšãããšå€±æããŸãã æ¥åçšã¢ããªã®ã¢ã³ã€ã³ã¹ããŒã«äžå¯ç¢ºèª Android ã®åäœç¢ºèªïŒã¢ã«ãŠã³ãã¯ã€ãïŒ [ããã€ã¹] > [ã¢ãã€ã«ãšãšã³ããã€ã³ã] > [ããã€ã¹] ãã端æ«ãéžæããŸãã Android ããã€ã¹ãéžæ [ãã®ä»] > [ã¢ã«ãŠã³ããã¯ã€ã] ãéžæããŸãã ã¢ã«ãŠã³ããã¯ã€ããéžæ [ã¢ã«ãŠã³ããã¯ã€ã] ãéžæããã¯ã€ããå®è¡ããŸãã ã¯ã€ãã®å®è¡ ã¯ã€ãåŸã®ããã€ã¹ã¹ããŒã¿ã¹ ã€ã³ã¹ããŒã«ããæ¥åã¢ããªãåé€ãããŠããããšã確èªããŸãã æ¥åã¢ããªã®åé€ç¢ºèª åè : ããã€ã¹ããäŒæ¥ããŒã¿ãã¯ã€ããã äžæµŠ 奿 (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2023幎10æããG-genã«ãžã§ã€ã³ãå
ãªã³ãã¬äžå¿ã®ãããã¯ãŒã¯ãšã³ãžãã¢ããããã¯ãŒã¯ã»ã»ãã¥ãªãã£ã»åæãã»èŸããã®ã奜ãã
G-gen ã®äœã
æšã§ããåœèšäºã§ã¯ BigQuery äžã§æ©æ¢°åŠç¿ã¢ãã«ãäœæãè©äŸ¡ãå®è¡ããããã®æ©èœã§ãã BigQuery ML ã«ã€ããŠè§£èª¬ããŸãã æŠèŠ BigQuery ãšã¯ BigQuery ML ãšã¯ BigQuery ML ã®äœ¿ç𿹿³ ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ BigQuery Editions ã¯ãšãªã®ãã©ã€ã©ã³ BigQuery ML ã§ãµããŒããããã¢ãã« å
éšã¢ãã« å€éšã¢ãã« ã€ã³ããŒããããã¢ãã« ãªã¢ãŒãã¢ãã« ãŠãŒã¶ãŒã Vertex AI ã§ãããã€ããã¢ãã« Google ã®çæ AI ã¢ãã« ã¿ã¹ã¯åºæã®ãœãªã¥ãŒã·ã§ã³ åºæ¬ç㪠SQL ã¹ããŒãã¡ã³ãã»é¢æ° CREATE MODEL ã¹ããŒãã¡ã³ã ML.EVALUATE 颿° ML.PREDICT 颿° ç¹åŸŽéã®ååŠç èªåååŠç æåååŠçïŒTRANSFORM ã¹ããŒãã¡ã³ãïŒ ã¢ãã«ã®ã¢ãã¿ãªã³ã° BigQuery ML ã®æé ãªã³ããã³ãæé BigQuery Editions ã®æé å€éšã¢ãã«ã®æé ãªã¢ãŒãã¢ãã«ã®æé ä»ã®æ©æ¢°åŠç¿ç³»ãããã¯ããšã®çµ±å Vertex AI Colab Enterprise æŠèŠ BigQuery ãšã¯ BigQuery ã¯ãGoogle Cloud ã®ãã«ãããŒãžãåæçšããŒã¿ããŒã¹ïŒããŒã¿ãŠã§ã¢ããŠã¹ïŒãµãŒãã¹ã§ããã€ã³ãã©ç®¡çäžèŠã®åæçšããŒã¿ããŒã¹ãåŸé課éã§äœ¿çšã§ããŸãã åœèšäºã§ã¯ BigQuery èªäœã®èª¬æã¯å²æããŸãããããã¯ãã®å
šå®¹ã«ã€ããŠã¯ä»¥äžã®èšäºããäžèªãã ããã blog.g-gen.co.jp blog.g-gen.co.jp BigQuery ML ãšã¯ BigQuery ML ãšã¯ãBigQuery äžã§æ©æ¢°åŠç¿ã¢ãã«ã®ãã¬ãŒãã³ã°ãäºæž¬ãè©äŸ¡ãè¡ãããšãã§ããæ©èœã§ããBigQuery ã§äœ¿ãããæšæº SQL æºæ ã® GoogleSQL ã䜿çšããBigQuery äžã®ããŒã¿ã䜿ã£ãæ©æ¢°åŠç¿ã容æã«å®çŸã§ããŸãã éåžžãæ©æ¢°åŠç¿ã¢ãã«ã®éçºã«ã¯ãæ©æ¢°åŠç¿ãã¬ãŒã ã¯ãŒã¯ã«å¯Ÿããé«åºŠãªç¥èãšããã°ã©ãã³ã°æè¡ãèŠæ±ãããŸãããã®ãããªå°éçã¹ãã«ãæã€ã¡ã³ããŒã®ç¢ºä¿ãé£ããå Žåã§ãã£ãŠããBigQuery ML ã§ã¯ SQL ã®ç¥èãããã°ã¢ãã«ã®éçºãè¡ãããšãã§ããŸã ã BigQuery ML ã§ã¯ãã¢ãã«ã®ãã¬ãŒãã³ã°ãäºæž¬ã§äœ¿çšããããŒã¿ã¯ BigQuery èªäœã«æ ŒçŽãããŠãããã®ãã·ãŒã ã¬ã¹ã«äœ¿çšããããšãã§ãã ããŒã¿ã®èç©ã»ã¢ãã«ã®åŠç¿ã»äºæž¬ã®å®è¡ã BigQuery å
ã§å®çµããŸãã ããã«ãããã¢ãã«éçºã®ããã®ç¿çãå¿
èŠãªããŒã«ãæžãããŸã倧éã®ããŒã¿ç§»åã«ããæéã»æéãªã©ã®ã³ã¹ããæããããšãã§ããŸãã åèïŒ BigQuery ã® AI ãš ML ã®æŠèŠ BigQuery ML ã®äœ¿ç𿹿³ ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ BigQuery ML ã¯ã以äžã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã§å©çšããããšãã§ããŸãã Google Cloud ã³ã³ãœãŒã« bq ã³ãã³ãã©ã€ã³ ããŒã« BigQuery REST API BigQuery ã«çµ±åããã Colab Enterprise ããŒããã㯠Jupyter ããŒãããã¯ãããžãã¹ ã€ã³ããªãžã§ã³ã¹ ãã©ãããã©ãŒã ãªã©ã®å€éšããŒã« Google Cloud ã³ã³ãœãŒã«ãã䜿çšãããšãBigQuery ã§éåžžã® SQL ãå®è¡ãããšããšåæ§ã®äœ¿çšæã§ BigQuery ML ã®æ©èœãå©çšããããšãã§ããŸãã 5çªç®ã® Jupyter ããŒãããã¯ã䜿ã£ãæ¹æ³ã«ã€ããŠã以äžã®èšäºã§ã¯ããã«ãããŒãžãã® Jupyter ããŒãããã¯ç°å¢ã§ãã Vertex AI Workbench ãããããžãã¯ã³ãã³ã %%bigquery ã§ BigQuery ML ã䜿çšããäŸã瀺ãããŠããŸãã blog.g-gen.co.jp BigQuery Editions BigQuery ã®èª²éã¢ãŒããšã㊠ãªã³ããã³ã ãéžæããŠããå ŽåãBigQuery ML ãåŸé課éã§äœ¿çšããããšãã§ããŸãã 課éã¢ãŒããšã㊠BigQuery Editions ãéžæããŠããå ŽåãBigQuery ML 㯠Enterprise ãã£ã¢ããã³ Enterprise Plus ãã£ã¢ã§ã®ã¿äœ¿çšããããšãã§ããŸãïŒStandard ãã£ã¢ã§ã¯äœ¿çšäžå¯ïŒã BigQuery Editions ã®è©³çްã«ã€ããŠã¯ä»¥äžã®èšäºããäžèªãã ããã blog.g-gen.co.jp ã¯ãšãªã®ãã©ã€ã©ã³ BigQuery ML ã«éãããBigQuery ã§ã¯ã¯ãšãªå®è¡åã« ãã©ã€ã©ã³ ãè¡ãããšã§ãå®éã«åŠçãè¡ãåã«ãåŠçãããããŒã¿éããªã³ããã³ãã§çºçããæéãèŠç©ãããšãã§ããŸãã ãã©ã€ã©ã³ã«ãããåŠçãããããŒã¿éãã¯ãšãªå®è¡åã«ç¢ºèªã§ãã åè : ãã©ã€ã©ã³ BigQuery ML ã§ãµããŒããããã¢ã㫠以éã«ç޹ä»ããã®ã¯2025幎1ææç¹ã§ãµããŒããããŠããã¢ãã«ã§ããææ°ã®ãµããŒãç¶æ³ã«ã€ããŠã¯ä»¥äžã®ãªã³ã¯å
ãåç
§ããŠãã ããã åèïŒ BigQuery ã® AI ãš ML ã®æŠèŠ - ãµããŒããããŠããã¢ãã« å
éšã¢ãã« BigQuery ML ã®çµã¿èŸŒã¿ã®ã¢ãã«ãšããŠã以äžã®ã¢ãã«ã䜿çšã㊠BigQuery å
éšã§ãã¬ãŒãã³ã°ãè¡ãããšãã§ããŸãã è²¢ç®åºŠåæïŒContribution analysisïŒ ïŒ2025幎1æçŸåšããã¬ãã¥ãŒïŒ ç·åœ¢ååž°ïŒLinear regressionïŒ ããžã¹ãã£ãã¯ååž°ïŒLogistic regressionïŒ K 平忳ã¯ã©ã¹ã¿ãªã³ã°ïŒK-means clusteringïŒ è¡ååè§£ïŒMatrix factorizationïŒ äž»æååæïŒPCA: Principal component analysisïŒ æç³»åïŒTime seriesïŒ ã¢ãã«ã®äœææã«äœ¿çšãã CREATE MODEL ã¹ããŒãã¡ã³ãïŒåŸè¿°ïŒã® OPTIONS ã§ããã¬ãŒãã³ã°ã«äœ¿çšããã¢ãã«ãæå®ã§ããŸãã å€éšã¢ã㫠以äžã®ã¢ãã«ã¯ BigQuery ML ã®å€éšã«ãããå¥ã® AI/ML ãµãŒãã¹ã§ãã Vertex AI ã䜿çšããŠãã¬ãŒãã³ã°ãããŸãã ãã£ãŒã ãã¥ãŒã©ã« ãããã¯ãŒã¯ïŒDNN: Deep neural networkïŒ ã¯ã€ãïŒãã£ãŒãïŒWide & DeepïŒ ãªãŒããšã³ã³ãŒãïŒAutoencoderïŒ ããŒã¹ãããªãŒïŒBoosted TreeïŒ ã©ã³ãã ãã©ã¬ã¹ãïŒRandom forestïŒ AutoML ã€ã³ããŒããããã¢ãã« BigQuery ã®å€éšã§ãã¬ãŒãã³ã°ãããã«ã¹ã¿ã ã¢ãã«ã Cloud Storage ããã€ã³ããŒãããBigQuery ML ã§äºæž¬ãå®è¡ããããšãã§ããŸããBigquery ML ã§ã€ã³ããŒãã§ããã¢ãã«ã®çš®é¡ã¯ä»¥äžã®éãã§ãã Open Neural Network ExchangeïŒONNXïŒ TensorFlow TensorFlow Lite XGBoost ãªã¢ãŒãã¢ãã« ãŠãŒã¶ãŒã Vertex AI ã§ãããã€ããã¢ãã« ãªã¢ãŒãã¢ãã« ã§ã¯ãVertex AI ã§ãããã€ããæ©æ¢°åŠç¿ã¢ãã«ã䜿çšããŠäºæž¬ãå®è¡ããããšãã§ããŸããã¢ãã«ã倧ããã㊠BigQuery ã«ã€ã³ããŒãã§ããªãå Žåãªã©ã«äœ¿çšããŸãã Vertex AI ã§ãããã€ããã¢ãã«ããªã¢ãŒãã¢ãã«ãšããŠäœ¿çšãã Google ã®çæ AI ã¢ãã« BigQuery ML ããã¯ã Gemini çãVertex AI ã§æäŸããã Google ã®çæ AI ã¢ãã« ããªã¢ãŒãã¢ãã«ãšããŠå©çšã§ããŸãã 以äžã®èšäºã§ã¯ãBigQuery ML ã®ãªã¢ãŒãã¢ãã«ã§ Google éçºã®å€§èŠæš¡èšèªã¢ãã«ã§ãã PaLM 2 ã䜿çšããŠãããã¹ãã®ææ
åæãè¡ã£ãŠããŸãã blog.g-gen.co.jp ãªã¢ãŒãã¢ãã«ãšããŠäœ¿çšã§ããçæ AI ã¢ãã«ã®ææ°æ
å ±ã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åèïŒ Generative AI overview ã¿ã¹ã¯åºæã®ãœãªã¥ãŒã·ã§ã³ BigQuery ML ãããGoogle Cloud ãçšæãããç¹å®ã®ã¿ã¹ã¯ã«ç¹åããæ©æ¢°åŠç¿ã¢ãã«ã® APIïŒ äºåãã¬ãŒãã³ã°æžã¿ API ïŒãå©çšã§ããŸãã å©çšå¯èœãªäºåãã¬ãŒãã³ã°æžã¿ API ã«ã¯ä»¥äžã®ãããªçš®é¡ããããŸãããããã GoogleSQL ã®é¢æ°ã䜿çšããŠãªã¯ãšã¹ããéä¿¡ããŸãã ã¿ã¹ã¯ API ã®åå GoogleSQL ã®é¢æ° èªç¶èšèªåŠç Cloud Natural Language API ML.UNDERSTAND_TEXT æ©æ¢°ç¿»èš³ Cloud Translation API ML.TRANSLATE é³å£°æå倿 Speech-to-Text API ML.TRANSCRIBE ããã¥ã¡ã³ãåŠç Document AI API ML.PROCESS_DOCUMENT ã³ã³ãã¥ãŒã¿ ããžã§ã³ Cloud Vision API ML.ANNOTATE_IMAGE åºæ¬ç㪠SQL ã¹ããŒãã¡ã³ãã»é¢æ° å
¬åŒããã¥ã¡ã³ãã®ãã¥ãŒããªã¢ã« ãå
ã«ãBigQuery ML ã«ãããåºæ¬ç㪠SQL æã解説ããŸãã ã¢ãã«ãå Žé¢ã«å¿ããŠã©ã®ãããªã¹ããŒãã¡ã³ãã»é¢æ°ã䜿çšã§ããã®ãã¯ã以äžã®ããã¥ã¡ã³ãã§è§£èª¬ãããŠããŸãã åèïŒ åã¢ãã«ã®ãšã³ãããŒãšã³ãã®ãŠãŒã¶ãŒ ãžã£ãŒã㌠CREATE MODEL ã¹ããŒãã¡ã³ã BigQuery ML ã§ã¯ãGoogleSQL ã® CREATE MODEL ã¹ããŒãã¡ã³ãã䜿çšããŠã¢ãã«ã®ãã¬ãŒãã³ã°ãè¡ããŸãã ã¢ãã«ã®äœæã«ã¯ CREATE MODEL ã®ä»ã«ãããŒã¿ã»ããå
ã«åãååã®ã¢ãã«ãååšããªãå Žåã®ã¿ã¢ãã«ãäœæãã CREATE MODEL IF NOT EXISTS ããåãååã®ã¢ãã«ãååšããŠããå Žåã¯çœ®ãæãã CREATE OR REPLACE MODEL ã¹ããŒãã¡ã³ããå©çšã§ããŸãã 以äžã¯ã CREATE OR REPLACE MODEL ã¹ããŒãã¡ã³ãã䜿çšããŠã bqml_tutorial ããŒã¿ã»ããå
ã« sample_model ãšããååã§ããžã¹ãã£ãã¯ååž°ã¢ãã«ãäœæããäŸã§ãã #standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.sample_model` OPTIONS(model_type = ' logistic_reg ' ) AS SELECT IF (totals.transactions IS NULL , 0 , 1 ) AS label, IFNULL(device.operatingSystem, "" ) AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "" ) AS country, IFNULL(totals.pageviews, 0 ) AS pageviews FROM `bigquery- public -data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN ' 20160801 ' AND ' 20170630 ' 䜿çšããã¢ãã«ã¯ OPTIONS ã® model_type= ã§èšå®ããŠããŸãã FROM ã§æå®ããããŒã¿ããã SELECT ã§æå®ããç¹åŸŽéã䜿çšããŠã¢ãã«ã®åŠç¿ãè¡ã£ãŠããŸãã Google Cloud ã³ã³ãœãŒã«ã ML.TRAINING_INFO 颿°ã䜿çšããããšã§ãã¢ãã«ã®ãã¬ãŒãã³ã°æã®çµ±èšæ
å ±ã確èªããããšãã§ããŸãã ã¯ãšãªã®çµæãšããŠãã¬ãŒãã³ã°æã®çµ±èšæ
å ±ã確èªã§ãã ãã¬ãŒãã³ã°ããã¢ãã«ã®åçš®è©äŸ¡ææšã¯ãã¢ãã«ã®è©³çްãããã€ã§ã確èªããããšãã§ããŸãã äœæããã¢ãã«ã®åçš®è©äŸ¡ææšã確èªãã åèïŒ ã¢ãã«ã®äœæ ML.EVALUATE 颿° äœæããã¢ãã«ã®è©äŸ¡ã¯ ML.EVALUATE 颿°ã§è¡ãããšãã§ããŸãã 以äžã® SQL ãå®è¡ããããšã§ã ML.EVALUATE 颿°ã® MODEL åŒæ°ã§æå®ããã¢ãã«ã«å¯ŸããŠè©äŸ¡ãè¡ããŸãã #standardSQL SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.sample_model`, ( SELECT IF (totals.transactions IS NULL , 0 , 1 ) AS label, IFNULL(device.operatingSystem, "" ) AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "" ) AS country, IFNULL(totals.pageviews, 0 ) AS pageviews FROM `bigquery- public -data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN ' 20170701 ' AND ' 20170801 ' ) ) ã³ã³ãœãŒã«äžã§ã®åºåã¯ä»¥äžã®ããã«ãªããŸãã ML.EVALUATE 颿°ã«ããã¢ãã«ã®è©äŸ¡ è©äŸ¡æã«åºåãããææšã¯ã¢ãã«ã®çš®é¡ã«ãã£ãŠç°ãªããŸãããŸãã ML.CONFUSION_MATRIX ïŒæ··åè¡åïŒã ML.ROC_CURVE ïŒROC æ²ç·ïŒãªã©ã®é¢æ°ãæäŸãããŠããŸãã 詳现ã¯ä»¥äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åèïŒ BigQuery ML ã¢ãã«ã®è©äŸ¡ã®æŠèŠ ML.PREDICT 颿° äœæããã¢ãã«ã䜿çšããŠäºæž¬ãè¡ãã«ã¯ã ML.PREDICT 颿°ã䜿çšããŸãã 以äžã®ããã« ML.PREDICT 颿°ã® MODEL åŒæ°ã§æå®ããã¢ãã«ã䜿çšããŠäºæž¬ãè¡ããŸãã #standardSQL SELECT country, SUM (predicted_label) AS total_predicted_purchases FROM ML.PREDICT( MODEL `bqml_tutorial.sample_model`, ( SELECT IFNULL(device.operatingSystem, "" ) AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0 ) AS pageviews, IFNULL(geoNetwork.country, "" ) AS country FROM `bigquery- public -data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN ' 20170701 ' AND ' 20170801 ' ) ) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10 ã³ã³ãœãŒã«äžã§ã®åºåã¯ä»¥äžã®ããã«ãªããŸãã ML.PREDICT 颿°ã«ããäºæž¬ åèïŒ ã¢ãã«æšå®ã®æŠèŠ ç¹åŸŽéã®ååŠç èªåååŠç BigQuery ML ã§ã¯èªåååŠçãšããŠãã¢ãã«ã®ãã¬ãŒãã³ã°æã«ä»¥äžã®ååŠçãèªåã§è¡ã£ãŠããŸãã æ¬ æããŒã¿ã®è£å® å€ã®å€æïŒæšæºåãã¯ã³ããããšã³ã³ãŒãã£ã³ã°ãã¿ã€ã ã¹ã¿ã³ãã®å€æãªã©ïŒ èªåååŠçã®è©³çްã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åèïŒ èªåç¹åŸŽååŠç æåååŠçïŒTRANSFORM ã¹ããŒãã¡ã³ãïŒ TRANSFORM ã¹ããŒãã¡ã³ãã䜿çšããããšã§ãååŠççšã®é¢æ°ã䜿çšããããšãã§ããŸãã ããšãã°ã以äžã® SQL ã§ã¯ã ML.QUANTILE_BUCKETIZE 颿°ã§ mother_age åã® ãã±ããåïŒããã³ã°ïŒ ãã ML.FEATURE_CROSS 颿°ã§ is_male åãš mother_race åã® ç¹åŸŽã¯ãã¹ ãäœæããååŠçãè¡ã£ãŠããã¢ãã«ãäœæããŠããŸãã #standardSQL CREATE MODEL `bqml_tutorial.natality_model` TRANSFORM( weight_pounds, is_male, gestation_weeks, ML.QUANTILE_BUCKETIZE(mother_age, 5 ) OVER() AS bucketized_mother_age, CAST (mother_race AS string) AS mother_race, ML.FEATURE_CROSS( STRUCT( is_male, CAST (mother_race AS STRING) AS mother_race ) ) is_male_mother_race ) OPTIONS ( model_type = ' linear_reg ' , input_label_cols = [ ' weight_pounds ' ] ) AS SELECT * FROM `bigquery- public -data.samples.natality` WHERE weight_pounds IS NOT NULL AND RAND() < 0 . 001 ãã®ä»ãæåååŠçã«äœ¿çšã§ãã颿°ã«ã€ããŠã¯ä»¥äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åèïŒ æåã§ã®ç¹åŸŽã®ååŠç ã¢ãã«ã®ã¢ãã¿ãªã³ã° ML.VALIDATE_DATA_SKEW 颿°ã ML.VALIDATE_DATA_DRIFT 颿°ã䜿çšããããšã§ããã¬ãŒãã³ã°ã«äœ¿çšããããŒã¿ãšãå®éã®ã¢ãã«éçšæã«äºæž¬ã«äœ¿çšãããããŒã¿ïŒãµãŒãã³ã°ããŒã¿ïŒã®çµ±èšæ
å ±ãæ¯èŒãã ããŒã¿ã¹ãã¥ãŒ ã ããŒã¿ããªãã ã®çºçãæ€ç¥ããããšãã§ããŸãã ããŒã¿ã¹ãã¥ãŒïŒData SkewïŒ ãšã¯ããã¬ãŒãã³ã°ã§äœ¿çšããããŒã¿ã®ååžãšãæ¬çªç°å¢ã§æäŸãããããŒã¿ã®ååžã倧ããç°ãªã£ãŠããããšã«ãããã¢ãã«ã®äºæž¬æ§èœãäžãã£ãŠããŸãçŸè±¡ã®ããšã§ãããã¬ãŒãã³ã°ãé©åã«è¡ããŠããªãç¶æ³ã§ãããšèããããŸãã ããŒã¿ããªããïŒData DriftïŒ ãšã¯ãæ¬çªç°å¢ã§æäŸãããããŒã¿ã®ååžãæéã®çµéãšãšãã«å€§ããå€åããŠããŸãããšã«ãããã¢ãã«ã®äºæž¬æ§èœãäžãã£ãŠããŸãçŸè±¡ã®ããšã§ããã¢ãã«ã®å£åãšæããŠãããã§ãããã ã¢ãã«ã®ã¢ãã¿ãªã³ã°ã«äœ¿çšã§ãã颿°ã®çš®é¡ã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åèïŒ ã¢ãã« ã¢ãã¿ãªã³ã°ã®æŠèŠ BigQuery ML ã®æé BigQuery ML ã®æéã®è©³çްããã³ææ°æ
å ±ã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åèïŒ BigQuery ML pricing ãªã³ããã³ãæé BigQuery ã®èª²éã¢ãŒãããªã³ããã³ãã®å ŽåãBigQuery ã§åŠçãããããŒã¿ã®ãã€ãæ°ã«å¿ããŠèª²éãçºçããŸããã¢ãã«äœæãšäºæž¬ã§ãã€ãæ°ãããã®æéå䟡ãç°ãªãç¹ã«æ³šæãå¿
èŠã§ãã ããšãã°ãããžã¹ãã£ãã¯ååž°ã¢ãã«ãç·åååž°ã¢ãã«ã®äœææã®ãã¬ãŒãã³ã°ã§ã¯ $375/1TB ãè©äŸ¡ã»äºæž¬ã¿ã¹ã¯ã§ã¯ $7.5/1TB ã®æéãçºçããŸãïŒæ±äº¬ãªãŒãžã§ã³ã2025幎1ææç¹ïŒã BigQuery Editions ã®æé 課éã¢ãŒããšã㊠BigQuery Editions ãå©çšããå ŽåãBigQuery ML ã®æé㯠Editions ã®äœ¿çšéã«å«ãŸããŸãã 䜿çšããã¢ãã«ã«ãã£ãŠå©çšããã Editions ã®å²ãåœãŠ ãç°ãªããå
éšã¢ãã«ã®äœæã»äºæž¬ã«ã¯ Editions ã® QUERY å²ãåœãŠããå€éšã¢ãã«ã®å©çšã«ã¯ ML_EXTERNAL ãå©çšãããŸãã å€éšã¢ãã«ã®æé BigQuery å€éšã®ã¢ãã«ã䜿çšããŠãã¬ãŒãã³ã°ãè¡ãå€éšã¢ãã«ã§ã¯ããªã³ããã³ãã®æéããã㯠BigQuery Editions ã®æéïŒBigQuery ã§åŠçãããã¶ãã®æéïŒã«å ãã Vertex AI ã®ãã¬ãŒãã³ã°æé ãçºçããŸãã ãªã¢ãŒãã¢ãã«ã®æé ãªã¢ãŒãã¢ãã«ã§ãå€éšã¢ãã«åæ§ã«ã BigQuery ã§åŠçãããã¶ãã®æéã«å ãããªã¢ãŒãã¢ãã«ãšããŠäœ¿çšãããµãŒãã¹ã®æéãé©çšãããŸãã ããšãã°ããªã¢ãŒãã¢ãã«ãšã㊠Cloud AI Vision API ã䜿çšããå Žå㯠Cloud AI Vision API ã®æé ããVertex AI ã®åºç€ã¢ãã«ïŒçæ AI ã¢ãã«ïŒã䜿çšããå Žå㯠Vertex AI ã®æé ã远å ã§çºçããŸãã ä»ã®æ©æ¢°åŠç¿ç³»ãããã¯ããšã®çµ±å Vertex AI Vertex AI ã¯æ©æ¢°åŠç¿ã¢ãã«ã®éçºã«é¢ããæ§ã
ãªæ©èœãçµ±åããããããã¯ãã§ãã Vertex AI ã«ã¯éçºããæ©æ¢°åŠç¿ã¢ãã«ãéäžç®¡çããããã® Model Registry ãšããæ©èœããããBigQuery ML ã§éçºããã¢ãã«ãããã§ç®¡çããããšãã§ããŸãã Model Registory ã§ç®¡çãããŠããã¢ãã«ã¯ããŒãžã§ãã³ã°ãè©äŸ¡ããããã€ã容æã«è¡ãããšãã§ããŸããVertex AI ã® Endpoints æ©èœã§ã¯ããã«ãããŒãžãã®å®è¡ç°å¢ã«ã¢ãã«ããããã€ããçæããããšã³ããã€ã³ãã䜿çšããŠãªã³ã©ã€ã³ã®äºæž¬ãå®è¡ããããšãã§ããŸãã Vertex AI ã®è©³çްã«ã€ããŠã¯ã以äžã®èšäºããäžèªãã ããã blog.g-gen.co.jp Colab Enterprise Colab Enterprise ã¯ãGoogle Cloud äžã«äºåæ§ç¯ããããããŒãžããªããŒãããã¯ç°å¢ãæäŸãããµãŒãã¹ã§ãã Colab Enterprise ã®ããŒãããã¯ã䜿çšããŠãããŒãããã¯ãã BigQuery ML ã«ããã¿ã¹ã¯ãå®è¡ããããšãã§ããŸããã¢ãã«ã®éçºæã« Python ã®æ©æ¢°åŠç¿ã©ã€ãã©ãªã䜿çšããè€éãªããŒã¿åŠçãå¿
èŠãªå Žåãªã©ã«æŽ»çšã§ããŸãã Colab Enterprise ã®ãµãŒãã¹è©³çްã«ã€ããŠã¯ã以äžã®èšäºããäžèªãã ããã blog.g-gen.co.jp äœã
æš é§¿å€ª (èšäºäžèЧ) G-genæå端ãåæµ·éåšäœã®ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšãšã³ãžã㢠2022幎6æã«G-genã«ãžã§ã€ã³ãGoogle Cloud Partner Top Engineer 2025 Fellowã«éžåºã奜ããªGoogle Cloudãããã¯ãã¯Cloud Runã è¶£å³ã¯ã³ãŒããŒãå°èª¬ïŒSFããã¹ããªïŒãã«ã©ãªã±ãªã©ã Follow @sasashun0805
G-gen ã®åºå£ã§ããæ¬èšäºã§ã¯ãEventarc ãš Workflows ãå©çšã㊠ã€ãã³ãããªãã³ã« Cloud Run jobs ãå®è¡ããæ¹æ³ãã玹ä»ããŸãã æŠèŠ Cloud Run functions ãš Cloud Run jobs æ€èšŒã®æŠèŠ Eventarc Workflows Cloud Storage ã®æºå Cloud Storage ãã±ããã®äœæ Cloud Strage ãµãŒãã¹ãšãŒãžã§ã³ããžã®æš©éä»äž BigQuery ããŒãã«ã®äœæ Cloud Run jobs ã®äœæ ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ Docker ã³ã³ããã®äœæã«å¿
èŠãªãªãœãŒã¹ã®äœæ main.py requirements.txt Procfile Artifact Registry ã®äœæ Artifact Registry ã«ã¢ããããŒã Cloud Run jobs ã®äœæ Workflows ã®äœæ ãµãŒãã¹ã¢ã«ãŠã³ãã®èšå® ã¯ãŒã¯ãããŒã®äœæ cloud-run-job-workflow.yaml ã¯ãŒã¯ãããŒã®ããã〠Eventarc ããªã¬ãŒã®èšå® ãµãŒãã¹ã¢ã«ãŠã³ãã®èšå® Eventarc ã®äœæ åäœç¢ºèª æŠèŠ Cloud Run functions ãš Cloud Run jobs ã€ãã³ãããªãã³ã«ããŒã¿ãåŠçããã«ã¯ãCloud Run functions ã䜿ã£ãæ¹æ³ãªã©ããããŸããäŸãã°ãCloud Storage ã«ãªããžã§ã¯ããæ ŒçŽããããèªåçã« Cloud Run functions ãèµ·åãããããªåŠçããéåžžã«ç°¡åã«å®è£
ã§ããŸããããããCloud Run functions ã«ã¯æå€§9åïŒã€ãã³ãããªãã³é¢æ°ã®å ŽåïŒã®å®è¡æéå¶éããããªã©ãããã€ãã®å¶çŽããããŸãã åœèšäºã§ã¯ã Cloud Run jobs ã䜿ã£ãŠã€ãã³ãããªãã³ãªåŠçãå®çŸããæ€èšŒãè¡ããŸãããCloud Run jobs ã«ã¯ãCloud Run functions ãšæ¯èŒããŠä»¥äžã®ãããªã¡ãªããããããŸãã æå€§å®è¡æéã168æéã§ããããšïŒ2025幎1æçŸåšã§ã¯24æéãè¶
ããåŠç㯠PreviewïŒ ã¿ã¹ã¯ã®äžŠåå®è¡æ°ãæç€ºçã«æå®å¯èœã§ããããš Cloud Run jobs ã«ã€ããŠã¯ä»¥äžã®èšäºã§è§£èª¬ããŠããŸãã®ã§ããåç
§ãã ããã blog.g-gen.co.jp ãŸã以äžã®èšäºã§ã¯ãCloud Storage ã«ããã¹ããã¡ã€ã«ãæ ŒçŽãããããšãèµ·ç¹ãšã㊠Cloud Run functions ãåŒã³åºããVertex AI Gemini API ã§ååŸããããã¹ãã®èŠçŽçµæã BigQuery ã«ä¿åããåŠçãå®è£
ããŠããŸãã blog.g-gen.co.jp åœèšäºã§ã¯ãäžèšèšäºã® Cloud Run functions ã®éšåã Cloud Run jobs ã«çœ®ãæããŠãã€ãã³ãããªãã³ã« Cloud Run jobs ãå®è¡ããæ§æãå®è£
ããŸãã æ€èšŒã®æŠèŠ åœèšäºã§è¡ã£ãæ€èšŒã®ã¢ãŒããã¯ãã£ã¯ä»¥äžã®éãã§ãã ããŒã«ã« PC ããæ¥å ±ã®ããã¹ããã¡ã€ã«ã Cloud Storage ã«ã¢ããããŒã ãã¡ã€ã«ãã¢ããããŒããããããšãæ€ç¥ã㊠Eventarc ããªã¬ãŒã Workflows ãèµ·å Workflows ãåãåã£ãã€ãã³ãæ
å ±ãç°å¢å€æ°ã«ã»ããã㊠Cloud Run jobs ãèµ·å Cloud Run jobs ã Gemini ã§æ¥å ±ãã¡ã€ã«ãèŠçŽããçµæã BigQuery ããŒãã«ã«æ ŒçŽ Eventarc Eventarc 㯠Google Cloud ã§ã€ãã³ãããªãã³ã¢ãŒããã¯ãã£ãæ§ç¯ããããã®ãã«ãããŒãžããµãŒãã¹ã§ããã€ãã³ãã®çºçå
ããæ§ã
ãªå®å
ãžã®è»¢éãããµãŒãã¬ã¹ã§å®¹æã«æ§ç¯ã§ããŸãã åè : Eventarc ã®æŠèŠ åè : ã€ãã³ã ããªãã³ ã¢ãŒããã¯ã㣠以äžã®èšäºã§ã¯ Eventarc ã䜿ã£ãã¢ãŒããã¯ãã£ã®äŸã玹ä»ãããŠããŸãã®ã§ããåç
§ãã ããã blog.g-gen.co.jp Workflows Workflows ïŒãŸã㯠Cloud WorkflowsïŒã¯ Google Cloud ã®ãã«ãããŒãžãã§ãµãŒããŒã¬ã¹ãªãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãµãŒãã¹ã§ããå®çŸ©ããé çªã« Cloud Run ã Cloud Run functions ãå®è¡ããããBigQuery ã§ã¯ãšãªãçºè¡ãããªã©ãæ§ã
㪠Google Cloud ãµãŒãã¹ãå®è¡ããããä»»æã® HTTP ãšã³ããã€ã³ãã«ãªã¯ãšã¹ããéãããšãã§ããŸãã åè : ã¯ãŒã¯ãããŒã®æŠèР以äžã®èšäºã§ Workflows ã«ã€ããŠè§£èª¬ããŠããŸãã®ã§ããåç
§ãã ããã blog.g-gen.co.jp Cloud Storage ã®æºå Cloud Storage ãã±ããã®äœæ æ¥å ±ãã¡ã€ã«ãã¢ããããŒãããããã®ãã±ãããäœæããŸãã ãã±ããåã«çœ®ãæããŠãã ãã ã®éšåããäœæããããã±ããåã«çœ®ãæããŠã以äžã®ã³ãã³ããå®è¡ããŸãã BUCKET_NAME = " äœæããããã±ããåã«çœ®ãæããŠãã ãã " gcloud storage buckets create gs:// ${BUCKET_NAME} --location = asia-northeast1 Cloud Strage ãµãŒãã¹ãšãŒãžã§ã³ããžã®æš©éä»äž Cloud Storage ããã®ããªã¬ãŒãäœæããå ŽåãPub/Sub ãããªãã·ã£ãŒã®ããŒã«ããããžã§ã¯ãã® Cloud Storage ãµãŒãã¹ãšãŒãžã§ã³ãã«ä»äžããå¿
èŠããããŸãã ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ãã ã®éšåãããèªèº«ã®ãããžã§ã¯ã ID ã«çœ®ãæããŠã以äžã®ã³ãã³ããå®è¡ããŸãã PROJECT = " ãããžã§ã¯ã ID ã«çœ®ãæããŠãã ãã " SERVICE_ACCOUNT = " $( gcloud storage service-agent --project = ${PROJECT}) " gcloud projects add-iam-policy-binding ${PROJECT} \ --member =" serviceAccount: ${SERVICE_ACCOUNT} " \ --role =' roles/pubsub.publisher ' BigQuery ããŒãã«ã®äœæ æ¥å ±ããŒã¿ãæ ŒçŽããããã® BigQuery ããŒãã«ãäœæããŸãã 以äžã®ã³ãã³ãã§ã¯ã report ãšããååã®ããŒã¿ã»ãããšã daily_report ãšããååã®ããŒãã«ãäœæããŸãã # ããŒã¿ã»ãããäœæ bq --location = asia-northeast1 mk \ --dataset \ ${PROJECT} :report # ããŒãã«ãäœæ bq mk \ --table \ --schema date:DATE,name:STRING,text:STRING \ --clustering_fields date,name \ ${PROJECT} :report.daily_report name ã«ã©ã ãš date ã«ã©ã ãã¯ã©ã¹ã¿åããŠããŒãã«ãäœæããããšã§ãname ã«ã©ã ããã³ date ã«ã©ã ã§ãã£ã«ã¿ããããã¯ãšãªãå®è¡ãããšãã«ã¹ãã£ã³éãåæžããŠãããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã Cloud Run jobs ã®äœæ ãµãŒãã¹ã¢ã«ãŠã³ãã®äœæ Cloud Run jobs ã§äœ¿çšãããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãã Cloud Run jobs ã Gemini API ã§æç« ãèŠçŽããããBigQuery ã«ããŒã¿ãæžã蟌ãã ãããã°ãåºåãããããããã«ã以äžã®ããŒã«ã Workflows ã§äœ¿çšãããµãŒãã¹ã¢ã«ãŠã³ãã«ä»äžããå¿
èŠããããŸãã BigQuery ããŒã¿ç·šéè
ïŒ roles/bigquery.dataEditor ïŒ BigQuery ãžã§ããŠãŒã¶ãŒïŒ roles/bigquery.jobUser ïŒ Storage ãªããžã§ã¯ãé²èЧè
ïŒ roles/storage.objectViewer ïŒ Vertex AI ãŠãŒã¶ãŒïŒ roles/aiplatform.user ïŒ ãã°æžã蟌ã¿ïŒ roles/logging.logWriter ïŒ ä»¥äžã®ã³ãã³ããå®è¡ãããšã sa-daily-report-job ãšããååã®ãµãŒãã¹ã¢ã«ãŠã³ããäœæããããã®åŸãå¿
èŠãªããŒã«ãä»äžãããŸãã gcloud iam service-accounts create sa-daily-report-job gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/bigquery.dataEditor gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/bigquery.jobUser gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/storage.objectViewer gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/aiplatform.user gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/logging.logWriter Docker ã³ã³ããã®äœæã«å¿
èŠãªãªãœãŒã¹ã®äœæ äž»èŠãªåŠçã Python ã³ãŒãã§å®è¡ãã main.py ãã³ãŒãå
ã§å©çšããããã±ãŒãžããªã¹ãåãã requirements.txt ããã㊠Procfile ãäœæããŸãã Procfile ãšã¯ãã³ã³ããã®èµ·åæã«åŒã³åºãããããã»ã¹ãå®çŸ©ãããã¡ã€ã«ã§ãPython ã§ Buildpack ãå©çšããå Žåã«ãããŠã¯ããã¡ã€ã«ã®äœæãå¿
é ã«ãªããŸããBuildpack ãå©çšããã°ãDockerfile ãäœæããã«ã³ãŒããã³ã³ããã€ã¡ãŒãžã«å€æããããšãã§ããŸãã åè : Google Cloud ã® Buildpack åè : Procfile ã«ã€ã㊠main.py import vertexai from vertexai.generative_models import GenerativeModel, Part, SafetySetting import os import argparse from datetime import datetime import logging from google.cloud import bigquery, storage import google.cloud.logging PROJECT_ID = os.environ.get( "PROJECT_ID" ) REGION = os.environ.get( "REGION" ) DATASET_ID = os.environ.get( "DATASET_ID" ) TABLE_ID = os.environ.get( "TABLE_ID" ) TABLE_NAME = f "{PROJECT_ID}.{DATASET_ID}.{TABLE_ID}" INPUT_BUCKET = os.environ.get( "INPUT_BUCKET" ) INPUT_FILE = os.environ.get( "INPUT_FILE" ) # Vertex AI ã®åæå vertexai.init(project=PROJECT_ID, location=REGION) # Cloud Logging ã¯ã©ã€ã¢ã³ãã®ã€ã³ã¹ã¿ã³ã¹å logger_client = google.cloud.logging.Client() logger_client.setup_logging() logger = logging.getLogger() logger.setLevel(logging.DEBUG) # Cloud Storage ã¯ã©ã€ã¢ã³ãã®ã€ã³ã¹ã¿ã³ã¹å storage_client = storage.Client() # Cloud Storage ãããã¡ã€ã«ãèªãã§ Gemini ã«èŠçŽããã颿° def summarize_text_from_file () -> str : try : # Cloud Storage ã«ãããã¡ã€ã«ã®ããã¹ããèªã¿åã bucket = storage_client.bucket(INPUT_BUCKET) blob = bucket.blob(INPUT_FILE) file_content = blob.download_as_string() text = file_content.decode( "utf-8" ) except Exception as e: logger.error(f "Error during reading file: {e}" ) raise try : # Gemini ã«èŠçŽããã model = GenerativeModel( "gemini-1.5-flash-002" ) generation_config = { "max_output_tokens" : 500 , "temperature" : 0.1 , "top_p" : 0.1 , } response = model.generate_content( f """以äžã®æç« ãèŠçŽããŠãã ãã: \n {file_content} \n èŠçŽ: \n """ , generation_config=generation_config ) except Exception as e: logger.error(f "Error during summarization: {e}" ) raise return response.candidates[ 0 ].content.parts[ 0 ].text # BigQuery ã®ããŒãã«ã«ããŒã¿ãæ¿å
¥ãã颿° def insert_into_bigquery (summary_text: str ): try : # ãã¡ã€ã«ã®ååããæ¥ä»ãšååãååŸãã file = INPUT_FILE.split( "/" )[- 1 ] # ãã©ã«ãéšåãæ¶ã date_str, name_txt = file .split( "_" ) name = name_txt.split( "." )[ 0 ] try : date_object = datetime.strptime(date_str, '%Y%m%d' ) formatted_date = date_object.strftime( "%Y-%m-%d" ) except ValueError : raise ValueError ( "Invalid filename date format. Expected YYYYMMDD." ) client = bigquery.Client(project=PROJECT_ID) table_ref = client.get_table(f "{TABLE_NAME}" ) # éè€ã«ãªããªãããã«ãããŒã¿ãæ¿å
¥ãã query = f """MERGE {TABLE_NAME} t USING ( SELECT CAST('{formatted_date}' AS DATE) AS date, '{name}' AS name, '''{summary_text}''' AS text) i ON t.date = i.date AND t.name = i.name WHEN MATCHED THEN UPDATE SET text = i.text WHEN NOT MATCHED THEN INSERT (date, name, text) VALUES (i.date, i.name, i.text)""" query_job = client.query(query) try : query_job.result() logger.debug(f "{INPUT_FILE} insert successful." ) except Exception as e: logger.error(f "{INPUT_FILE} insert failed: {e}" ) raise except Exception as e: logger.error(f "An unexpected error occurred while insert into bigquery: {e}" ) raise if __name__ == "__main__" : summary_result = summarize_text_from_file() insert_into_bigquery(summary_result) requirements.txt google-cloud-aiplatform== 1.73 . 0 google-cloud-bigquery== 3.25 . 0 google-cloud-logging== 3.11 . 2 Procfile Buildpacks ã§ã¯ web ããã»ã¹ãå®çŸ©ããããšãå¿
é ã§ããweb ããã»ã¹ãå®çŸ©ããªãã£ãå Žåã web process not found in Procfile ãšãããšã©ãŒãçºçããŸãã ãã ããä»å㯠HTTP ãã©ãã£ãã¯ãåä¿¡ããå¿
èŠããªãã®ã§ãå®éã«ã¯ web ããã»ã¹ã¯äœ¿çšãããŸããã web: echo "no web" python: python Artifact Registry ã®äœæ ã³ã³ããã€ã¡ãŒãžãä¿åããããã® Artifact Registry æšæºãªããžããªãäœæããŸãã 以äžã®ã³ãã³ãã§ã¯ã my-repo ãšããååã®ãªããžããªãäœæããŸãã gcloud artifacts repositories create my-repo \ --repository-format = docker \ --location = asia-northeast1 Artifact Registry ã«ã¢ããããŒã Buildpack ã䜿çšããŠã³ã³ããã€ã¡ãŒãžããã«ãããäœæãã Artifact Registry ãªããžããªã«ããã·ã¥ããŸãã 以äžã®ã³ãã³ãã§ã¯ããœãŒã¹ã³ãŒãããã«ããã my-repo ãªããžããªã« daily-report-job ãšããã€ã¡ãŒãžåã§ããã·ã¥ããŸãã gcloud builds submit --pack image =asia-northeast1-docker.pkg.dev/ ${PROJECT} /my-repo/daily-report-job Cloud Run jobs ã®äœæ 以äžã®ã³ãã³ãã§ã¯ã daily-report-job ãšããååã® Cloud Run jobs ãäœæããŸãã gcloud run jobs create daily-report-job \ --image = asia-northeast1-docker.pkg.dev/ ${PROJECT} /my-repo/daily-report-job:latest \ --command = python \ --args = main.py \ --region = asia-northeast1 \ --service-account = sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com --set-env-vars = INPUT_BUCKET = ${BUCKET_NAME} , INPUT_FILE =input_file.txt, PROJECT_ID = ${PROJECT} , DATASET_ID =report, TABLE_ID =daily_report ç°å¢å€æ° INPUT_BUCKET ããã³ INPUT_FILE ã¯ãå®éã«ã¯ Workflows ããžã§ããèµ·åããéã«éãããŠããã€ãã³ãæ
å ±ãå©çšããŠãªãŒããŒã©ã€ããããŸãã Workflows ã®äœæ ãµãŒãã¹ã¢ã«ãŠã³ãã®èšå® Workflows ã§äœ¿çšãããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãã Workflows ã¯ç°å¢å€æ°ããªãŒããŒã©ã€ãã㊠Cloud Run jobs ãèµ·åããå®è¡çµæãåãåãããã«ã以äžã®ããŒã«ã Workflows ã§äœ¿çšãããµãŒãã¹ã¢ã«ãŠã³ãã«ä»äžããå¿
èŠããããŸãã Cloud Run ããããããŒïŒ roles/run.developer ïŒ ãªãç°å¢å€æ°ããªãŒããŒã©ã€ãã㊠Cloud Run jobs ãèµ·åããããŒã«ãšããŠãäžèšã®ä»ã«ããªãŒããŒã©ã€ãã䜿çšãã Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ïŒ roles/run.jobsExecutorWithOverrides ïŒãããŒã«ããããŸããããã¡ãã ãšå®è¡çµæãåãåãããã«å¿
èŠãª run.executions.get æš©éãäžè¶³ããŠãããããäžèšã®ããŒã«ãšããŠããŸãã 以äžã®ã³ãã³ããå®è¡ãããšã sa-cloud-run-job-workflow ãšããååã®ãµãŒãã¹ã¢ã«ãŠã³ããäœæããããã®åŸãå¿
èŠãªããŒã«ãä»äžãããŸãã gcloud iam service-accounts create sa-cloud-run-job-workflow gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-cloud-run-job-workflow@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/run.developer ã¯ãŒã¯ãããŒã®äœæ Cloud Run jobs ãå®è¡ããããã®ã¯ãŒã¯ãããŒãã cloud-run-job-workflow.yaml ãšãã YAML ãã¡ã€ã«ã«å®çŸ©ããŸãã cloud-run-job-workflow.yaml main : params : [ event ] steps : - init : assign : - project_id : ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} - event_bucket : ${event.data.bucket} - event_file : ${event.data.name} - job_name : daily-report-job - job_location : asia-northeast1 - run_job : call : googleapis.run.v1.namespaces.jobs.run args : name : ${"namespaces/" + project_id + "/jobs/" + job_name} location : ${job_location} body : overrides : containerOverrides : env : - name : INPUT_BUCKET value : ${event_bucket} - name : INPUT_FILE value : ${event_file} result : job_execution - finish : return : ${job_execution} ã¯ãŒã¯ãããŒã®ããã〠以äžã®ã³ãã³ããå®è¡ããŠã¯ãŒã¯ãããŒããããã€ããŸãã gcloud workflows deploy cloud-run-job-workflow \ --location = asia-northeast1 \ --source = cloud-run-job-workflow.yaml --service-account = serviceAccount:sa-cloud-run-job-workflow@ ${PROJECT} .iam.gserviceaccount.com Eventarc ããªã¬ãŒã®èšå® ãµãŒãã¹ã¢ã«ãŠã³ãã®èšå® Eventarc ã§äœ¿çšãããµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãã Eventarc 㯠Cloud Storage ããã€ãã³ããåä¿¡ã㊠Workflows ãèµ·åããããã以äžã®ããŒã«ã Eventarc ã§äœ¿çšãããµãŒãã¹ã¢ã«ãŠã³ãã«ä»äžããå¿
èŠããããŸãã Eventarc ã€ãã³ãåä¿¡è
ïŒ roles/eventarc.eventReceiver ïŒ ã¯ãŒã¯ãããŒèµ·åå
ïŒ roles/workflows.invoker ïŒ ä»¥äžã®ã³ãã³ããå®è¡ãããšããµãŒãã¹ã¢ã«ãŠã³ã sa-cloud-run-job-workflow-trigger ãäœæããããã®ãµãŒãã¹ã¢ã«ãŠã³ãã«å¿
èŠãªæš©éãä»äžãããŸãã gcloud iam service-accounts create sa-cloud-run-job-workflow-trigger gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-cloud-run-job-workflow-trigger@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/eventarc.eventReceiver gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-cloud-run-job-workflow-trigger@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/workflows.invoker Eventarc ã®äœæ 以äžã®ã³ãã³ãã§ãEventarc ããªã¬ãŒã cloud-run-job-workflow-trigger ãšããååã§äœæããŸãã ãã®ã³ãã³ãã§ã¯ãããã»ã©äœæãããµãŒãã¹ã¢ã«ãŠã³ã sa-cloud-run-job-workflow-trigger ãæå®ãããã destination-workflow ãªãã·ã§ã³ã§å®å
ã®ã¯ãŒã¯ãããŒã§ãã cloud-run-job-workflow ãæå®ããŠããŸãã gcloud eventarc triggers create cloud-run-job-workflow-trigger \ --location = asia-northeast1 \ --destination-workflow = cloud-run-job-workflow \ --destination-workflow-location = asia-northeast1 \ --event-filters =" type=google.cloud.storage.object.v1.finalized " \ --event-filters =" bucket= ${BUCKET_NAME} " \ --service-account = sa-cloud-run-job-workflow-trigger@ ${PROJECT} .iam.gserviceaccount.com åäœç¢ºèª ãŸãã¯ãæ¥å ±ã®ããã¹ããã¡ã€ã«ãçšæããŸããäŸãšããŠã以äžã®ããã¹ããæžã蟌ãŸããããã¹ããã¡ã€ã« 20241231_å±±ç°å€ªé.txt ãäœæããŸãã 仿¥ã®æ¥åå
容: åå: æšæ¥ååŸãããªã³ã©ã€ã³ã¹ãã¢ã®é¡§å®¢è¡åãã°ããŒã¿(çŽ5TB)ã®BigQueryãžã®ããŒãäœæ¥ã宿œãDataflowãã€ãã©ã€ã³ãçšããŠãããŒãã£ã·ã§ãã³ã°ãšã¯ã©ã¹ã¿ãªã³ã°ãè¡ããã¯ãšãªããã©ãŒãã³ã¹ã®æé©åãå³ã£ããããŒãå®äºåŸãããŒã¿ã®æŽåæ§ã確èªããããŒã¿å質ã«åé¡ããªãããšãæ€èšŒãããããŒãæéã¯äºæ³éãçŽ3æéã§ãã£ãããäžéšããŒã¿ã®éè€ã確èªããããããéè€ããŒã¿åé€ã¯ãšãªãèšè¿°ãå®è¡ãçŽ1%ã®éè€ããŒã¿ãåé€ãããã ååŸ: BigQueryäžã§é¡§å®¢ã»ã°ã¡ã³ããŒã·ã§ã³ã®ããã®SQLã¯ãšãªãéçºã»å®è¡ãè³Œè²·é »åºŠãå¹³å賌å
¥é¡ãæçµè³Œå
¥æ¥ãªã©ãåºã«ã"é«é »åºŠè³Œå
¥è
", "äœé »åºŠäœé¡è³Œå
¥è
", "äŒç 顧客" ã®3ã€ã®ã»ã°ã¡ã³ãã«åé¡ããã¯ãšãªãäœæãããåã»ã°ã¡ã³ãã®äººå£çµ±èšããŒã¿(å¹Žéœ¢ãæ§å¥ãªã©)ãšã®é¢é£æ§ãåæããããã«ããŠãŒã¶ãŒå±æ§ããŒãã«ãšçµåãåæã宿œã åæçµæãå¯èŠåããããã«ãLooker Studioãçšããããã·ã¥ããŒããäœæéå§ãæ¬æ¥äžã«äž»èŠææšã®è¡šç€ºãŸã§å®äºãããã ãã®ä»: ãããžã§ã¯ãXã®ä»åŸã®åæèšç»ã«ã€ããŠããŒã ãªãŒããŒãšããŒãã£ã³ã°ã宿œã 顧客ãã£ãŒã³äºæž¬ã¢ãã«æ§ç¯ã®ããã®ããŒã¿æºåã«ã€ããŠè°è«ããå¿
èŠãªããŒã¿é
ç®ãšããŒã¿ãœãŒã¹ãç¹å®ãããæ¥é±ããæ©æ¢°åŠç¿ã¢ãã«ã®æ§ç¯ã«çæããäºå®ã ãŸããBigQueryã®æéãç£èŠããã³ã¹ãæé©åã®ããã®æ€èšãéå§ãããããŒãã£ã·ã§ãã³ã°ãšã¯ã©ã¹ã¿ãªã³ã°ã®å¹æãæ€èšŒããæŽãªãæé©åã®å¯èœæ§ãæ¢ãã 課é¡ãšåé¡ç¹: ããŒã¿ãã°ã«å«ãŸããäžéšã®é¡§å®¢IDã«éè€ãèŠããããããŒã¿åéå
ã§ã®ããŒã¿ã¯ã¬ã³ãžã³ã°ã®å¿
èŠæ§ãææããé¢ä¿éšçœ²ãžã®å ±åãæ€èšããŠããã Looker Studioããã·ã¥ããŒãã®äœæã«æéãããã£ãŠãããããå¹ççãªå¯èŠåããŒã«ã®æ€èšãå¿
èŠãããããªãã ææ¥ã®äºå®: ãããžã§ã¯ãX: 顧客ãã£ãŒã³äºæž¬ã¢ãã«æ§ç¯ã®ããã®ããŒã¿æºåéå§ãå¿
èŠãªããŒã¿ã®æœåºãšååŠçãè¡ãã ãããžã§ã¯ãY (æºå段é): ãããžã§ã¯ãYã®èŠä»¶å®çŸ©æžäœæã«åããŠãé¢ä¿è
ãšã®æã¡åãããè¡ãã ã³ã¡ã³ã: æ¬æ¥ããããžã§ã¯ãXã®ããŒã¿åæã倧ããé²å±ãããBigQueryãšDataflowãã€ãã©ã€ã³ãçšããããŒã¿åŠçã¯å¹ççã§ãã£ããããããããŒã¿å質ã«é¢ãã課é¡ãæµ®ã圫ãã«ãªã£ããããé¢ä¿éšçœ²ãšã®é£æºã匷åããããŒã¿ã¯ãªãªãã£åäžã«åªããå¿
èŠãããã ãã®æ¥å ±ãã¡ã€ã«ã Cloud Storage ã«ã¢ããããŒãããŸãã gcloud storage cp 20241231_å±±ç°å€ªé.txt gs:// ${BUCKET_NAME} BigQuery ãèŠããšãããŒãã«ã«æ¥å ±ã®ããŒã¿ãæžã蟌ãŸããŠããããšã確èªã§ããŸããã 以äžã¯ãèŠçŽåŸã®æç« ã§ãã ãã®ãã°ã¯ãBigQueryãšDataflowãçšããããŒã¿åŠçã«é¢ããå ±åã§ãã **åå:** 5TBã®ãªã³ã©ã€ã³ã¹ããªãŒã ããŒã¿ã®BigQueryãžã®ããŒãäœæ¥ã宿œãDataflowãã€ãã©ã€ã³ãçšããŠããŒãã£ã·ã§ãã³ã°ãšã¯ã¬ã³ãžã³ã°ãè¡ããã¯ãšãªã®æé©åãå®çŸããŸãããåŠçæéã¯äºæ³éãçŽ3æéã§ããããäžéšããŒã¿ã®æ¬ æã確èªããã1%ã®ããŒã¿ã埩æ§äžèœã§ããã **ååŸ:** BigQueryäžã§ã課éã¿ã€ããå¹³å課éé¡ãæçµèª²éæ¥ãªã©ãåºã«ããé«èª²éãŠãŒã¶ãŒãããäœèª²éãŠãŒã¶ãŒãããæœåšé¡§å®¢ãã®3ã€ã®ã»ã°ã¡ã³ãã«åé¡ããSQLã¯ãšãªãäœæã»å®è¡ããŸãããåã»ã°ã¡ã³ãã®ãŠãŒã¶ãŒå±æ§ïŒå¹Žéœ¢ãæ§å¥ãªã©ïŒãšã®é¢é£æ§ãåæããLooker Studioã§èŠèŠåããŸããã **ãã®ä»:** ãããžã§ã¯ãXã®ä»åŸã®åæèšç»ãšããŠããã£ãŒã³äºæž¬ã¢ãã«ãšããã¢ãŒã·ã§ã³æœçã®ããŒã¿æŽåãæ±ºå®ããŸãããBigQueryã®ãã°ãç£èŠããã³ã¹ãæé©åã®ããã®æ¹åçãæ€èšããŸããããŒãã£ã·ã§ãã³ã°ãšã¯ã¬ã³ãžã³ã°ã®ãã€ã³ããæç¢ºåããä»åŸã®ããŒã¿å質åäžã«ç¹ããŸãã **課é¡ãšåé¡ç¹:** äžéšã®é¡§å®¢IDã«ããŒã¿æ¬ æãèŠã€ãããŸãããããŒã¿ã®å®å
šæ§ç¢ºä¿ã®ãããããŒã¿ã¯ã¬ã³ãžã³ã°ãšã¢ãã¿ãªã³ã°ã®åŒ·åãå¿
èŠã§ããLooker Studioã§ã®ããã·ã¥ããŒãäœæã«æéãããã£ãŠããŸããããå¹ççãªå¯èŠåæ¹æ³ã®æ€èšãå¿
èŠã§ãã **ä»åŸã®äºå®:** ãããžã§ã¯ãXã§ã¯ããã£ãŒã³äºæž¬ã®ããã®ããŒã¿æŽåãšå¿
èŠãªããŒã¿ã®æœåºã»ååŠçãè¡ããŸãããããžã§ã¯ãY(ãã£ãŒã³äºæž¬ã¢ãã«)ã§ã¯ãèŠä»¶å®çŸ©æžãäœæããé¢ä¿è
ãšã®æã¡åãããè¡ããŸãã å
šäœãšããŠãããŒã¿åŠçã¯æŠãæåããŸããããããŒã¿æ¬ æãå¯èŠåã®å¹çæ§ãšãã£ã課é¡ãæ®ã£ãŠãããä»åŸã®æ¹åãå¿
èŠã§ããããšãå ±åãããŠããŸãã åºå£ æå€ªæ (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2024幎7æã«G-genã«å
¥ç€Ÿã çŠå²¡åšäœã§ãGoogle Cloud ããã¹ã¿ãŒããããæ¥ã
ãšã³ãžãã¢ãšããŠä¿®è¡äžã
G-genã®ææã§ããVertex API çµç±ã§ Gemini ã¢ãã«ãž API ãªã¯ãšã¹ããéä¿¡ããéã«ããšã©ãŒã³ãŒã 429 ã§ Resource exhausted, please try again later. ãšãããšã©ãŒãé »ç¹ã«çºçããŸããããã®åå ãšå¯ŸåŠæ³ã玹ä»ããŸãã äºè±¡ åå å¯ŸåŠæ³ 3ã€ã®å¯ŸåŠæ¡ ã°ããŒãã«ãšã³ããã€ã³ã ãšã¯ã¹ããã³ã·ã£ã«ããã¯ãªã Provisioned Throughput äºè±¡ Vertex API çµç±ã§ Gemini ã¢ãã«ãž API ãªã¯ãšã¹ããéä¿¡ããéããšã©ãŒã³ãŒã 429 ã§ Resource exhausted, please try again later. ãšãããšã©ãŒãçºçããŸãããã¬ã¹ãã³ã¹å
ã® status 㯠RESOURCE_EXHAUSTED ã§ãã ãã°ããããŠå詊è¡ãããšãªã¯ãšã¹ããæåãããšãããããŸããããã°ãã°åããšã©ãŒãšãªããŸãã åå ãã®ãšã©ãŒã¯ãåŠçã®ããã®ãªãœãŒã¹ã Google åŽã§æ¯æžããããšãé²ããããGoogle ã«ãã£ãŠ API å©çšãå¶éãããŠããããšãæå³ããŠããŸããGoogle ã¯éæãç©çã€ã³ãã©ã¹ãã©ã¯ãã£ã匷åããŠããŸãããGemini API ã¯å€ãã®ãŠãŒã¶ãŒã«å©çšãããŠããããããã°ãã°ãã®ã¡ãã»ãŒãžã衚瀺ãããããšããããŸãã åè : ãšã©ãŒã³ãŒã 429 API çµç±ã§ã® Gemini ã¢ãã«ã®åŒã³åºãã«ã¯ã åçå
±æå²ãåœãŠ ïŒDynamic shared quotaã DSQ ïŒãšããä»çµã¿ã䜿ãããŠããŸããDSQ ã¯ãéåžžã® Google Cloud API ã®å²ãåœãŠïŒã¯ã©ãŒã¿ïŒãšç°ãªããéçã§ã¯ãããŸãããGemini ã®å²ãåœãŠã¯å
šãŠãŒã¶ãŒããã®éèŠã«ãã£ãŠåçã«å€æŽãããŸããåããœãŒã¹ããã®ãªã¯ãšã¹ããçãæéã§æ¥å¢ãããšãåªå
床ã調æŽããã 429 RESOURCE_EXHAUSTED ãçºçããå¯èœæ§ããããŸããæéã眮ããŠåå®è¡ããããšã§ãåã³ãªã¯ãšã¹ãå¯èœã«ãªããŸãã å¯ŸåŠæ³ 3ã€ã®å¯ŸåŠæ¡ 次ã®ããããã®å¯ŸåŠæ³ãèããããŸãã ã°ããŒãã«ãšã³ããã€ã³ã ãå©çšãã ã¢ããªã±ãŒã·ã§ã³ã« ãšã¯ã¹ããã³ã·ã£ã«ããã¯ãªã ïŒexponential backoffãææ°ããã¯ãªãïŒãå®è£
ãã Provisioned Throughput ïŒããããžã§ãã³ã°ãããã¹ã«ãŒãããïŒã賌å
¥ãã ã°ããŒãã«ãšã³ããã€ã³ã æãåçŽãªå¯Ÿçã¯ã ã°ããŒãã«ãšã³ããã€ã³ã ã䜿ãããšã§ããã°ããŒãã«ãšã³ããã€ã³ãã䜿çšãããšããªãŒãžã§ã³ãšã³ããã€ã³ãã䜿ãã®ã«æ¯ã¹ãŠããšã©ãŒã³ãŒã429ã®ãªã¹ã¯ãæžããããšãã§ããŸããglobal ãã±ãŒã·ã§ã³ãæå®ã㊠Gemini API ãžãªã¯ãšã¹ãããããšã§ããªãœãŒã¹ã空ããŠãããªãŒãžã§ã³ã«ãªã¯ãšã¹ããèªåçã«ã«ãŒãã£ã³ã°ãããŸãã ã©ã®ãªãŒãžã§ã³ã§ããŒã¿ãåŠçããããã¯ä»»æã«æ±ºå®ããããããã»ãã¥ãªãã£èŠä»¶çã§ããŒã¿ãåŠçããå°åãå³å¯ã«æå®ãããŠããå Žåã¯ããã®æ¹æ³ã¯äœ¿ããªãã§ãã ããã ã°ããŒãã«ãšã³ããã€ã³ãã® URI ã¯ã以äžã®ããã«ãªããŸãã https://aiplatform.googleapis.com/v1/projects/test-project/locations/global/publishers/google/models/gemini-2.0-flash-001:generateContent åè : Deployments and endpoints - Global endpoint ãšã¯ã¹ããã³ã·ã£ã«ããã¯ãªã ãšã¯ã¹ããã³ã·ã£ã«ããã¯ãªã ïŒææ°ããã¯ãªãïŒã¯ãã¯ã©ãŠããµãŒãã¹ã® API ãªã¯ãšã¹ãã䜿çšããã¢ããªã±ãŒã·ã§ã³ãå®è£
ããéã«äžè¬çãªææ³ã§ãã ãšã¯ã¹ããã³ã·ã£ã«ããã¯ãªãã§ã¯ãAPI ãªã¯ãšã¹ãããµãŒããŒåŽãšã©ãŒãäžæçãªé害ã§å€±æããå Žåã«ãåŸ
æ©æéã1ç§ã2ç§ã4ç§ã8ç§...ã®ããã«ã¹ãä¹ããªããå詊è¡ãç¹°ãè¿ããŸãã å詊è¡ãç¡éã«ç¹°ãè¿ããªãããã詊è¡åæ°ãèŠå®ã®åæ°ã«éããŠããªã¯ãšã¹ããæåããªãå Žåããšã©ãŒçµäºãããããå®è£
ããŸãããã®ããã«ãªãã©ã€åæ°ã«äžéãèšããããšã truncated exponential backoffïŒåãæšãŠåãšã¯ã¹ããã³ã·ã£ã«ããã¯ãªãïŒãšãåŒã³ãŸãã åè : ææ°ããã¯ãªã ã¢ã«ãŽãªãºã ãã®ææ³ãåãããšã«ããããªãŒãžã§ã³ã§å€ãã®ãŠãŒã¶ãŒããã® API ãªã¯ãšã¹ãã茻茳ããŠãªãœãŒã¹ãæ¯æžããŠããå Žåã§ãããã°ããåŸ
ã£ãŠããå詊è¡ããããšã§ãæçµçã« API ãªã¯ãšã¹ããæåããå¯èœæ§ãé«ããããŸãã Provisioned Throughput Provisioned Throughput ïŒããããžã§ãã³ã°ãããã¹ã«ãŒãããïŒãšã¯ãGemini ã Claude ã® API ã¹ã«ãŒããããäºåã«äºçŽè³Œå
¥ããŠãããåºå®éé¡ã§å©çšããæé¡ãµãã¹ã¯ãªãã·ã§ã³ãµãŒãã¹ã§ãã Provisioned Throughput ã¯ãäºåã«ã¢ãã«ãšãã±ãŒã·ã§ã³ïŒãªãŒãžã§ã³ïŒãæå®ããŠè³Œå
¥ããŸãããµããŒããããŠããã¢ãã«ãšããŠãgemini-2.5-proãgemini-2.5-flashãimagen-4.0-generate-001ãAnthropic Claude 4.5 Sonnet ãªã©ãå€ãã®ã¢ãã«ã«å¯Ÿå¿ããŠããŸãã察象ã¢ãã«ã®äžèЧã¯ä»¥äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åè : ããããžã§ãã³ã°ãããã¹ã«ãŒããã åè¿°ã®ã°ããŒãã«ãšã³ããã€ã³ãã®äœ¿çšããšã¯ã¹ããã³ã·ã£ã«ããã¯ãªãã®å®è£
ã¯ããªãœãŒã¹æ¯æžã«å¯Ÿããæ ¹æ¬çãªå¯ŸåŠã«ã¯ãªã£ãŠããŸããããProvisioned Throughput ã賌å
¥ããæ¹æ³ã§ã¯ãåŸé課éå©çšããããªãœãŒã¹ãåªå
ããŠç¢ºä¿ãããŸããéèŠãªæ¬çªç°å¢ã¢ããªã±ãŒã·ã§ã³ã§ã® Gemini ã®å©çšããæé¡å©çšæéãåºå®ãããå Žåãªã©ã«å©çšãæ€èšããŸãã Provisioned Throughput ã®è©³çްã¯ã以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO å
èŠå¯å®ãšããçµæŽãæã€ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS èªå®è³æ Œããã³ Google Cloud èªå®è³æ Œã¯ãã¹ãŠååŸãXïŒæ§ TwitterïŒã§ã¯ Google Cloud ã Google Workspace ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ã®æŠäºã§ããåœèšäºã§ã¯ IAM ããªã·ãŒãç·šéããããšããéã«ã çµç¹ã®ããªã·ãŒããã¡ã€ã³ã§å¶éãããå
±æãïŒconstraints/iam.allowedPolicyMemberDomainsïŒãé©çšãããŠããŸãã ãšè¡šç€ºãããŠãšã©ãŒã«ãªã£ããšãã®å¯ŸåŠæ³ã玹ä»ããŸãã äºè±¡ãšã¡ãã»ãŒãž åå å¯ŸåŠæ¹æ³ å¯ŸåŠæé 顧客 ID ã®ç¢ºèª IAM æš©éã®ç¢ºèª çµç¹ããã©ã«ããŸãã¯ãããžã§ã¯ããéžæ çµç¹ã®ããªã·ãŒç»é¢ãžé·ç§» å¶çŽã®ç·šéç»é¢ãžé·ç§» å¶çŽãç·šé çµæã®ç¢ºèª æåŸã« ã¯ãŒã¯ã¢ã©ãŠã³ã é¢é£èšäº äºè±¡ãšã¡ãã»ãŒãž Google CloudïŒæ§ç§° GCPïŒã§ãIAM ããªã·ãŒãç·šéããGoogle ã¢ã«ãŠã³ãã« IAM ããŒã«ãçŽã¥ããããšããéã«ã以äžã®ã¡ãã»ãŒãžã衚瀺ãããç·šéã倱æããŸããã çµç¹ã®ããªã·ãŒããã¡ã€ã³ã§å¶éãããå
±æãïŒconstraints/iam.allowedPolicyMemberDomainsïŒãé©çšãããŠããŸãã IAM ããªã·ãŒã®æŽæ°ã«å€±æããŸãã çµç¹ã®ããªã·ãŒããã¡ã€ã³ã§å¶éãããå
±æãïŒconstraints/iam.allowedPolicyMemberDomainsïŒãé©çšãããŠããŸããããªã·ãŒã§ããªã³ã·ãã«ãšããŠè¿œå ã§ããã®ã¯ãèš±å¯ããããã¡ã€ã³ã®ããªã³ã·ãã«ã®ã¿ã§ããããªã³ã·ãã«ã®ã¡ãŒã«ã¢ãã¬ã¹ãä¿®æ£ããŠãããäžåºŠã詊ããã ãããå
±æå
ã®ãã¡ã€ã³ã®å¶éã®è©³çް ãªã¯ãšã¹ã ID: (æ°å) åå ãã®äºè±¡ã¯ãçµç¹ããªã·ãŒã®å¶çŽ iam.allowedPolicyMemberDomains ãçµç¹ã¬ãã«ããã©ã«ãã¬ãã«ãŸãã¯ãããžã§ã¯ãã¬ãã«ã§æå¹åãããŠãããšãã«çºçããŸãã iam.allowedPolicyMemberDomains ã¯ã èš±å¯ãããŠããªãçµç¹ã«æå±ãã Google ã¢ã«ãŠã³ããžã®æš©éä»äžãçŠæ¢ããå¶çŽ ã§ããäŸãšããŠã g-gen.co.jp ãšããçµç¹ã® Google Cloud ãããžã§ã¯ãã§ã example.com ïŒä»çµç¹ïŒã®ããªã³ã·ãã«ã«å¯Ÿã㊠IAM ããŒã«ãä»äžããããšããã±ãŒã¹ã該åœããŸãã åèïŒ ãã¡ã€ã³å¥ã® ID ã®å¶é ãã®å¶çŽã¯ã2024幎åé 以éã«äœæããã Google Cloud çµç¹ã§ã¯ããã©ã«ãã§æå¹åãããŠããŸãããã以åã«äœæãããçµç¹ã§ãã管çè
ãæç€ºçã«ãã®å¶çŽãæå¹åããŠããå Žåã¯ããã®äºè±¡ãçºçããŸãã åèïŒ çµç¹ãªãœãŒã¹ã«é©çšãããçµç¹ã®ããªã·ãŒ ãªãçµç¹ã®ããªã·ãŒãšã¯ãã»ãã¥ãªãã£ãçµ±å¶ã®åäžã®ããã«ãæå®ã®ã«ãŒã«ã Google Cloud ç°å¢å
šäœã«é©çšããä»çµã¿ã®ããšã§ããçµç¹ã®ããªã·ãŒã®è©³çްã¯ã以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp å¯ŸåŠæ¹æ³ çµç¹ããªã·ãŒã®å¶çŽ iam.allowedPolicyMemberDomains ã¯ãªã¹ãåã®å¶çŽã§ãããã©ã«ãã§ã¯èªçµç¹ã®ã¿ãèš±å¯ãããŠããŸãã ãããã£ãŠã ä»çµç¹ã® Google ã¢ã«ãŠã³ãã« IAM ããŒã«ãä»äžããã å Žåã¯ãã®å¶çŽã®èš±å¯ãªã¹ãã«ã ãã®çµç¹ãæç€ºçã«è¿œå ããå¿
èŠããããŸãã çµç¹ããªã·ãŒã®å¶çŽã¯ãçµç¹ã¬ãã«ããã©ã«ãã¬ãã«ããããžã§ã¯ãã¬ãã«ã§é©çšããããšãã§ãã芪ãªãœãŒã¹ã®ããªã·ãŒã¯åãªãœãŒã¹ã« ç¶æ¿ ãããŸãããã ããæç€ºçã«èšå®ããããšã§ãåãªãœãŒã¹åŽã§èŠªãªãœãŒã¹ã®å¶çŽããªãŒããŒã©ã€ãïŒäžæžãïŒããããšãå¯èœã§ãã ãã£ãŠãåãåŸãéžæè¢ãšããŠã¯ã以äžã®ããããã«ãªããŸãã iam.allowedPolicyMemberDomains ã çµç¹ã¬ãã« ã§ç·šéãã iam.allowedPolicyMemberDomains ã ãã©ã«ãã¬ãã« ã§ãªãŒããŒã©ã€ãããŠç·šéãã iam.allowedPolicyMemberDomains ã ãããžã§ã¯ãã¬ãã« ã§ãªãŒããŒã©ã€ãããŠç·šéãã äžèšã®ãã¡ 1. ã 2. ã®å Žåãçµç¹å
šäœãããã¯ãã©ã«ãå
šäœã§åœ±é¿ãåã³ãŸããã 3. ã®åœ±é¿ç¯å²ã¯åœè©²ãããžã§ã¯ãã®ã¿ã§ãã ãèªèº«ã®ç°å¢æ§æãšç
§ããåããã圱é¿ç¯å²ãååã«çè§£ããããã§é©åãªã¹ã³ãŒãã§èšå®ããã ãããšãæšå¥šããŸãã å¯ŸåŠæé 顧客 ID ã®ç¢ºèª èš±å¯ãªã¹ãã«å€éšçµç¹ã远å ããã«ã¯ããã®çµç¹ã® 顧客 ID ãææ¡ããŠããå¿
èŠããããŸãã 以äžãåèã«è¿œå 察象çµç¹ã®é¡§å®¢ ID ãååŸããŠãã ããã åè : Google Workspace ãå®¢æ§ ID ã®ååŸ ( gcloud / API ããååŸ) åè : 顧客 ID ã®ç¢ºèª ( Admin ã³ã³ãœãŒã« ããååŸ) ãŸãã以äžã®èšäºãåèã«ããŠãã ããã blog.g-gen.co.jp IAM æš©éã®ç¢ºèª åœæé ã宿œããã«ã¯ãæäœãã Google ã¢ã«ãŠã³ãããããã¯ã¢ã«ãŠã³ããæå±ããã°ã«ãŒãããçµç¹ã¬ãã«ã§ çµç¹ããªã·ãŒç®¡çè
ïŒ roles/orgpolicy.policyAdmin ïŒããŒã«ãæã£ãŠããå¿
èŠããããŸãã çµç¹ããªã·ãŒç®¡çè
ãä»äžã§ããæãäžäœã¬ãã«ã®ãªãœãŒã¹ã¯ãçµç¹ãã§ãããã£ãŠããã©ã«ãããããžã§ã¯ãã¬ãã«ã§å¶çŽããªãŒããŒã©ã€ãããå Žåã§ããçµç¹ã¬ãã«ã§çµç¹ããªã·ãŒç®¡çè
ããŒã«ãæã£ãŠããå¿
èŠããããŸãã äœæ¥è
ã® Google ã¢ã«ãŠã³ããå¿
èŠãªæš©éãæã£ãŠããªãå Žåã¯ãçµç¹ã¬ãã«ã§ IAM ããŒã«ãçµç¹ããªã·ãŒç®¡çè
ããä»äžããŠãã ããã åè : IAM ã䜿çšããçµç¹ãªãœãŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ çµç¹ããã©ã«ããŸãã¯ãããžã§ã¯ããéžæ Google Cloud ã³ã³ãœãŒã«ã«ãã°ã€ã³ãããããžã§ã¯ãã»ã¬ã¯ã¿ãŒãã¯ãªãã¯ããŠãå¶çŽãç¡å¹åãé©çšããçµç¹ããã©ã«ãããŸãã¯ãããžã§ã¯ããéžæããŸãã åœèšäºã®ãå¯ŸåŠæ¹æ³ãããããèªã¿ã«ãªããå¶çŽã®ç·šéäœçœ®ã決ããããã§éžæããŠãã ããã çµç¹ã®ããªã·ãŒç»é¢ãžé·ç§» ã³ã³ãœãŒã«äžéšã®æ€çŽ¢ããã¯ã¹ã«ãçµç¹ã®ããªã·ãŒããšå
¥åãããµãžã§ã¹ãããã çµç¹ã®ããªã·ãŒ ãéžæããŸãã ãŸãã¯ã IAM ãšç®¡ç ç»é¢ããçŽæ¥é·ç§»ããŠãæ§ããŸããã å¶çŽã®ç·šéç»é¢ãžé·ç§» å¶çŽäžèЧã®äžéšã®ãã£ã«ã¿ã« constraints/iam.allowedPolicyMemberDomains ãå
¥åãããã£ã«ã¿çµæã®äžãã Domain restricted sharing ãã¯ãªãã¯ããŠç·šéç»é¢ãžé·ç§»ããŸãã å¶çŽãç·šé ããªã·ãŒã管ç ãã¯ãªãã¯ããŸãã 以äžã®é ã§ã«ãŒã«ã远å ããæåŸã« ããªã·ãŒãèšå® ãã¯ãªãã¯ããŸãã # é
ç® èšå®å€ 1 ããªã·ãŒã®ãœãŒã¹ 芪ã®ããªã·ãŒããªãŒããŒã©ã€ããã 2 ããªã·ãŒã®é©çš 芪ãšçµåãã â»èŠªã®èšå®ãäžæžãããå Žå㯠亀æ ãéžæãã 3 ããªã·ãŒã®å€ ã«ã¹ã¿ã ãéžæãã 4 ããªã·ãŒã¿ã€ã èš±å¯ ãéžæãã 5 ã«ã¹ã¿ã å€ é¡§å®¢ID ãå
¥åãã â» Cxxxxxxxx ã®åœ¢åŒã®å€ãå述㮠顧客 ID ã®ç¢ºèª ã®èŠåºããåç
§ çµæã®ç¢ºèª èšå®ãå®äºãããšã以äžã®ãããªè¡šç€ºã«ãªããŸãã æåŸã« ã¯ãŒã¯ã¢ã©ãŠã³ã çµç¹ããªã·ãŒã®å€æŽãé£ããå Žåã¯ãGoogle ã°ã«ãŒãã«å€éšçµç¹ã®ã¡ã³ããŒã远å ãããã®ã°ã«ãŒãã«æš©éãä»äžããããšã§ãã¡ã€ã³å¶éã®å¶çŽãåé¿ããããšãå¯èœã§ãã 詳现ã¯ä»¥äžã®å
¬åŒããã¥ã¡ã³ããã確èªãã ããã åè : Google ã°ã«ãŒã é¢é£èšäº blog.g-gen.co.jp æŠäº ç¥ä» (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšæå±ãG-genå¯äžã®å±±æ¢šçåšäœãšã³ãžã㢠Google Cloud Partner Top Engineer 2025 éžåºãIaC ã CI/CD åšãã®ãµãŒãã¹ããããã¯ããèå³åéã§ãã è¶£å³ã¯ããŒããã€ã¯ãããŒãã¬ãŒã¹ããµãã«ãŒèгæŠã§ãã Follow @ggenyutakei
G-gen ã®ææã§ãã2024幎12æã®ã€ããªã· Google CloudïŒæ§ç§° GCPïŒã¢ããããŒãããŸãšããŠã玹ä»ããŸããèšèŒã¯å
šãŠãèšäºå
¬éåœæã®ãã®ã§ãã®ã§ãçæãã ããã ã¯ããã« Google ãã©ãŒã ã§æ°ããæš©éãResponderïŒåçè
ïŒããå©çšå¯èœã« Vertex AI Search ã§ gemini-1.5-flash-002-high-fidelityïŒPreviewïŒ Google Deepmindãå€§èŠæš¡äžçã¢ãã« Genie 2 ãçºè¡š Parameter Manager ã Preview å
¬é ç»åçæã¢ãã«ãImagen 3ããäžè¬å
¬é Gemini 2.0 ãçºè¡š BigQuery ã®ã¯ãã¹ãªãŒãžã§ã³ããŒã¿ã»ããã¬ããªã±ãŒã·ã§ã³ã GA BigQuery ã§ BigQuery Managed Disaster Recovery ã GA VPC SC ã® Ingress/Egress rules ã® Google ã°ã«ãŒãæå®ã GA Google Workspace ã§ NotebookLM Plus ãå©çšå¯èœã« æ°ãµãŒãã¹ Google Agentspace ãçºè¡š Compute Engine ã§ Windows Server 2025 ãå©çšå¯èœã« Cloud IAM ã§ Principal access boundary policies ã Preview â GA Looker Studio ã®ããŒã¿ãœãŒã¹ç·šéç»é¢ã§ããŒã¿ã®ãã¬ãã¥ãŒãå¯èœã« å
šãšãã£ã·ã§ã³ã§ AppSheet 管çç»é¢ãå©çšå¯èœã« Gemini 2.0 Flash Thinking ã®è©Šéšéçšçã Google AI Studio ã§å
¬é Google ãã©ã€ãã§åç»ãã¢ããããŒãåŸããã«åçã§ããããã« ã¯ããã« åœèšäºã§ã¯ãæ¯æã® Google CloudïŒæ§ç§° GCPïŒã Google WorkspaceïŒæ§ç§° GSuiteïŒã®ã¢ããããŒãã®ãã¡ãç¹ã«éèŠãªãã®ããŸãšããŸãã ãŸãåœèšäºã¯ãGoogle Cloud ã«é¢ããããçšåºŠã®ç¥èãåæã«èšèŒãããŠããŸããåæç¥èãåŸãã«ã¯ããã²ä»¥äžã®èšäºããåç
§ãã ããã blog.g-gen.co.jp ãªã³ã¯å
ã®å
¬åŒã¬ã€ãã¯ãè±èªçã§è¡šç€ºããªããšææ°æ
å ±ãåæ ãããŠããªãå ŽåããããŸããããæ³šæãã ããã Google ãã©ãŒã ã§æ°ããæš©éãResponderïŒåçè
ïŒããå©çšå¯èœã« Adding granular control options for who can respond to Google Forms (2024-12-03) Google ãã©ãŒã ã§æ°ããæš©éãResponderïŒåçè
ïŒããå©çšå¯èœã«ã åŸæ¥ã¯ãã©ãŒã ãã€ã³ã¿ãŒãããå
¬éããããåçå¯èœãªäººãçµããšãã¯ç¹å®ãã¡ã€ã³ã«ããéå®ã§ããªãã£ããä»åŸã¯ã¢ã«ãŠã³ããã°ã«ãŒãã«éå®ããŠå
¬éããããšãå¯èœã«ãªã£ãã Vertex AI Search ã§ gemini-1.5-flash-002-high-fidelityïŒPreviewïŒ High fidelity models (2024-12-04) Vertex AI Search ã§ gemini-1.5-flash-002-high-fidelity ã¢ãã«ã Preview å
¬éã gemini-1.5-flash-002-high-fidelity ã¢ãã«ãšã¯ãã³ã³ããã¹ãããŒã¹ã®è³ªåã«æé©åããã RAG çšã¢ãã«ãæ£ç¢ºæ§ãå®å
šæ§ãéèŠãããã¥ãŒãã³ã°ããããŠãããéèããã«ã¹ã±ã¢ãªã©æ£ç¢ºæ§ãéèŠãªçšéãæ³å®ã Google Deepmindãå€§èŠæš¡äžçã¢ãã« Genie 2 ãçºè¡š Genie 2: A large-scale foundation world model (2024-12-04) Google Deepmind ããåºç€äžçã¢ãã«ïŒA large-scale foundation world modelïŒGenie 2 ãçºè¡šããã ã¢ã¯ã·ã§ã³å¶åŸ¡å¯èœã§ãã¬ã€å¯èœãª 3D ç°å¢ãçæã§ãããçæããã¯ãŒã«ãã¯ãããŒããŒããšããŠã¹å
¥åã䜿çšããŠã人éãŸã㯠AI ãšãŒãžã§ã³ãã«ãã£ãŠãã¬ã€ã§ãããäžäººç§°èŠç¹ãã¢ã€ãœã¡ããªã㯠ãã¥ãŒãäžäººç§°é転ãããªãªã©ãããŸããŸãªç°å¢ãçæå¯èœã Parameter Manager ã Preview å
¬é Parameter Manager overview (2024-12-06) Secret Manager ã®æŽŸçæ©èœãšã㊠Parameter Manager ã Preview å
¬éã ç°å¢èšå®å€ãéäžç®¡çããä»çµã¿ãã·ãŒã¯ã¬ãã管çãå¯èœã ããSecret Manager ã«ã¯ååšãããrotation schedulesããç¡ããªã©ã®å·®ç°ããããçŸåš gcloud/REST ã®ã¿ã§æäŸã ã·ãŒã¯ã¬ããæ
å ±ã¯ Secret Manager ã§ããã®ä»ã®ç°å¢åºæèšå®å€ã¯ Parameter Manager ã§ç®¡çããããšãæ³å®ããã Parameter Manager ãã Secret Manager ã®ã·ãŒã¯ã¬ãããåç
§ããããšãã§ããã¡ããã© AWS Secret Manager ãš Parameter Store ã®é¢ä¿ã«äŒŒãŠããã ç»åçæã¢ãã«ãImagen 3ããäžè¬å
¬é Imagen on Vertex AI | AI Image Generator (2024-12-10) ç»åçæã¢ãã«ãImagen 3ããäžè¬å
¬éãããããããŸã§ã¯èš±å¯ãªã¹ãå¶ã ã£ããVertex AIçµç±ã§å
šãŠãŒã¶ãŒãå©çšå¯èœã«ãªã£ãã以äžã®ã¢ãã«ãå©çšå¯èœã imagen-3.0-generate-001 imagen-3.0-fast-generate-001 ãã ãç»åã®ç·šéã few-shot learning ãå¯èœãªä»¥äžã®ã¢ãã«ã¯åŒãç¶ããèš±å¯å¶ã imagen-3.0-capability Gemini 2.0 ãçºè¡š GoogleããGemini 2.0ããçºè¡šãAIã¢ãã«ã¯âãšãŒãžã§ã³ãæä»£âã« (2024-12-12) Google ãçæAIã¢ãã« Gemini ã®ææ°çãGemini 2.0 ãçºè¡šã ãã«ãã¢ãŒãã«å¯Ÿå¿ãããã«åŒ·åã gemini-2.0-flash-exp ã Gemini ã¢ããªã Vertex AI StudioãGoogle AI Studio ã§æ¢ã«äœ¿çšå¯èœã«ãªã£ãŠããã BigQuery ã®ã¯ãã¹ãªãŒãžã§ã³ããŒã¿ã»ããã¬ããªã±ãŒã·ã§ã³ã GA Cross-region dataset replication (2024-12-11) BigQuery ã§ã¯ãã¹ãªãŒãžã§ã³ ããŒã¿ã»ããã¬ããªã±ãŒã·ã§ã³ã Preview â GAã å¥ãªãŒãžã§ã³ã«ããŒã¿ãéåæã§è€è£œããããŒã¿ã®å
ç¢æ§ãšå¯çšæ§ãé«ãããããããŒã¿ã»ããã®ãªãŒãžã§ã³éç§»è¡ã«ãå©çšå¯èœã ãã ããã©ã€ããªãªãŒãžã§ã³ãé害æãã»ã«ã³ããªãªãŒãžã§ã³ã¯ Read Only ã«ãªãã詳现ã¯ä»¥äžã®èšäºãåç
§ã blog.g-gen.co.jp BigQuery ã§ BigQuery Managed Disaster Recovery ã GA Managed disaster recovery (2024-12-11) BigQuery ã§ BigQuery Managed Disaster Recovery ã Preview â GAã ãªãŒãžã§ã³é害ã®ãšãã«ããŒã¿ã®ã¿ãªããã³ã³ãã¥ãŒããªãœãŒã¹äºçŽããã§ã€ã«ãªãŒãããæžã蟌ã¿ãå«ãã¯ãŒã¯ããŒããç¶ç¶ã§ããã VPC SC ã® Ingress/Egress rules ã® Google ã°ã«ãŒãæå®ã GA VPC Service Controls release notes - December 11, 2024 (2024-12-11) VPC Service Controls å¢çã§ Ingress/Egress rules ã§ã® Google ã°ã«ãŒãæå®ã Preview â GAã åŸæ¥ã¯ Google ã¢ã«ãŠã³ããçŽæ¥æå®ããå¿
èŠããã£ãããã°ã«ãŒãæå®ãã§ããããã«ãªããéçšã®ç
©éããããè§£æ¶ãããã Google Workspace ã§ NotebookLM Plus ãå©çšå¯èœã« NotebookLM Plus now available to Google Workspace customers (2024-12-13) Google Workspace ã§ NotebookLM Plus ãå©çšå¯èœã«ãããšããšç¡æã§å©çšã§ãã NotebookLM ã®æåçãPlus ã§ã¯æ§ã
ãªæ©èœãå¶éç·©åãããŒã¿ã®ä¿è·ã远å ãããã NotebookLM ã¯èªåå°çšã®AIããŒãããã¯ãããŒã¿ãã¢ããããŒãããŠçæAIã«èªã¿èŸŒãŸãçæããã¹ããèªåã®ã¡ã¢ãèšè¿°ããŠããããåæãè³æäœæãæ
å ±æŽçãªã©ã«å©çšã§ããã èŠGeminiã¢ããªã³ã©ã€ã»ã³ã¹ã æ°ãµãŒãã¹ Google Agentspace ãçºè¡š Introducing Google Agentspace: Bringing AI agents and AI-powered search to enterprises (2024-12-14) æ°ãµãŒãã¹ Google Agentspace ãçºè¡šãEarly accessã«ç³èŸŒå¯èœã以äžã®æ©èœãåããã èªç€ŸããŒã¿ãã¢ããããŒãããŠAIããå©çšã§ãã NotebookLM Plus ã³ã³ãã«ã Google ãã©ã€ããSharePoint çããæ€çŽ¢ã§ãããšã³ã¿ãŒãã©ã€ãºãµãŒã 人ã®ä»£ããã«ã¿ã¹ã¯ãããªããšãŒãžã§ã³ã Compute Engine ã§ Windows Server 2025 ãå©çšå¯èœã« Windows Server (2024-12-16) Compute Engine ã§ Windows Server 2025 ãå©çšå¯èœã«ãªã£ããEoSïŒã€ã¡ãŒãžå»æ¢æ¥ïŒã¯ 2034-10-10ã ãªããã®åã® Windows Server 2022 ã® EoS 㯠2031-10-14ã Cloud IAM ã§ Principal access boundary policies ã Preview â GA Principal access boundary policies (2024-12-17) Cloud IAM ã§ Principal access boundary policies ã Preview â GAã èªçµç¹ã®ããªã³ã·ãã«ãã©ã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ãããã®å¢çïŒboundaryïŒãèšãããããã¢ã¯ã»ã¹å
ãèªçµç¹ã®ãªãœãŒã¹ã«éå®ããããç¹å®ãã©ã«ãå
ã«éå®ãããã§ããã Looker Studio ã®ããŒã¿ãœãŒã¹ç·šéç»é¢ã§ããŒã¿ã®ãã¬ãã¥ãŒãå¯èœã« Preview your data (2024-12-17) Looker Studio ã§ããŒã¿ãœãŒã¹ã®ç·šéç»é¢ã§ããŒã¿å
容ããã¬ãã¥ãŒã§ããããã«ãªã£ãã BigQueryãGoogle ã¹ãã¬ããã·ãŒããLookerãExcelãCSV ã«å¯Ÿå¿ã å
šãšãã£ã·ã§ã³ã§ AppSheet 管çç»é¢ãå©çšå¯èœã« Now generally available: Monitor and manage AppSheet usage in your organization with the AppSheet Admin console (2024-12-18) Google Workspace ã®å
šãšãã£ã·ã§ã³ã§ AppSheet ã®ç®¡çç»é¢ãå©çšå¯èœã«ãªã£ãã ã¢ããªã®å©çšç¶æ³ã誰ãã¢ããªãããããäœã£ãŠããããã©ã€ã»ã³ã¹æ°ããªã©ã暪æã§é²èЧã§ãã管çç»é¢ã Gemini 2.0 Flash Thinking ã®è©Šéšéçšçã Google AI Studio ã§å
¬é Gemini 2.0 Flash ã®æèã¢ãŒã (2024-12-19) Gemini 2.0 Flash Thinking ã®è©ŠéšéçšçïŒgemini-2.0-flash-thinking-exp-1219ïŒã Vertex AIïŒGenerative AI on Vertex AIïŒãš Google AI Studio ã§å
¬éã ãã®ã¢ãã«ã§ã¯ãçæçµæã ãã§ãªããçæã«è³ã£ããæèãããã»ã¹ãçæããŠè¡šç€ºããã Google ãã©ã€ãã§åç»ãã¢ããããŒãåŸããã«åçã§ããããã« Google Workspace Updates Weekly Recap - December 20, 2024 (2024-12-20) Google ãã©ã€ãã§åç»ãã¢ããããŒãåŸãããã«åçã§ããããã«ãªã£ãã ãããŸã§ã¯ã¢ããããŒãåŸã«æ°åãæ°ååãåŠçã®æéãå¿
èŠã ã£ãã ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãX (æ§ Twitter) ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it
G-gen ã®äœã
æšã§ããåœèšäºã§ã¯ã³ã³ãã ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ ããŒã«ã§ãã Kubenretes ã®åŠç¿çšã®ãããMinikube ã䜿ã£ãŠ Compute EngineïŒGoogle Compute EngineãGCEïŒä»®æ³ãã·ã³äžã«ããŒã«ã« Kubernetes ã¯ã©ã¹ã¿ãæ§ç¯ããŠãããŸãã ã¯ããã« åœèšäºã®ç®ç Minikube ãšã¯ Compute Engine ã€ã³ã¹ã¿ã³ã¹ã®äœæ äœæ¥ã®æŠèŠ ã·ã§ã«å€æ°ã®èšå® VPCã»ãµããããã®äœæ VPC ã®äœæ ãµããããã®äœæ ã€ã³ã¹ã¿ã³ã¹ã®äœæ Minikube ã®èŠä»¶ã«ã€ã㊠ã€ã³ã¹ã¿ã³ã¹ã®äœæ ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ã®èšå® ã€ã³ã¹ã¿ã³ã¹ã« SSH æ¥ç¶ ã³ã³ãœãŒã«ããã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ïŒGUI ã®å ŽåïŒ gcloud ã³ãã³ãã§ SSH æ¥ç¶ïŒCLI ã®å ŽåïŒ Docker ã®ã€ã³ã¹ããŒã« Minikube ã® driver ã«ã€ã㊠ããã±ãŒãžãªã¹ãã®æŽæ° ã€ã³ã¹ããŒã« APT ãªããžããªã®ã»ããã¢ãã Docker ã®ã€ã³ã¹ããŒã« Docker ã®åäœç¢ºèª ã¯ãªãŒã³ã¢ãã Minikube ã®ã€ã³ã¹ããŒã« APT ãªããžããªã®ã»ããã¢ãã ã€ã³ã¹ããŒã« Minikube ã®å®è¡ Minikube å®è¡ãŠãŒã¶ãŒã docker ã°ã«ãŒãã«è¿œå Minikube ã®å®è¡ Pod ã®äœæ Pod ã®å
¬é ã¯ãªãŒã³ã¢ãã ããã¯ã¢ããã®ååŸ ã¯ããã« åœèšäºã®ç®ç åœèšäºã§ã¯ Minikube ãšãã OSSïŒãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ïŒã䜿çšããŠãCompute Engine ã®ä»®æ³ãã·ã³ïŒã€ã³ã¹ã¿ã³ã¹ïŒäžã«åŠç¿çšã® Kubernetes ã¯ã©ã¹ã¿ ãæ§ç¯ããæ¹æ³ã玹ä»ããŸãã Kubernetes ã¯ã³ã³ãã ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ ããŒã«ã®ããã¡ã¯ãã¹ã¿ã³ããŒãã§ããããããŒãžã㪠Kubernetes ã¯ã©ã¹ã¿ãæäŸãã Google Kubernetes EngineïŒGKEïŒ ã¯ Google Cloud ã«ããã代衚çãªãµãŒãã¹ã®äžã€ã§ãã åè : Kubernetes ã®åºæ¬ã解説 - G-gen Tech Blog åè : Google Kubernetes EngineïŒGKEïŒã培åºè§£èª¬ - G-gen Tech Blog Kubernetes ã¯ã³ã³ããã®éçšç®¡çã®ããã®éåžžã«åŒ·åãªããŒã«ã§ããåé¢ãç¬èªã®çšèªãèšå®ãã¡ã€ã«ãé«é »åºŠã®ããŒãžã§ã³ã¢ãããªã©ãåŠç¿ã³ã¹ããé«ãããšã§ç¥ãããŠããŸããåœèšäºã®å
容ã¯ã Kubernetes ã«å
¥éããããã®ç°¡æçãªåŠç¿ç°å¢ããäœã³ã¹ãã§çšæãã ããšãç®çãšããŠããŸãã åŠç¿ç°å¢ãšã㊠Compute Engine ãçšããã¡ãªãããšããŠã䜿çšããªããšãã¯ã€ã³ã¹ã¿ã³ã¹ã忢ããŠæéãç¯çŽã§ããç¹ãããã·ã³ã€ã¡ãŒãžçã䜿çšããŠããã¯ã¢ãããååŸããå¿
èŠã«å¿ããŠæè»œã«ãªã¹ãã¢ããããšãã§ããç¹ããããŸãã ãªããGKE ã§ã¯è«æ±å
ã¢ã«ãŠã³ãã«ã€ãæé¡ $74.40 ã®ç¡ææ ãæäŸãããŠããŸããå®éã® GKE ã¯ã©ã¹ã¿ã䜿çšããŠåŠç¿ãè¡ãããå Žåã¯ãAutopilot ã¯ã©ã¹ã¿ã§ãã®ç¡ææ ãå©çšããŠã¿ãã®ãããã§ãããã åè : ã¯ã©ã¹ã¿ç®¡çææ°æãšç¡ææ ãã ããGKE ã¯èšå€§ãªéã®ãã°ã Cloud Logging ã«åºåãããããCloud Logging ã®æéã«ã泚æãæãå¿
èŠããããŸãã ãŸãã以äžã®èšäºã§ã¯ Terraform ã䜿çšã㊠Autopilot ã¢ãŒãã® GKE ã¯ã©ã¹ã¿ãäœæããæ¹æ³ã玹ä»ããŠããŸãã®ã§ãåèã«ããŠãã ããã blog.g-gen.co.jp Minikube ãšã¯ Minikube ã¯ããŒã«ã«ç°å¢ã§ Kubernetes ãå®è¡ããããã®ããŒã«ã§ããMinikube ã䜿ããšãä»®æ³ãã·ã³äžã«ã·ã³ã°ã«ããŒãã® Kubernetes ã¯ã©ã¹ã¿ãæ§ç¯ããããšãã§ããŸããMinikube ã§ã¯ Kubernetes ã®å
šãŠã®æ©èœã䜿çšã§ããããã§ã¯ãããŸããããåºæ¬çãªåäœã®ç¢ºèªãéçºç°å¢ãšããŠå©çšããããšãã§ããŸãã åœèšäºã§ã¯ã以äžã®å
¬åŒãã¥ãŒããªã¢ã«ãå
ã« Minikube ãã€ã³ã¹ããŒã«ããã¯ã©ã¹ã¿ã®æ§ç¯ãè¡ããŸãã åè : Minikubeã䜿çšããŠããŒã«ã«ç°å¢ã§Kubernetesãåãã åè : minikube start Compute Engine ã€ã³ã¹ã¿ã³ã¹ã®äœæ äœæ¥ã®æŠèŠ Google Cloud ãããžã§ã¯ãã« Compute Engine ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ã€ã³ã¹ã¿ã³ã¹ã¯ VPC å
ã®ãµããããã«äœæããå¿
èŠãããããããããã®ãªãœãŒã¹ãå
ã«äœæãããã®äžã«ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãããŠãã€ã³ã¹ã¿ã³ã¹å
ã§äœæ¥ããéã« VPC ã®å€éšããæ¥ç¶ã§ããããã«ãæ¥ç¶ãèš±å¯ãããã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ãèšå®ããŠãããŸãã åœèšäºã§äœæãã Compute Engine ç°å¢ã®æ§æ åœèšäºã§ã¯ gcloud ã³ãã³ã ãçšããŠãªãœãŒã¹ã®äœæãè¡ã£ãŠãããŸããgcloud ã³ãã³ãã®ã€ã³ã¹ããŒã«ã«ã€ããŠã¯ä»¥äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã åè : gcloud CLI ãã€ã³ã¹ããŒã«ãã ãŸããGoogle Cloud ã³ã³ãœãŒã«ããå©çšã§ãã Cloud Shell ïŒãã©ãŠã¶ããŒã¹ã®ã¿ãŒããã«ç°å¢ïŒã«ã¯ gcloud ã³ãã³ããããªã€ã³ã¹ããŒã«ãããŠããããã以éã®äœæ¥ããã®ãŸãŸå®æœããããšãã§ããŸãã åè : Cloud Shell ã䜿çšãã ã·ã§ã«å€æ°ã®èšå® ã³ãã³ãã§äœåºŠã䜿çšããå€ãã·ã§ã«å€æ°ã«æ ŒçŽããŠãããŸããåœèšäºã§ã¯ SUFFIX ã®å€ã minikube ãšããŠé²ããŠãããŸãã PROJECT ã«ã¯ãªãœãŒã¹ãäœæãããããžã§ã¯ãã® ID ãã REGION ã«ã¯ asia-northeast1 ãªã©ã®ãªãŒãžã§ã³ãæå®ããŸãã SUFFIX = { é©åœãªå€ } # åœèšäºã§ã¯ minikube PROJECT = { ãããžã§ã¯ãID } REGION = { ãªãœãŒã¹ãäœæãããªãŒãžã§ã³ } VPCã»ãµããããã®äœæ VPC ã®äœæ 以äžã®ã³ãã³ãã§ VPC ãäœæããŸãããµãããããæåã§äœæããããã --subnet-mode ãã©ã°ã§ custom ãæå®ããŸãã # VPC ãäœæãã $ gcloud compute networks create vpc- ${SUFFIX} \ --subnet-mode = custom \ --project = ${PROJECT} åè : gcloud compute networks createïŒã³ãã³ããªãã¡ã¬ã³ã¹ïŒ ãµããããã®äœæ äœæãã VPC ãæå®ãããã®äžã«ãµãããããäœæããŸãã --range ãã©ã°ã§ã¯ãµããããã«å²ãåœãŠããã©ã€ããŒã IP ã¢ãã¬ã¹ã®ç¯å²ã CIDR ã§æå®ããŸããåœèšäºã§ã¯ 192.168.144.0/28 ãå²ãåœãŠãŠããŸãã # ãµãããããäœæãã $ gcloud compute networks subnets create subnet- ${SUFFIX} \ --network = vpc- ${SUFFIX} \ --region = ${REGION} \ --range = 192 . 168 . 144 . 0 / 28 \ --project = ${PROJECT} åè : gcloud compute networks subnets createïŒã³ãã³ããªãã¡ã¬ã³ã¹ïŒ ã€ã³ã¹ã¿ã³ã¹ã®äœæ Minikube ã®èŠä»¶ã«ã€ã㊠å
¬åŒãã¥ãŒããªã¢ã« ã«ãããšãMinikube ã®ãªãœãŒã¹èŠä»¶ã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã 2ã€ä»¥äžã® CPU 2 GB 以äžã®ã¡ã¢ãªå®¹é 20 GB 以äžã®ãã£ã¹ã¯é å ããšãã°ã¡ã¢ãªãäžè¶³ããŠããå ŽåãMinikube ãå®è¡ããããšããŠãã以äžã®ããã«ãšã©ãŒãåºãŠçµäºããŠããŸããŸãã # ã¡ã¢ãªäžè¶³ã®å ŽåãMinikube ãå®è¡ã§ããªã $ minikube start --driver = docker ð minikube v1. 34 . 0 on Debian 12 . 7 ( amd64 ) âš Using the docker driver based on user configuration â Exiting due to RSRC_INSUFFICIENT_CONTAINER_MEMORY: docker only has 969MiB available, less than the required 1800MiB for Kubernetes åœèšäºã§ã¯ã¡ã¢ãªå®¹éã«ããçšåºŠäœè£ããããã·ã³ã¿ã€ãã§ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãã·ã³ã¿ã€ãã¯ç°¡åã«å€æŽããããšãã§ããããããŸãã¯å°ããã®ãã·ã³ã¿ã€ãã§è©ŠããŠã¿ãŠãè¶³ããªããã°ãªãœãŒã¹ãå¢ãããŠãããã§ãããã åè : ã³ã³ãã¥ãŒãã£ã³ã° ã€ã³ã¹ã¿ã³ã¹ã®ãã·ã³ã¿ã€ãã®ç·šé - ãã·ã³ã¿ã€ãã倿Žãã ã€ã³ã¹ã¿ã³ã¹ã®äœæ åã®æé ã§äœæãã VPC ãšãµãããããæå®ããCompute Engine ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã åœèšäºã§ã¯ä»¥äžã®èšå®å€ã§ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã é
ç® gcloud ã³ãã³ãã®ãã©ã° å€ åè ã€ã³ã¹ã¿ã³ã¹å vm-${SUFFIX} VPC --network vpc-${SUFFIX} ãµãããã --subnet subnet-${SUFFIX} OS ã€ã¡ãŒãž --image-family --image-project debian-12 debian-cloud 以éã®æé ã¯ããã§æå®ãã OS ãåæãšããç¹ã«æ³šæ ãã·ã³ã¿ã€ã --machine-type e2-medium 2 vCPUãã¡ã¢ãª4GB å¿
èŠã«å¿ããŠå€æŽå¯ïŒ åè ïŒ ãã£ã¹ã¯ãµã€ãº --boot-disk-size 20GB Minikube ã®ãªãœãŒã¹èŠä»¶ã«æºæ ãããã¯ãŒã¯ã¿ã° --tags ssh åŸã§äœæãããã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ãã€ã³ã¹ã¿ã³ã¹ã«çŽä»ããéã«äœ¿çš # Compute Engine ã€ã³ã¹ã¿ã³ã¹ãäœæãã $ gcloud compute instances create vm- ${SUFFIX} \ --network = vpc- ${SUFFIX} \ --subnet = subnet- ${SUFFIX} \ --zone = ${REGION} -a \ --image-family = debian-12 \ --image-project = debian-cloud \ --machine-type = e2-medium \ --boot-disk-size = 20GB \ --tags = ssh \ --project = ${PROJECT} åè : gcloud compute instances createïŒã³ãã³ããªãã¡ã¬ã³ã¹ïŒ ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ã®èšå® äœæããã€ã³ã¹ã¿ã³ã¹ã« SSH ã§ã¢ã¯ã»ã¹ã§ããããã«ãVPC ã«å
åãã®ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ãäœæããŸãã --target-tags ãã©ã°ã§ã€ã³ã¹ã¿ã³ã¹ã«èšå®ãããã®ãšåãã¿ã°ãæå®ããããšã§ããã®ã«ãŒã«ãã€ã³ã¹ã¿ã³ã¹ã«çŽä»ããããšãã§ããŸãã ãªããåœèšäºã§ã¯äŸ¿å®äž --source-ranges ãã©ã°ãã€ãŸãã¢ã¯ã»ã¹å
ã® IP ã¢ãã¬ã¹ç¯å²ã 0.0.0.0/0 ïŒä»»æã® IP ã¢ãã¬ã¹ïŒã«èšå®ããŠããŸãããã»ãã¥ãªãã£ãèæ
®ããŠèªèº«ã® PC ã® IP ã¢ãã¬ã¹çãèšå®ããããšãã§ããŸãã # SSH ãèš±å¯ãããã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ãäœæãã $ gcloud compute firewall-rules create vpc- ${SUFFIX} -allow-ssh \ --direction = INGRESS \ --source-ranges = 0 . 0 . 0 . 0 / 0 \ --allow = tcp:22 \ --target-tags = ssh \ --network = vpc- ${SUFFIX} \ --project = ${PROJECT} åè : gcloud compute firewall-rules createïŒã³ãã³ããªãã¡ã¬ã³ã¹ïŒ ã€ã³ã¹ã¿ã³ã¹ã« SSH æ¥ç¶ ã³ã³ãœãŒã«ããã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ïŒGUI ã®å ŽåïŒ Minikube ãã€ã³ã¹ããŒã«ãããããäœæããã€ã³ã¹ã¿ã³ã¹ã« SSH æ¥ç¶ããŸãã Google Cloud ã³ã³ãœãŒã«ããã€ã³ã¹ã¿ã³ã¹ã« SSH æ¥ç¶ããå Žåãã€ã³ã¹ã¿ã³ã¹äžèЧç»é¢ã§ã SSH ããéžæããŸãã Google Cloud ã³ã³ãœãŒã«ããã€ã³ã¹ã¿ã³ã¹ã« SSH æ¥ç¶ãã gcloud ã³ãã³ãã§ SSH æ¥ç¶ïŒCLI ã®å ŽåïŒ gcloud ã§ã¯ã以äžã®ã³ãã³ãã䜿çšããŠã€ã³ã¹ã¿ã³ã¹ã« SSH æ¥ç¶ã§ããŸãã # ã€ã³ã¹ã¿ã³ã¹ã« SSH æ¥ç¶ãã $ gcloud compute ssh vm- ${SUFFIX} \ --zone = ${REGION} -a \ --project = ${PROJECT} åè : gcloud compute sshïŒã³ãã³ããªãã¡ã¬ã³ã¹ïŒ Docker ã®ã€ã³ã¹ããŒã« Minikube ã® driver ã«ã€ã㊠Minikube ã§ã¯åäœç°å¢ïŒdriverïŒãšã㊠Docker ã VirtualBox ãªã©ãããã€ãã®éžæè¢ãæäŸãããŠããŸãã åè : Drivers åœèšäºã§ã¯æšå¥š driver ã®1ã€ã§ãã Docker ã䜿çšããŠæ§ç¯ãé²ããŠãããŸãã 以äžã® Docker å
¬åŒããã¥ã¡ã³ãã®æé ã«æ²¿ã£ãŠãDocker ãã€ã³ã¹ããŒã«ããŠãããŸãã åè : Install Docker Engine on Debian ããã±ãŒãžãªã¹ãã®æŽæ° 以éã®æé ã«ã€ããŠã¯ã SSH æ¥ç¶ãã Compute Engine VM äžã§ã³ãã³ããå®è¡ ããŠãã ããã ãŸãã¯ãAPT ã®ããã±ãŒãžãææ°åããŠãããŸãã # ããã±ãŒãžãªã¹ããææ°ã®ç¶æ
ã«ãã $ sudo apt update # ããã±ãŒãžã®ææ°åïŒæéããããå¯èœæ§ããïŒ $ sudo apt upgrade -y ã€ã³ã¹ããŒã« APT ãªããžããªã®ã»ããã¢ãã ãŸããDocker ããã±ãŒãžã®æ€èšŒã«å¿
èŠãª GPG Key ãçšæããŸãã # Docker ã®ããŠã³ããŒãã«å¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ãã $ sudo apt install ca-certificates curl # keyrings ãã£ã¬ã¯ããªã®ããŒããã·ã§ã³ãèšå®ãã $ sudo install -m 0755 -d /etc/apt/keyrings # Docker å
¬åŒã® GPG Key ãããŠã³ããŒãã㊠keyrings ãã£ã¬ã¯ããªã«æ ŒçŽãã $ sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc # GPG Key ã®ããŒããã·ã§ã³ã倿Žãã $ sudo chmod a+ r /etc/apt/keyrings/docker.asc apt ã³ãã³ãã®ããã±ãŒãžååŸå
ã®ãªããžããªãšã㊠Docker é¢é£ã®ãªããžããªã远å ããŸãã # Docker ã®ãªããžããªã远å ãã $ echo \ " deb [arch= $( dpkg --print-architecture ) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $( . /etc/os-release && echo " $VERSION_CODENAME " ) stable " | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null Docker ã®ã€ã³ã¹ããŒã« Docker ã®å®è¡ã«å¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã # ããã±ãŒãžãªã¹ããæŽæ°ãã $ sudo apt update # Docker ã®å®è¡ã«å¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ãã $ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Docker ã®åäœç¢ºèª Docker ã§é©åœãªã³ã³ãããå®è¡ããŠã¿ãŸããããã§ã¯ Docker å
¬åŒã³ã³ããã€ã¡ãŒãžã® hello-world ã䜿çšããŸãã # hello-world ã³ã³ããã®èµ·å $ sudo docker run --name hello hello-world -------------------- åºåäŸ -------------------- Unable to find image ' hello-world:latest ' locally latest: Pulling from library/hello-world c1ec31eb5944: Pull complete Digest: sha256:d211f485f2dd1dee407a80973c8f129f00d54604d2c90732e8e320e5038a0348 Status: Downloaded newer image for hello-world:latest Hello from Docker ! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1 . The Docker client contacted the Docker daemon . 2 . The Docker daemon pulled the " hello-world " image from the Docker Hub. ( amd64 ) 3 . The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4 . The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ ã¯ãªãŒã³ã¢ãã åäœç¢ºèªçšã® hello-world ã³ã³ãããšããã®ã³ã³ããã€ã¡ãŒãžãåé€ããŠãããŸãã hello-world ã³ã³ããã¯åæ¢ããç¶æ
ã§æ®ã£ãŠããŸãã # ã³ã³ããäžèЧã確èªãã $ sudo docker container ls -a -------------------- åºåäŸ -------------------- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f6492b1ab35 hello-world " /hello " 48 seconds ago Exited ( 0 ) 47 seconds ago hello ãŸããã³ã³ããå®è¡ã«äœ¿çšãããã³ã³ããã€ã¡ãŒãžãããŒã«ã«ã«ããŠã³ããŒããããŠããããããããåé€ããŠãããŸãã # ã³ã³ããã€ã¡ãŒãžã®äžèЧã確èªãã $ sudo docker image ls -------------------- åºåäŸ -------------------- REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 18 months ago 13 .3kB 以äžã®ã³ãã³ãã§ã忢ããã³ã³ãããšã³ã³ããã€ã¡ãŒãžãåé€ããŸãã # ã³ã³ãããåé€ãã $ sudo docker container rm hello # hello-world ã³ã³ããã€ã¡ãŒãžãåé€ãã $ sudo docker image rm hello-world:latest Minikube ã®ã€ã³ã¹ããŒã« APT ãªããžããªã®ã»ããã¢ãã ãŸããKubernetes ã®ãªããžããªã APT ã®ããã±ãŒãžååŸå
ãšããŠç»é²ããŸãã # Kubernetes ã®ãªããžããªãç»é² $ echo " deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ / " | sudo tee /etc/apt/sources.list.d/kubernetes.list ããã±ãŒãžã®æ€èšŒã«äœ¿çšãã GPG Key ãããŠã³ããŒãããŸãã # GPG Key ã®ããŠã³ããŒã curl -fsSL https://pkgs.k8s.io/core:/stable:/v1. 28 /deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg æ¹ããŠããã±ãŒãžãªã¹ããæŽæ°ããŸãã # ããã±ãŒãžãªã¹ããæŽæ°ãã $ sudo apt update åè : How to migrate to the Kubernetes community-owned repositories? ã€ã³ã¹ããŒã« Minikube ã®ããã±ãŒãžãããŠã³ããŒããã dpkg ã³ãã³ãã§ã€ã³ã¹ããŒã«ãå®è¡ããŸãã # Minikube ã®ããã±ãŒãžãããŠã³ããŒããã $ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb # Minikube ãã€ã³ã¹ããŒã«ãã $ sudo dpkg -i minikube_latest_amd64.deb -------------------- åºåäŸ -------------------- Selecting previously unselected package minikube. ( Reading database ... 73229 files and directories currently installed. ) Preparing to unpack minikube_latest_amd64.deb ... Unpacking minikube ( 1 . 34 .0-0 ) ... Setting up minikube ( 1 . 34 .0-0 ) ... Minikube ã®å®è¡ Minikube å®è¡ãŠãŒã¶ãŒã docker ã°ã«ãŒãã«è¿œå Minikube ãå®è¡ãããŠãŒã¶ãŒã docker ã°ã«ãŒãã«æå±ãããŸãã ãã®æé ãã¹ããããããšãMinikube å®è¡æã«ä»¥äžã®ãããªæš©éãšã©ãŒãçºçããŠããŸããŸãã $ minikube start --driver = docker ð minikube v1. 34 . 0 on Debian 12 . 7 ( amd64 ) âš Using the docker driver based on user configuration ð£ Exiting due to PROVIDER_DOCKER_NEWGRP: " docker version --format <no value>-<no value>:<no value> " exit status 1: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get " http://%2Fvar%2Frun%2Fdocker.sock/v1.47/version ": dial unix /var/run/docker.sock: connect: permission denied ð¡ Suggestion: Add your user to the ' docker ' group: ' sudo usermod -aG docker $USER && newgrp docker ' ð Documentation: https://docs.docker.com/engine/install/linux-postinstall/ Suggestion: ã®é
ç®ã«èšèŒãããŠããã³ãã³ããå®è¡ããçŸåšä»®æ³ãã·ã³ã®ãã°ã€ã³ã«äœ¿çšããŠãããŠãŒã¶ãŒã docker ã°ã«ãŒãã«è¿œå ããŸãã # çŸåšã®ãŠãŒã¶ãŒã docker ã°ã«ãŒãã«è¿œå ãã $ sudo usermod -aG docker $USER && newgrp docker Minikube ã®å®è¡ minikube start ã³ãã³ãã§ Minikube ãå®è¡ããŸãã --driver ãã©ã°ã§ Docker ããã©ã€ããšããŠèšå®ããŠããŸãã $ minikube start --driver = docker -------------------- åºåäŸ -------------------- ð minikube v1. 34 . 0 on Debian 12 . 8 ( amd64 ) âš Using the docker driver based on user configuration ð Using Docker driver with root privileges ð Starting " minikube " primary control-plane node in " minikube " cluster ð Pulling base image v0. 0 . 45 ... ðŸ Downloading Kubernetes v1. 31 . 0 preload ... > preloaded-images-k8s-v18-v1...: 326 . 69 MiB / 326 . 69 MiB 100 . 00 % 37 . 80 M > gcr.io/k8s-minikube/kicbase...: 487 . 90 MiB / 487 . 90 MiB 100 . 00 % 46 . 45 M ð¥ Creating docker container ( CPUs = 2 , Memory = 2200MB ) ... ð³ Preparing Kubernetes v1. 31 . 0 on Docker 27 . 2 . 0 ... ⪠Generating certificates and keys ... ⪠Booting up control plane ... ⪠Configuring RBAC rules ... ð Configuring bridge CNI ( Container Networking Interface ) ... ð Verifying Kubernetes components... ⪠Using image gcr.io/k8s-minikube/storage-provisioner:v5 ð Enabled addons: storage-provisioner, default-storageclass ð¡ kubectl not found. If you need it, try: ' minikube kubectl -- get pods -A ' ð Done! kubectl is now configured to use " minikube " cluster and " default " namespace by default Minikube ã®ç¶æ
㯠minikube status ã³ãã³ãã§ç¢ºèªã§ããŸãã # Minikube ã®ç¶æ
ã確èªãã $ minikube status -------------------- åºåäŸ -------------------- minikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured äžè¬ã« Kubernetes ã®ç®¡çæäœã«ã¯ kubectl ã³ãã³ãã䜿çšããŸãããMinikube ã§ã¯ minikube kubectl ã䜿çšããŸãã # Minikube ã®ããŒãã確èªãã $ minikube kubectl -- get nodes -------------------- åºåäŸ -------------------- NAME STATUS ROLES AGE VERSION minikube Ready control-plane 11m v1. 31 . 0 æ¯å minikube ã®éšåããã³ãã³ããå
¥åããã®ã¯æéãªã®ã§ããšã€ãªã¢ã¹ãèšå®ã㊠kubectl ã ãã§ã³ãã³ããå®è¡ã§ããããã«ããŸãããšã€ãªã¢ã¹ã¯ .bashrc ãã¡ã€ã«ã«èšå®ããŠãããŸãã # ãšã€ãªã¢ã¹ãèšå®ããïŒ.bashrc ã«è¿œèšïŒ $ echo " alias kubectl='minikube kubectl --' " >> .bashrc # .bashrc ã®è¿œèšå
容ãåæ ãã $ source .bashrc # ãšã€ãªã¢ã¹ã§å®è¡ã§ããããšã確èªãã $ kubectl get nodes -------------------- åºåäŸ -------------------- NAME STATUS ROLES AGE VERSION minikube Ready control-plane 13m v1. 31 . 0 Pod ã®äœæ Minikube ã®ã¯ã©ã¹ã¿ãå®è¡ã§ããã®ã§ãKubernetes ã§ç®¡çã§ããæå°åäœã®ã³ã³ãã¥ãŒãã£ã³ã° ãªãœãŒã¹ã§ãã Pod ãäœæããŠã¿ãŸãã vim çã®ãšãã£ã¿ã䜿çšããŠã sample-pod.yaml ãšããŠä»¥äžã®ãããã§ã¹ããã¡ã€ã«ãäœæããŸãããã® Pod ã¯ãWeb ãµãŒãã§ãã nginx ã®ã³ã³ãããå®è¡ããŸãã # sample-pod.yaml apiVersion : v1 kind : Pod metadata : name : nginx labels : app : sample spec : containers : - name : nginx image : nginx:1.27 ports : - containerPort : 80 kubectl apply ã³ãã³ãã§ãããã§ã¹ããã¡ã€ã«ãã¯ã©ã¹ã¿ã«é©çšããŸããããã«ãããYAML ãã¡ã€ã«ã«èšèŒããèšå®å
容㮠Pod ã Minikube ã¯ã©ã¹ã¿äžã§å®è¡ãããŸãã # ãããã§ã¹ããã¡ã€ã«ãã¯ã©ã¹ã¿ã«é©çšã㊠Pod ãäœæãã $ kubectl apply -f sample-pod.yaml kubectl get pods ã§ Pod ã®äžèЧãååŸããŸããå
çšãããã§ã¹ããã¡ã€ã«ãé©çšãã Pod ãå®è¡ãããŠããŸãã # Pod ã®äžèЧãååŸãã $ kubectl get pods -------------------- åºåäŸ -------------------- NAME READY STATUS RESTARTS AGE nginx 1 / 1 Running 0 2m15s Pod ã®å
¬é Service ãªãœãŒã¹ãšã㊠NodePort ãäœæããŠãå
çšäœæãã Pod ã® nginx ã³ã³ããã« Minikube ã¯ã©ã¹ã¿ã®å€éšããæ¥ç¶ã§ããããã«ããŸãã Pod åæ§ãService ããããã§ã¹ããã¡ã€ã«ããäœæã§ããŸãããããã§ã¯ç°¡æçã« kubectl expose ã³ãã³ãã§äœæããŸãã # NodePort ãäœæã㊠Pod ãå
¬éãã $ kubectl expose pod/nginx --type = NodePort --port = 80 kubectl get services ã³ãã³ãã§ Service ãªãœãŒã¹ã®äžèЧã確èªããŸããNodePort ã¿ã€ãã® Service ãäœæãããŠããŸãïŒ2è¡ç®ïŒã # Service ã®äžèЧãååŸãã $ kubectl get services -------------------- åºåäŸ -------------------- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT ( S ) AGE kubernetes ClusterIP 10 . 96 . 0 . 1 < none > 443 /TCP 49m nginx NodePort 10 . 110 . 131 . 236 < none > 80:30134/TCP 116s minikube service nginx --url ã§ NodePort ã«ã¢ã¯ã»ã¹ããããã® URL ãååŸã§ããããããã® URL ã«ã¢ã¯ã»ã¹ããŠã¿ãŸãããããŸã§æé éãã«ãªãœãŒã¹ãäœæããŠããã°ãPod å
ã® nginx ã³ã³ããããã¬ã¹ãã³ã¹ãè¿ã£ãŠããŸãã $ curl $( minikube service nginx --url ) -------------------- åºåäŸ -------------------- < !DOCTYPE html > < html > < head > < title > Welcome to nginx! < /title > < style > html { color-scheme: light dark ; } body { width: 35em ; margin: 0 auto ; font-family: Tahoma, Verdana, Arial, sans-serif ; } < /style > < /head > < body > < h 1> Welcome to nginx! < /h 1> < p > If you see this page, the nginx web server is successfully installed and working. Further configuration is required. < /p > < p > For online documentation and support please refer to < a href = " http://nginx.org/ "> nginx.org < /a > . < br/ > Commercial support is available at < a href = " http://nginx.com/ "> nginx.com < /a > . < /p > < p >< em > Thank you for using nginx. < /em >< /p > < /body > < /html > ã¯ãªãŒã³ã¢ãã åäœç¢ºèªçšã«äœæããåãªãœãŒã¹ãåé€ããŸãã Service ãªãœãŒã¹ã kubectl delete ã³ãã³ãã§åé€ããŸãã # Service ãåé€ãã $ kubectl delete services nginx Pod ã¯ãããã§ã¹ããã¡ã€ã«ããäœæããã®ã§ã kubectl delete ã³ãã³ãã§ -f ãã©ã°ã䜿çšãããªãœãŒã¹äœææã«äœ¿çšãããããã§ã¹ããã¡ã€ã«ãæå®ããŸãã # Pod ãåé€ãã $ kubectl delete -f sample-pod.yaml ããã¯ã¢ããã®ååŸ Minikube ãæ§ç¯ããã€ã³ã¹ã¿ã³ã¹ã®ããã¯ã¢ãããååŸããŠãããšãåŠç¿äžã«ç°å¢ãå£ããŠããŸã£ãå Žåãªã©ã«å®¹æã«åŸ©å
ããããšãã§ããŸãã 以äžã®èšäºã§ Compute Engine ã®ãã·ã³ã€ã¡ãŒãžã®ååŸæ¹æ³ãããã³ãã·ã³ã€ã¡ãŒãžããã®ã€ã³ã¹ã¿ã³ã¹ã®åŸ©å
æ¹æ³ã解説ããŠããã®ã§ããã¡ãã®æé ãåèã«ããã¯ã¢ãããååŸããŠãããšããã§ãããã åè : Compute Engineã€ã³ã¹ã¿ã³ã¹ã«PostgreSQLãµãŒããæ§ç¯ãã - ããã¯ã¢ããã®ååŸãšã€ã³ã¹ã¿ã³ã¹ã®åŸ©å
äœã
æš é§¿å€ª (èšäºäžèЧ) G-genæå端ãåæµ·éåšäœã®ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšãšã³ãžã㢠2022幎6æã«G-genã«ãžã§ã€ã³ãGoogle Cloud Partner Top Engineer 2025 Fellowã«éžåºã奜ããªGoogle Cloudãããã¯ãã¯Cloud Runã è¶£å³ã¯ã³ãŒããŒãå°èª¬ïŒSFããã¹ããªïŒãã«ã©ãªã±ãªã©ã Follow @sasashun0805
G-gen ã®å åã§ããåœèšäºã§ã¯ã Google ã¹ãã¬ããã·ãŒã ïŒGoogle SheetsïŒã®æ©èœã§ãã ã³ãã¯ãããã·ãŒã ã§ã ããŒã¿ã®æœåº æ©èœã䜿ãéãè¡æ°å¶éã 10äžè¡ãŸã§ããéžã¹ãªã å Žåã®å¯ŸåŠæ³ã玹ä»ããŸãã ã³ãã¯ãããã·ãŒããšã¯ æŠèŠ ããŒã¿ã®æœåº äºè±¡ è§£æ±ºæ¹æ³ ã³ãã¯ãããã·ãŒããšã¯ æŠèŠ ã³ãã¯ãããã·ãŒã ïŒConnected SheetsïŒã¯ã Google ã¹ãã¬ããã·ãŒã ã®æ©èœã§ããã³ãã¯ãããã·ãŒããçšãããšãGoogle CloudïŒæ§ç§° GCPïŒã®ããŒã¿åæãµãŒãã¹ã§ãã BigQuery ã®ããŒãã«ããã¥ãŒã Google ã¹ãã¬ããã·ãŒãäžã§å¯èŠåãåæã§ããŸãã 詳ããã¯ä»¥äžã®èšäºããåç
§ãã ããã blog.g-gen.co.jp ããŒã¿ã®æœåº ããŒã¿ã®æœåº ã¯ãBigQuery ã®ããŒã¿ã ã¹ãã¬ããã·ãŒãã«åãèŸŒã æ©èœã§ããããŒã¿ã®æœåºãè¡ããš ããŒã¿ã®åŠçãã¹ãã¬ããã·ãŒãäžã§å®çµãã ãããBigQuery ã®æéãæããããšãåºæ¥ãŸããå察ã«ããŒã¿ã®æœåºãè¡ããªããšã颿°ãçšããŠããŒã¿ãèšç®ãããšãçã«éœåºŠ BigQuery ã«ãªã¯ãšã¹ããçºè¡ããããããBigQuery ã®ã¹ãã£ã³æéãçºçããŸãã ããŒã¿ã®æœåºæ©èœã§ã¯ã æå€§ 500,000 è¡ ã®ããŒã¿ãæœåºããããšãå¯èœã§ãããã ããããŒã¿ãµã€ãºã¯ 10 MB 以äžãç·ã»ã«æ°ã¯ 5,000,000 以äžãšããå¶éããããŸãã åè : Analyze & refresh BigQuery data in Google Sheets using Connected Sheets > Pull data into an extract äºè±¡ ããŒã¿ã®æœåºæ©èœã¯ãå
è¿°ã®éãæå€§ 500,000 è¡ã®ããŒã¿æœåºãå¯èœã§ãã ããã2024幎12æçŸåšãGoogle ã¹ãã¬ããã·ãŒãã®èšå®ç»é¢ã§ããŒã¿ã®æœåºãèšå®ããããšãããšãè¡æ°å¶éã 100,000 è¡ãŸã§ããéžæã§ããŸãã ã ãã¡ããããã®ç¶æ
ã§èšå®ãé©çšããŠãã100,000 è¡ãŸã§ããããŒã¿ã¯åºåãããŸããããªãåœèšäºã®æ€èšŒã§ã¯ kaggle ã§å
¬éãããŠãã Black Friday ã®ããŒã¿ã»ãããçšããŠãããã¬ã³ãŒãæ°ã¯ 550,068 è¡ã§ãã å
šãŠã® Google Workspace ç°å¢ã§ãã®ãããªç¶æ³ãèŠããããã¯æªç¢ºèªã§ãããåœç€Ÿãææããè€æ°ã® Google Workspace ã¢ã«ãŠã³ãã§ã¯ã2024幎12æçŸåšãããããåæ§ã®äºè±¡ãçºçããŸããã è§£æ±ºæ¹æ³ åé¡ãšãªã£ãŠããè¡æ°å¶éã®èšå®ç®æã«ã¯ãå®ã¯ çŽæ¥æ°åãæžã蟌ãããšãã§ããŸã ã æåã§ã123,456ããæžã蟌ãã äŸ ãã®ããã 100,000 è¡ä»¥äžã®ã¬ã³ãŒãã衚瀺ããããå Žåã¯æåã§æ°åãæžãæãã å¿
èŠããããŸãããã®äŸã§ã¯çŽæ¥ã500,000ããšæžã蟌ãããšã§ãäžå³ã®ããã« 500,000 è¡ãŸã§ã¬ã³ãŒãã衚瀺ãããããšãã§ããŸããã ãã ãå
è¿°ã®éããããŒã¿ãµã€ãºã¯ 10 MB 以äžãç·ã»ã«æ°ã¯ 5,000,000 以äžãšããå¶éãåæã«é©çšããããããã©ããã«æµè§Šããå Žåã¯ãããäžéãšãªããŸãã ã»ã«æ°ã 5,000,000 ãè¶
ããéã®ãšã©ãŒ å å ç«åž (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšããŒã¿ã¢ããªãã£ã¯ã¹èª²ã2023幎4æãããG-genã«ãžã§ã€ã³ã Google Cloud Partner Top Engineer 2023, 2024ã«éžåº (2024幎ã¯Rookie of the yearã«ãéžåº)ãäŒã¿ã®æ¥ã¯ã ãããã²ãŒã ãããŠããããæã
èªè»¢è»ã§é åºãããŠããŸãã Follow @ryu_dohara
G-gen ã®äœã
æšã§ããåœèšäºã§ã¯ãDirect VPC Egress ãçµç±ã㊠Cloud NAT ãå©çšããéã®æ³šæç¹ãšããŠã Cloud NAT ã®ã¢ãã¿ãªã³ã°ææšã Cloud Monitoring ã«èšé²ãããªã仿§ ã«ã€ããŠè§£èª¬ããŸãã â»åœèšäºã«èšèŒãããŠããã¢ãã¿ãªã³ã°ã«é¢ãã仿§ã¯å·çæç¹ã®ãã®ã§ãããçŸåšã¯ã¢ããããŒãã«ããæ¹åãããŠããŸãã Direct VPC Egress çµç±ã® Cloud NAT å©çš å¶éäºé
æ³å®ãããåé¡ å¯Ÿç Cloud NAT ã®ãã°ãæå¹ã«ãã Cloud NAT ã®ããŒãå²ãåœãŠæ°ã«äœè£ããããã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ãå©çšãã Direct VPC Egress çµç±ã® Cloud NAT å©çš Cloud Run ã Cloud Run functionsïŒæ§ç§° Cloud FunctiionsïŒãªã©ã®ãµãŒããŒã¬ã¹ ã³ã³ãã¥ãŒãã£ã³ã° ãµãŒãã¹ã§ã¯ãåŠçãè¡ãéã«ã ãå®è¡ç°å¢ãèµ·åããåŠçãããªããšãã¯å®è¡ç°å¢ã忢ããããšãã§ããŸãããã®ããå®è¡ç°å¢ãèµ·åãããã³ã«ãå®è¡ç°å¢ã® IP ã¢ãã¬ã¹ã¯å€ãã£ãŠããŸããŸã ã ãããã®å®è¡ç°å¢ãããæ¥ç¶å
IP ã¢ãã¬ã¹ãå¶éãããŠããå€éšã® Web API çãžãªã¯ãšã¹ããéä¿¡ããå Žåãå®è¡ç°å¢ã®å€éš IP ã¢ãã¬ã¹ãåºå®ããå¿
èŠãã§ãŠããŸãããã®ãšãã Cloud NAT ã䜿çšããããšã§ãå€éšã¢ã¯ã»ã¹ã«äœ¿çšããã IP ã¢ãã¬ã¹ãåºå®ããããšãã§ããŸããCloud NAT 㯠VPC ã«çŽä»ãããªãœãŒã¹ã§ãããããCloud Run çãã VPC ã«æ¥ç¶ããããã«ã¯ Direct VPC Egress ã䜿çšããŸãã åè : Cloud NAT ã®æŠèŠ åè : ãã€ã¬ã¯ã VPC äžãïŒå€åãïŒ Cloud Run ã§ Direct VPC Egress ã䜿çšã㊠Cloud NAT ã§å€éš IP ã¢ãã¬ã¹ãåºå®ããæ¹æ³ã«ã€ããŠã¯ã以äžã®èšäºã§è§£èª¬ããŠããŸãã blog.g-gen.co.jp ãŸããDirect VPC Egress ã®è©³çްã«ã€ããŠã¯ä»¥äžã®èšäºããäžèªãã ããã blog.g-gen.co.jp å¶éäºé
Cloud Run ã®å
¬åŒããã¥ã¡ã³ãã«ã¯ Direct VPC Egress ã®å¶éäºé
ãèšèŒãããŠããã»ããCloud NAT ã®ããã¥ã¡ã³ãã«ãå¶éãèšèŒãããŠããŸãã åè : Direct VPC egress with a VPC network - Limitations åè : Cloud NAT product interactions - Direct VPC egress interactions åŸè
ã®ããã¥ã¡ã³ãã«ã¯ã以äžã®ãããªå¶éãèšèŒãããŠããŸãïŒ2025幎5ææç¹ïŒã Direct VPC Egress ã® Cloud NAT ææš 㯠Cloud Monitoring ã«ãšã¯ã¹ããŒããããªã Direct VPC Egress ã® Cloud NAT ãã°ã«ã¯ãçºä¿¡å
ã® Cloud Run ãµãŒãã¹ããªããžã§ã³ããžã§ãã®ååã¯è¡šç€ºãããªã Direct VPC Egress ã§ã¯ ãã©ã€ããŒã NAT ã¯ãã¬ãã¥ãŒæ©èœã®ã¿æäŸ åœèšäºã§ã¯ãããã®3ã€ã®å¶éã®ãã¡ã 1 ã®ã¢ãã¿ãªã³ã°ã«é¢ããå¶éã«ã€ããŠæãäžããŸãã æ³å®ãããåé¡ åè¿°ã® 1 ã®å¶éã¯ãDirect VPC Egress çµç±ã§ Cloud Run ã Cloud Run functions ãã Cloud NAT ãå©çšãããå Žåããã®å©çšç¶æ³ã Cloud Monitoring ã§å¯èŠåã§ããªãããšãæå³ããŠããŸãã Direct VPC Egressçµç±ã§Cloud NATã䜿çšãããšãCloud NATã®ã¢ãã¿ãªã³ã°ææšã衚瀺ãããªã ãã®å ŽåãCloud NAT ã«é«è² è·ãåå ã§åé¡ãçãããšãã®åå 調æ»ãé£ãããªããŸããããšãã°ä»¥äžã®èšäºã§ç޹ä»ããŠããã±ãŒã¹ã§ã¯ãCloud Run ããã®å
šãŠã®ã¢ãŠãããŠã³ã ãã©ãã£ãã¯ãæå³ãã Cloud NAT ã«åãã£ãŠããŸã£ãããšã§ã Cloud NAT ãå©çšã§ããããŒãæ°ãäžéã«éããŠããŸã ãæ¥ç¶ãšã©ãŒãå€çºããç¶æ³ã«ãªããŸããã blog.g-gen.co.jp ãã®ã±ãŒã¹ã«ããã Cloud NAT ã®é«è² è·ã¯èšå®ãã¹ã«ãã£ãŠèµ·ãã£ããã®ã§ããããªã¯ãšã¹ãã®æ¥å¢ã«ãã Cloud Run ãã¹ã±ãŒã«ããå Žåãªã©ãéåžžã®å©çšæã«ãçºçããå¯èœæ§ã¯ãããŸããæ¬æ¥ Cloud NAT ã®ããŒã䜿çšç¶æ³ã¯ Cloud Monitoring ã§å¯èŠåã§ããŸãããDirect VPC Egress çµç±ã®ãã©ãã£ãã¯ã«ã€ããŠã¯ããã®ææšãèšé²ãããŸããã 察ç Cloud NAT ã®ãã°ãæå¹ã«ãã Cloud NAT ã®ãã°ã¯äœææã®ããã©ã«ãã§ã¯ç¡å¹ã«ãªã£ãŠããŸããããããæå¹åããããšã§ããšã©ãŒãã°ãã Cloud NAT ã®ç°åžžãæ€ç¥ã§ããå¯èœæ§ããããŸãã ãã ããåè¿°ã®å¶éäºé
ã«èšèŒããããã«ãDirect VPC Egress ã® Cloud NAT ãã°ã«ã¯çºä¿¡å
ã®æ
å ±ãèšé²ãããªãç¹ã«ã¯æ³šæãå¿
èŠã§ãã Cloud NATã®ãã°ãæå¹åãã Cloud NAT ã®ããŒãå²ãåœãŠæ°ã«äœè£ããããã Cloud NAT ã«ã¯å©çšã§ããããŒãæ°ãåçã«å€æŽãã åçããŒãã®å²ãåœãŠ æ©èœããããŸããããããåçããŒãã®å²ãåœãŠã䜿ããšãããŒãæ°ãã¹ã±ãŒã«ã¢ãŠãããã¿ã€ãã³ã°ã§ãã±ãããããããããŠããŸãåé¡ããããŸãã åè : åçããŒãã®å²ãåœãŠ åè : åçããŒãå²ãåœãŠãæ§æãããŠãããšãã«ãã±ãããããããããã åçããŒãã®å²ãåœãŠã䜿çšããªãå Žåãéçã«ããŒãã®å²ãåœãŠãè¡ãããŸããããã©ã«ãã§ã¯ 64 åã®ããŒããå©çšã§ããŸãããæåã§å€æŽããããšãã§ããŸãã åè : éçããŒãã®å²ãåœãŠ Direct VPC Egress ã䜿çšããŠãããšã㯠Cloud NAT ã®ææšãå©çšã§ããªããããé©åãªããŒãæ°ãæ€èšããããšãé£ããã§ãããåé¡ãèµ·ãã£ããšãã«ããŒãæ°ãå¢ããéžæè¢ãããããšã¯çè§£ããŠãããšããã§ãããã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ãå©çšãã ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ çµç±ã§ Cloud NAT ã䜿çšããå ŽåãDirect VPC Egress ãšæ¯èŒããŠæéãããã©ãŒãã³ã¹é¢ã®ãã¡ãªããã¯ãããŸãããåœèšäºã§è§£èª¬ããã¢ãã¿ãªã³ã°ã«é¢ããåé¡ã¯çºçããŸããã åè : ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ Cloud Run ã§ãµãŒããŒã¬ã¹ VPC ã¢ã¯ã»ã¹ã䜿çšã㊠Cloud NAT ã§å€éš IP ã¢ãã¬ã¹ãåºå®ããæ¹æ³ã«ã€ããŠã¯ã以äžã®èšäºã§è§£èª¬ããŠããŸãã blog.g-gen.co.jp äœã
æš é§¿å€ª (èšäºäžèЧ) G-genæå端ãåæµ·éåšäœã®ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšãšã³ãžã㢠2022幎6æã«G-genã«ãžã§ã€ã³ãGoogle Cloud Partner Top Engineer 2025 Fellowã«éžåºã奜ããªGoogle Cloudãããã¯ãã¯Cloud Runã è¶£å³ã¯ã³ãŒããŒãå°èª¬ïŒSFããã¹ããªïŒãã«ã©ãªã±ãªã©ã Follow @sasashun0805
G-gen ã®ç±³å·ã§ããGoogle ãéçºããå€§èŠæš¡èšèªã¢ãã« Gemini ã¯ããã®é«ãæ§èœãšå€å²ã«ããããããã¯ãå±éã§æ³šç®ãéããŠããŸããåœèšäºã§ã¯ãGemini ãããã¯ãã®å
šè²ãç¶²çŸ
çã«è§£èª¬ããŸãã ã¯ããã« çæ AI åºç€ã¢ãã« ãšããŠã® Gemini ã¢ãã«ãšã¯ Gemini ã®ã¢ãã«ãã¡ããªãŒ Gemini ã¢ãã«ã®ããŒãžã§ã³ Gemini ãããã¯ã 1. Gemini ã¢ã㪠Gemini ã¢ããªãšã¯ ããŒã¿ä¿è· Gems 2. Gemini Enterprise Gemini Enterprise ãšã¯ åèèšäº 3. Gemini for Google Workspace Gemini for Google Workspace ãšã¯ ãµã€ãããã« Gemini for Google Workspace ã Google Worksapce ã®ã³ã¢ã©ã€ã»ã³ã¹ã«çµ±å äºäŸ 4. Gemini for Google Cloud Gemini for Google Cloud ãšã¯ æ©èœäžèЧ æé 5. Generative AI on Vertex AI Generative AI on Vertex AI ãšã¯ ããŒã¿ã®ä¿è· ãŠãŒã¹ã±ãŒã¹ ãã®ä»ã®ãããã¯ã æé 6. Gemini APIïŒGoogle AI StudioïŒ Gemini API ãšã¯ ãŠãŒã¹ã±ãŒã¹ ããŒã¿ã®ä¿è· æé å°å
¥ãã¹ã Gemini ãããã¯ã çæ AI ã§ç€Ÿå
æ¥åãå¹çåãããå Žå èªç€ŸããŒã¿ãå¹ççã«æ€çŽ¢ãããçæ AI ã«è³ªåã«çãããããå Žå èªç€Ÿã®æ°ãµãŒãã¹ã«çæ AI ãçµã¿èŸŒãå Žå ã·ã¹ãã éçºãå¹çåãããå Žå ããžãã¹å°å
¥ã«ãããæ³šæç¹ çæ AI ã®ããžãã¹é©çš çæ AI ã¯ç¢ºçãšã³ãžã³ã§ããããšãçè§£ãã çæ AI ã«åããŠãæ¥å / åããŠãªãæ¥å åããŠããæ¥å åããŠããªãæ¥å ã»ãã¥ãªã㣠ããŒã¿ä¿è· çæ AI ã¢ããªãžã®æ»æ äžé©åãªçæã³ã³ãã³ã 察ç å°å
¥äºäŸ ã¯ããã« Gemini ã¯ãGoogle ãéçºããçæ AI åºç€ã¢ãã«ãããã³ãããå©çšããçæ AI ãããã¯ã矀ã§ããGemini ãçšãããããã¯ãã«ã¯ã以äžããããŸãã ãããã¯ãå æŠèŠ Gemini ã¢ã㪠ãã©ãŠã¶ãã¢ãã€ã«ã¢ããªããå©çšãªçæ AI ãã£ããã¢ã㪠Gemini Enterprise äŒæ¥åã AI ãšãŒãžã§ã³ã Web ãµãŒãã¹ãäŒæ¥ããŒã¿ã®æšªææ€çŽ¢ãå¯èœ Gemini for Google Workspace Google Workspace ã«çµã¿èŸŒãŸããæ¥åè£å© AI Gemini for Google Cloud Google Cloud äžã®éçºãå¹çåããããŒã«çŸ€ Generative AI on Vertex AI API ã§ Gemini ã¢ãã«ã䜿çšïŒäŒæ¥åããGoogle Cloud ã® Vertex AI API çµç±ïŒ Gemini API ïŒGoogle AI StudioïŒ API ã§ Gemini ã¢ãã«ã䜿çšïŒå人åããGoogle AI Studio ã® API çµç±ïŒ ããããã«ç°ãªãæ©èœãç¹åŸŽããããããžãã¹ã·ãŒã³ã«åãããŠæé©ãªãããã¯ããéžæã§ããŸããåœèšäºã§ã¯ãããã Gemini ãããã¯ã ãšåŒç§°ããŠããããã玹ä»ããŸãã Gemini ãããã¯ãäžèЧ çæ AI åºç€ã¢ãã« ãšããŠã® Gemini ã¢ãã«ãšã¯ ãŸããæ©æ¢°åŠç¿ã«ããã ã¢ãã« ãšã¯ã倧éã®ããŒã¿ãããã¿ãŒã³ãã«ãŒã«ãåŠç¿ããç¹å®ã®ã¿ã¹ã¯ãå®è¡ã§ããããã«ãªã£ãä»çµã¿ã®ããšãæããŸãã äŸãã°ç»åèªèã¢ãã«ã¯ãããããã®ç«ã®ç»åããŒã¿ãããâç«ãããâ ãåŠç¿ããããšã§ã人ãæããããšãªãåããŠèŠãç«ã®ç»åã§ããããã¯ç«ã ããšèªèã§ããŸãã Gemini ãæ©æ¢°åŠç¿ã¢ãã«ã®1ã€ã§ããGemini 㯠ãã«ãã¢ãŒãã« ãªçæ AI ã¢ãã«ã§ãããã«ãã¢ãŒãã«ãªã¢ãã«ãšã¯ãããã¹ããç»åãé³å£°ãåç»ãªã©ã è€æ°ã®çš®é¡ã®æ
å ±ãçè§£ããã³ã³ãã³ããçæãã ããšãã§ããããšãæããŸãã åœèšäºã§ç޹ä»ãã Gemini ãããã¯ãã¯ããã® Gemini ã¢ãã«ãçšããŠããŸãã Gemini ã®ã¢ãã«ãã¡ããªãŒ Gemini ã¢ãã«ãã¡ããªãŒ Gemini ã®ã¢ãã«ã«ã¯è€æ°ã®çš®é¡ããããããããåŸæãªã¿ã¹ã¯ãèœåãç°ãªããŸããGemini ã¢ããªã Gemini for Google Workspace ã«çµã¿èŸŒãŸããŠããã¢ãã«ããGoogle Cloud ãã API çµç±ã§å©çšã§ããã¢ãã«ã«ã¯ã以äžã®ãããªãã®ããããŸãã Gemini Ultra Gemini ãã¡ããªãŒã®äžã§ãæã髿§èœãªã¢ãã«ã§ããè€éãªæšè«ãé«åºŠãªã³ãŒãã£ã³ã°ãªã©ãå°éçãªç¥èãå¿
èŠãšããã¿ã¹ã¯ã«åªããŠããŸãã Gemini Pro å¹
åºãã¿ã¹ã¯ã«å¯Ÿå¿ã§ããæ±çšæ§ã®é«ãã¢ãã«ã§ããæç« çæã翻蚳ã質çå¿çãªã©ãæ§ã
ãªçšéã§å©çšã§ããŸãã Gemini Flash é«éãªå¿çé床ãèªãã¢ãã«ã§ããã¬ã€ãã³ã·ãéèŠãªã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã Gemini Flash Lite Flash ããè¥å¹²è»œéã»é«éã§ãè²»çšå¯Ÿå¹æã«åªããã Gemini Nano æã軜éãªã¢ãã«ãã¹ããŒããã©ã³ãªã©ã®ããã€ã¹äžã§åäœããããã«èšèšãããŠãããéãããèšç®è³æºã§ãå¹ççã«åäœããŸãã ãããã®ã¢ãã«ã¯ãGemini ãããã¯ãã«çµã¿èŸŒãŸããŠããŸããç§ãã¡ãŠãŒã¶ãŒããæç€ºçã«ã¢ãã«ã®çš®é¡ãéžæã§ãããããã¯ããããã°ãGoogle ãæé©ãªã¢ãã«ãéžæããŠçµã¿èŸŒã¿æžã¿ã®ããšããããŸãã Gemini ã¢ãã«ã®ããŒãžã§ã³ äžèšã®ã¢ãã«ã«å ããŠãGemini ã«ã¯ ããŒãžã§ã³ ãšããæŠå¿µããããŸããããŒãžã§ã³ã¯é »ç¹ã«ã¢ããããŒããããŠãããã¢ãã«ã®æ¹åãæ©èœè¿œå ãè¡ããããã³ã«æŽæ°ãããŠãããŸãã 2025幎12æçŸåšãGemini ã¢ãã«ã®äžè¬å©çšå¯èœãªããŒãžã§ã³ã¯ Gemini 2.5 Proã2.5 FlashãGemini 2.0 Flash ãªã©ã§ãããŸã Gemini 3 Pro ã Preview çã®äœçœ®ã¥ãã§å©çšå¯èœã«ãªã£ãŠããŸãã ã¢ãã«ã®ã¢ããããŒãã«ãããã³ã³ããã¹ããŠã£ã³ããŠïŒäžåºŠã«åŠçã§ããæ
å ±éãåäœã¯ ããŒã¯ã³ ïŒããã倧ãããªã£ãããæšè«èœåãã³ãŒãçæèœåãåäžããŸããGemini ã§ã¯ã次ã
ã«æ°ããããŒãžã§ã³ãããŒã³ããããŠããŸãã åè : Gemini 2.5: Our most intelligent AI model åè : Google models ã¢ãã«ã«ã¯ ã©ã€ããµã€ã¯ã« ããããŸããå€ãã¢ãã«ã¯é 次æäŸãçµäºãããããèªç€Ÿéçºã¢ããªã« AI ã¢ãã«ãçµã¿èŸŒãéã¯ãã¢ãã«ã®ã©ã€ããµã€ã¯ã«ã«ããããã¢ããããŒããå¿
èŠã§ãã åè : Model versions and lifecycle Gemini ãããã¯ã 1. Gemini ã¢ã㪠Gemini ã¢ããªã¯ãã£ããããŒã« Gemini ã¢ããªãšã¯ Gemini ã¢ã㪠ïŒGemini appïŒãšã¯ã以äžã®2ã€ã®ãã£ãããããã¯ãã®ç·ç§°ã§ãã Gemini ãŠã§ãã¢ããªïŒ gemini.google.com ã®ããšããã€ãŠ Bard ãšåŒã°ããŠãã Web ãã©ãŠã¶åãçæ AI ãã£ããïŒ Gemini ã¢ãã€ã«ã¢ããªïŒAndroid ããã³ iOS åãã® Gemini ã¢ããªããŠã§ãã¢ããªçãšã»ãŒåçã®æ©èœãåããïŒ ãããããGoogle ã®çæ AI åºç€ã¢ãã«ã§ãã Gemini ãåºç€ãšãããã£ããã¢ããªã±ãŒã·ã§ã³ã§ãGoogle ã¢ã«ãŠã³ãããããã° ç¡æã§å©çšã§ããŸã ã åè : gemini.google.com åè : Gemini ã¢ã㪠ãã«ã ããŒã¿ä¿è· Gemini ã¢ããªã¯ãGoogle ã¢ã«ãŠã³ããããã°èª°ã§ãç¡æã§å©çšã§ããŸãããã ããç¡åã® Google ã¢ã«ãŠã³ãã§ Gemini ã¢ããªã䜿ãå Žåãå
¥åããããŒã¿ã¯ Google ã«ãã£ãŠ ãµãŒãã¹æ¹åã®ããã«å©çšããã å ŽåããããŸãã äžæ¹ã§ä»¥äžã®ãšãã£ã·ã§ã³ã® Google Workspace ã§ç®¡çãããã¢ã«ãŠã³ãã§ããã°ã ãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ããŒã¿ä¿è· ããé©çšãããŸãããã®å ŽåãããŒã¿ã¯ Google ã«ãã£ãŠ ãµãŒãã¹æ¹åã®ããã«å©çšãããããšã¯ãªã ã人éã®ã¬ãã¥ã¯ãŒã«ãã£ãŠèŠãããããšããããŸããã Business Starter / Business Standard / Business Plus Enterprise Starter / Enterprise Standard / Enterprise Plus Essentials Enterprise Essentials / Enterprise Essentials Plus Frontline Starter / Frontline Standard Nonprofits ããã« Google Workspace ã§ã¯ãGemini ã¢ããªãå©çšã§ãããŠãŒã¶ãŒãéå®ããããéã«çµç¹å
šäœã§å©çšå¯èœã«ãããªã©ãå©çšå¯åŠã®ã³ã³ãããŒã«ãå¯èœã§ãã åè : Gemini for Google Workspace ã«é¢ãããããã質å - Gemini ã¢ããªãšã¯äœã§ããïŒ åè : Gemini ã¢ããªããªã³ãŸãã¯ãªãã«ãã Gems Gemini ã¢ããªã®æ©èœã®1ã€ã« Gems ããããŸããGems 㯠Gemini ãŠã§ãã¢ããªãã«ã¹ã¿ãã€ãºããããã®æ©èœã§ãã2025幎12æçŸåšã§ã¯ããã¹ãŠã® Google Workspace ãŠãŒã¶ãŒããGoogle AI Pro ãŠãŒã¶ãŒãå©çšå¯èœã§ãã äŸãã°ãYouTube åç»ã®èŠçŽã衚瀺ããã®ã«ç¹åãã Gems ããç»åããããã¹ããæœåºããããšã«ç¹åãã Gems ãªã©ãäœæããããšãã§ããŸãã 詳现ã¯ä»¥äžã®èšäºãåèã«ããŠãã ããã blog.g-gen.co.jp 2. Gemini Enterprise Gemini Enterprise ãšã¯ Gemini Enterprise ã¯ãGoogle ãæäŸããäŒæ¥åã Web ãµãŒãã¹ã§ããGoogle Workspace ã Microsoft SharePoint OnlineãOutlookãConfluenceãJira ãªã©ã®äŒæ¥åããµãŒãã¹ãšæ¥ç¶ã§ããæšªææ€çŽ¢ãå®çŸã§ããã»ããGemini ã䜿çšããããŸããŸãª AI ã¿ã¹ã¯ãå®è¡ã§ããŸãã äŒæ¥ãå®å
¬åºã®åŸæ¥å¡ãããŒã¿ãçºèŠããããããã®ãå©ããAI ã«ããæ¥åãå¹çåããããšãå©ãããµãŒãã¹ã§ãã Gemini Enterprise 㯠Google Cloud ãããžã§ã¯ãã§ç®¡çããããŠãŒã¶ãŒããšã®ã©ã€ã»ã³ã¹ã賌å
¥ããããšã§äœ¿çšã§ããŸããGemini Enterprise ã®å©çšã«ããã Google Workspace ã®å©çšã¯å¿
é ã§ã¯ãªããEntra ID ãªã©ãµãŒãããŒãã£ã® ID ã䜿ã£ãŠ Gemini Enterprise ã«ãã°ã€ã³ã§ããŸãã åè : Gemini Enterprise ãšã¯äœã§ããïŒ åèèšäº Gemini Enterprise ã®è©³çްã¯ã以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp 3. Gemini for Google Workspace Gemini for Google Workspace ã¯æ¥åè£å©ããŒã« Gemini for Google Workspace ãšã¯ Gemini for Google Workspace ãšã¯ãGoogle Workspace ã«ã¢ããªã³ããŠå©çšãã AI ã¢ã·ã¹ã¿ã³ãæ©èœã§ããGemini ã®åŒ·åãªçæ AI æè¡ã GmailãGoogle ããã¥ã¡ã³ããGoogle ã¹ã©ã€ããGoogle ã¹ãã¬ããã·ãŒããªã©ãæ®æ®µäœ¿ãæ
£ãã Google Workspace ã¢ããªã«çµ±åãããããšã§ãæ¥åãå¹çåãããŸãã ãŸã Gemini for Google Workspace ã§ã¯ ãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ããŒã¿ä¿è· ãé©çšãããŠãããããŒã¿ã¯ Google ã«ãã£ãŠ ãµãŒãã¹æ¹åã®ããã«å©çšãããããšã¯ãªã ã人éã®ã¬ãã¥ã¯ãŒã«ãã£ãŠ èŠãããããšããªã ãããå®å¿ããŠæ¥åã«å©çšããããšãã§ããŸãã çŸåšïŒ2025幎1æ16æ¥ä»¥éïŒã§ã¯ãGemini for Google Workspace ã Business Starter ã Enterprise Starter ãªã©äžéšã®ãšãã£ã·ã§ã³ãé€ããã¹ãŠã® Google Workspace ã³ã¢ã©ã€ã»ã³ã¹ã«çµ±åãããŠããŸããã€ãŸã ã»ãšãã©ã® Google Workspace ãŠãŒã¶ãŒã¯ãGemini for Google Workspace ãæšæºã§å©çšã§ããŸã ã åè : Gemini for Google Workspace åè : Gemini for Google Workspace ã«é¢ãããããã質å åè : Google Workspace ã®åãšãã£ã·ã§ã³ã«è¿œå ããã AI æ©èœ ãµã€ãããã« Gemini for Google Workspace ã§ã¯ã ãµã€ãããã« ãéã㊠Gemini ãå©çšã§ããŸãã Gemini ãçµ±åãããŠãã Google Workspace ã¢ããªïŒGoogle ããã¥ã¡ã³ããGoogle ã¹ãã¬ããã·ãŒããªã©ïŒã§ã¯ãGemini ã¢ã€ã³ã³ã衚瀺ãããŸããäŸãã° Google ããã¥ã¡ã³ãã®å Žåãç»é¢å³äžã« Gemini ã¢ã€ã³ã³ããããŸãããã®ã¢ã€ã³ã³ãã¯ãªãã¯ãããšããµã€ãããã«ã«ããã³ããå
¥åç»é¢ã衚瀺ãããGemini ã«æç€ºãåºãããšãã§ããŸããGemini ã¯æç€ºãåãåããšãæ°ç§ã§ã³ã³ãã³ããçæããŠãããŸãã Google ããã¥ã¡ã³ãäžã® Gemini ãµã€ãããã« Gemini for Google Workspace ã Google Worksapce ã®ã³ã¢ã©ã€ã»ã³ã¹ã«çµ±å Gemini for Google Workspace ã®å©çšã«ã¯ã以å㯠Gemini for Google Workspace ã¢ããªã³ã©ã€ã»ã³ã¹ã®è¿œå 賌å
¥ãå¿
èŠã§ãããããã2025幎1æ16æ¥ãGoogle ãæ°ããæéäœç³»ãçºè¡šããåæã« Business Starter ã Enterprise Starter ãªã©äžéšãšãã£ã·ã§ã³ãé€ããã¹ãŠã® Google Workspace ãšãã£ã·ã§ã³ã§ Gemini for Google Workspace ãæšæºã§å©çšå¯èœã«ãªããŸããã以äžã¯ãæ¹å®åãšæ¹å®åŸã®æéäžèЧã§ãïŒ2025幎7æçŸåšïŒã ãšãã£ã·ã§ã³ æ¹å®åïŒãŠãŒã¶ãŒ/æïŒ æ¹å®åŸïŒãŠãŒã¶ãŒ/æïŒ Business Starter ãã¬ãã·ãã« : 816å 幎éå¥çŽ : 680å ãã¬ãã·ãã« : 950å 幎éå¥çŽ : 800å Business Standard ãã¬ãã·ãã« : 1,632å 幎éå¥çŽ : 1,360å ãã¬ãã·ãã« : 1,900å 幎éå¥çŽ : 1,600å Business Plus ãã¬ãã·ãã« : 2,448å 幎éå¥çŽ : 2,040å ãã¬ãã·ãã« : 3,000å 幎éå¥çŽ : 2,500å äžèšã®ããã«ãæ¹å®åŸã¯ã©ã€ã»ã³ã¹æéãäžãã£ãŠãããã®ã®ãæ¹å®åŸã¯ Business Starter ãš Enterprise Starter ãé€ããã¢ããªã³ãªãã§ Gemini for Google Workspace ãå©çšå¯èœã«ãªã£ãŠããŸãããŸãããã§ã« Gemini ã¢ããªã³ã©ã€ã»ã³ã¹ã賌å
¥æžã¿ã®å Žåã2025幎1æ31æ¥ä»¥éã¯è«æ±ãããªããªããŸãã æ¢åã®å¥çŽã«å¯ŸããŠãã®æéæ¹å®ãã©ã®ããã«åæ ããããã¯ã賌å
¥æ¹æ³ãå¥çŽã®æŽæ°ã¿ã€ãã³ã°ã賌å
¥çµè·¯ã«ãã£ãŠç°ãªããŸããã©ã€ã»ã³ã¹ã Google ããçŽæ¥è³Œå
¥ããŠããå Žåã¯ä»¥äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã販売ããŒãããŒãã賌å
¥ããŠããå Žåã¯ãå¶æ¥æ
åœè
ã«ã確èªãã ããã åè : Google Workspace Business ãšãã£ã·ã§ã³ã® AI æ©èœãšæéæ¹å® äºäŸ Google Workspace ã«çµã¿èŸŒã¿ã® AI é¢é£æ©èœã¯ã以äžã®èšäºã§è©³çްã«è§£èª¬ãããŠããŸããG-gen ã®åŸæ¥å¡ãããŠãŒã¶ãŒãšã㊠Gemini é¢é£æ©èœã掻çšããŠããäºäŸã玹ä»ããèšäºãšãªã£ãŠããŸãã blog.g-gen.co.jp 4. Gemini for Google Cloud Gemini for Google Cloud ã¯éçºè£å©ããŒã« Gemini for Google Cloud ãšã¯ Gemini for Google Cloud ã¯ãGoogle Cloud äžã§ã®éçºã«åœ¹ã«ç«ã€ãéçºè
åãã® AI ã¢ã·ã¹ã¿ã³ãæ©èœã§ãããœãŒã¹ã³ãŒãã®èªåçæãããŒã¿åæã®å¹çåãã»ãã¥ãªãã£ã®åŒ·åãªã©ãå¯èœã§ãã ã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ãã¡ãããããŒã¿ãµã€ãšã³ãã£ã¹ããããžãã¹ã¢ããªã¹ããã»ãã¥ãªãã£æ
åœè
ãªã©ãæ§ã
㪠Google Cloud ãŠãŒã¶ãŒã®ãªãã¬ãŒã·ã§ã³ã»éçºãæ¯æŽããŸãã åè : Gemini for Google Cloud ã®æŠèŠ æ©èœäžèЧ Gemini for Google Cloud ã«ã¯ä»¥äžã®æ©èœãå«ãŸããŠããŸãã æ©èœå æŠèŠ Gemini in BigQuery ããŒã¿åæãå¯èŠåãSQL ã Python ã®ã³ãŒãçæãªã©ãæ¯æŽ Gemini Code Assist IDE ãšé£æºããŠå©çšããœãŒã¹ã³ãŒãéçºããããã€ããã©ãã«ã·ã¥ãŒãã£ã³ã°ãæ¯æŽ Gemini in Colab Enterprise Colab EnterpriseããŒãããã¯ã§ã®Pythonã³ãŒãçæãæ¯æŽ Gemini in Databases ããŒã¿ããŒã¹ç®¡çãã»ãã¥ãªãã£åäžãªã©ãæ¯æŽ Gemini in Looker LookerïŒGoogle Cloud ã³ã¢ïŒã Looker Studio Pro ã§ããŒã¿å¯èŠåãè§£éãæ¯æŽ Gemini in Security Command Center ã»ãã¥ãªãã£ã«é¢ããæ€çŽ¢ã¯ãšãªçæãã±ãŒã¹è§£éãæ»æãã¹ææ¡ãæ¯æŽ ä»¥äžã®åœç€Ÿèšäºãåèã«ããŠãã ããã blog.g-gen.co.jp blog.g-gen.co.jp blog.g-gen.co.jp æé Gemini for Google Cloud ãå©çšããã«ã¯ã Gemini Code Assist ãµãã¹ã¯ãªãã·ã§ã³ ã賌å
¥ããŠããŠãŒã¶ãŒã«å²ãåœãŠãŸããã©ã€ã»ã³ã¹ãå²ãåœãŠããããŠãŒã¶ãŒã¯ãGemini in BigQueryãGemini in DatabasesãGemini in Colab Enterprise ãªã©ã®æ©èœãå©çšå¯èœã«ãªããŸãã åè : Set up Gemini Code Assist Standard and Enterprise Gemini Code Assist ãµãã¹ã¯ãªãã·ã§ã³ã«ã¯ Standard ãš Enterprise ã®2ãšãã£ã·ã§ã³ããããã©ã¡ããéžã¶ãã«ãã£ãŠä»éããæ©èœãç°ãªããŸãã以äžã¯ã2025幎12æçŸåšã®äŸ¡æ Œã§ããææ°ã®äŸ¡æ Œã¯ãå¿
ãå
¬åŒããã¥ã¡ã³ããåç
§ããŠãã ããã ãšãã£ã·ã§ã³ æéïŒæé¡ïŒ æéïŒ12ã¶æã³ãããïŒ Standard $22.80 / æ / 人 $19.0 / æ / 人 Enterprise $54.0 / æ / 人 $45.0 / æ / 人 åèïŒ Gemini for Google Cloud pricing ãã ããGemini in BigQuery ã®ã¿å©çšãããå Žåãæé㯠BigQuery ã®éåžžã®æéã«çµã¿èŸŒãŸããŠããã è¿œå æéã¯ãããŸãã ããã ããå©çšãã課éã¢ãŒãïŒãªã³ããã³ã課éãŸã㯠BigQuery EditionsïŒã«ãã£ãŠäœ¿çšå¯èœãªæ©èœãç°ãªãããšã«æ³šæããŠãã ããã Gemini in BigQuery ã®å©çšã«ããã£ãŠã¯ãå¿
ããã Gemini Code Assist ããµãã¹ã¯ã©ã€ãããå¿
èŠã¯ãããŸãããããµãã¹ã¯ã©ã€ããããš Gemini in BigQuery ã®ãã¹ãŠã®æ©èœã䜿ããããšã«å ããŠãã¯ã©ãŒã¿ïŒå©çšåæ°ã®å¶éïŒãç·©åãããŸãã åè : Gemini for Google Cloud pricing - Gemini in BigQuery Pricing Overview 5. Generative AI on Vertex AI Generative AI on Vertex AI ã§ã¯ Google Cloud çµç±ã§ Gemini ãå©çš Generative AI on Vertex AI ãšã¯ Generative AI on Vertex AI ãšã¯ãGoogle Cloud ã® AI/ML ãã©ãããã©ãŒã ãããã¯ãã§ãã Vertex AI ã® REST API ãéããŠãGemini ãªã©ã®çæ AI ã¢ãã«ãå©çšããææ³ã®ããšã§ããã¢ããªã±ãŒã·ã§ã³éçºè
㯠Vertex AI API ãéã㊠Gemini ã¢ãã«ã«ããã³ãããå
¥åããã¬ã¹ãã³ã¹ãåŸãããšãã§ããŸãã ããã«ãããGemini ãèªç€Ÿéçºã®ã¢ããªã±ãŒã·ã§ã³ã«çµã¿èŸŒãããšãã§ããŸãã åè : Overview of Generative AI on Vertex AI Vertex AI API ã¯ãHTTPS ã§ã®åŒã³åºãããPython ã Java ãªã©ã®åããã°ã©ãã³ã°èšèªçšã®å
¬åŒã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªããŸã BigQuery ML ãªã©ããå©çšã§ããŸãã Google Cloud ãããã¯ãã§ãã®ã§ãèªèšŒã»èªå¯ã¯ IAM ã«ãã£ãŠç®¡çãããŠããããŸã課éã Google Cloud å©çšæãšããŠè«æ±ãããŸãã ããŒã¿ã®ä¿è· Vertex AI API çµç±ã§ Gemini ã«å
¥åãããããã³ããããã¥ãŒãã³ã°ããŒã¿ã¯ä¿è·ãããŠãããããŒã¿ã Google ã«ãã£ãŠãµãŒãã¹æ¹åã«å©çšãããããšã¯ãããŸããã åè : Vertex AI ãšããŒã¿ã®ä¿æãŒã ãŠãŒã¹ã±ãŒã¹ 以äžã®åœç€Ÿèšäºã§ã¯ãVertex AI API çµç±ã§ Gemini ãåŒã³åºãããšã§çæ AI ã¢ããªã±ãŒã·ã§ã³ãéçºããäºäŸã玹ä»ããŠããŸãã blog.g-gen.co.jp blog.g-gen.co.jp blog.g-gen.co.jp ãã®ä»ã®ãããã¯ã Google Cloud ã«ã¯ Vertex AI API çµç±ã§ã® Gemini åŒã³åºãã®ã»ããGemini ãå©çšããåçš®ãããã¯ãããããŸãã Vertex AI Search 㯠Vertex AI ã®æŽŸçãããã¯ãã®1ã€ã§ããVertex AI Search ã«ãããRAG æ§æïŒçæ AI ã«ããçæãããã³ã³ãã³ããããŒã¿ã«ããæ ¹æ ã¥ãããã¢ãŒããã¯ãã£ïŒãç°¡åã«æ§æããããGoogle ã¯ãªãªãã£ã®äŒæ¥ããŒã¿æ€çŽ¢ïŒãšã³ã¿ãŒãã©ã€ãºãµãŒãïŒã容æã«æ§ç¯ã§ããŸãã 以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp blog.g-gen.co.jp æé Generative AI on Vertex AI ã§ã® Gemini å©çšã®æéã¯ãå
¥åããããŒã¿éãšåºåããããŒã¿éã«å¿ããåŸé課éã§ããåºå®æéã¯çºçããŸããã 以äžã¯ãæéå䟡ã®äžéšæç²ã§ããæ
å ±ã¯2025幎12æçŸåšã®ãã®ã§ãã®ã§ãå¿
ãææ°ã®å
¬åŒããã¥ã¡ã³ãããåç
§ãã ããã ã¢ãã« ã¿ã€ã å䟡 (200kããŒã¯ã³ä»¥äžã®å
¥åã®å Žå) Gemini 2.5 Flash å
¥åããŒã¯ã³æ° $0.30 / çŸäžããŒã¯ã³ Gemini 2.5 Flash åºåããŒã¯ã³æ° (text) $2.50 / çŸäžããŒã¯ã³ åèïŒ Cost of building and deploying AI models in Vertex AI - Google models 6. Gemini APIïŒGoogle AI StudioïŒ Google AI Studio çµç±ã§ Gemini API ãå©çš Gemini API ãšã¯ Gemini API ã¯ã Google AI Studio ãšããå人ã»å°èŠæš¡éçºè
åãã® AI éçºçšãã©ãããã©ãŒã çµç±ã§æäŸãããŠãããGemini ã¢ãã«ãåŒã³åºãå¯èœãª API ã§ããGoogle Cloud ã® Generative AI on Vertex AI ãšåãã REST API ãã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªçµç±ã§å©çšã§ããŸãã Gemini APIïŒGoogle AI StudioïŒã¯ Google Cloud ã®äžéšã§ã¯ãªããå¥ãµãŒãã¹ãšããŠæäŸãããŠããŸããGemini API ã¯å©çšèŠçŽã«åŸããåçšå©çšããããšãã§ããŸãã Gemini API ã«ã¯ç¡ææ ããããäžå®ã®ã¬ãŒãå¶éã®ããšå©çšå¯èœã§ããæåçã¯ããªã¯ãšã¹ããçæã³ã³ãã³ãã®ããªã¥ãŒã ã«åºã¥ããåŸé課éã§ãã Google Cloud ãšã¯ç¬ç«ããŠãããããèªèšŒã¯ IAM ã§ã¯ãªããGoogle AI Studio ããçºè¡ãã API ããŒã§è¡ãããŸãã åè : Gemini API ã䜿ã£ãŠã¿ã åè : Google AI Studio ãŠãŒã¹ã±ãŒã¹ Gemini API ãæäŸãã Google AI Studio ã¯ã å人éçºè
ãå°èŠæš¡éçºããŸãåŠç¿è
åã ã®ãã©ãããã©ãŒã ã§ãããããã®æ¹ã
ããã¯ã€ãã¯ã« Gemini API ã詊ããŠã¿ããæ¹ã¯ãGoogle AI Studio çµç±ã® Gemini API ãå©çšããŸãããªããGoogle AI Studio ã® Gemini API ãžã®èªèšŒã¯ãAPI ããŒãçšããŠè¡ããŸãã äžæ¹ã§ äŒæ¥ã«ãã AI ã¢ããªéçº ãªã©ã®çšéã§ Gemini ã¢ãã«ãå©çšãããå Žåã¯ãGoogle AI Studio ã§ã¯ãªããGoogle Cloud ã® Generative AI on Vertex AI ã䜿ãããšãæšå¥š ãããŸããGoogle CloudïŒGenerative AI on Vertex AIïŒã®ã»ãããModel Armor ãªã©ã®ã»ãã¥ãªãã£æ©èœã IAM ã«ããèªèšŒãä»ã® Google Cloud ãµãŒãã¹ãšã®é£æºãã«ã¹ã¿ããŒã±ã¢ã«ãããµããŒããªã©ããããšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®æ¬çªç°å¢ã¢ããªã±ãŒã·ã§ã³ã«é©ããæ©èœãåããŠããŸãã 以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp ããŒã¿ã®ä¿è· Gemini API ãç¡ææ ã§å©çšããå Žåãå
¥åããããŒã¿ãçæãããã³ã³ãã³ãã¯ãGoogle ã® ãµãŒãã¹æ¹åã«å©çšãããã ã 人éã®ã¬ãã¥ã¯ãŒã«èŠããã å¯èœæ§ããããŸããGoogle ã¯ãããå©çšèŠçŽã«æèšããŠãããæ©å¯æ
å ±ãå人æ
å ±ãéä¿¡ããªãããšãæ±ããŠããŸãã Gemini API ã®æåçãå©çšããå Žåã¯ããŒã¿ãä¿è·ããããµãŒãã¹æ¹åã«å©çšããããã人éã®ã¬ãã¥ã¯ãŒã«èŠãããããšã¯ãããŸããã åè : Gemini API 远å å©çšèŠçŽ æé Google AI Studio çµç±ã§ã® Gemini API ã¯ãå
¥åããããŒã¿ãšåºåããããŒã¿ã®ããªã¥ãŒã ã«å¿ããåŸé課éã§ãããã ããGoogle Cloud ã® Generative AI on Vertex AI ã§å©çšããå Žåãšã¯ç°ãªãæéèšå®ããããŠãããæåæ°ãç»åã®ææ°ã§ã¯ãªããããŒã¯ã³éã«å¿ãã課éã§ãã åè : æéã¢ãã« å°å
¥ãã¹ã Gemini ãããã¯ã çæ AI ã§ç€Ÿå
æ¥åãå¹çåãããå Žå 瀟å
æ¥åãå¹çåãããå Žåã¯ã Gemini ã¢ã㪠ã NotebookLM ããŸã Gemini for Google Workspace ã®å°å
¥ãæ€èšããŸãã ãããã®ãããã¯ãã«ããã以äžã®ãããªå¹æãæåŸ
ã§ããŸãã å人ãããŒã ã®çç£æ§åäž ã¡ãŒã«ãããã¥ã¡ã³ãäœæããã¬ãŒã³ããŒã·ã§ã³äœæãæ
å ±åéãªã©ãå¹çå ã»ãšãã©ã® Google Workspace ã®ãšãã£ã·ã§ã³ã§ã¯ Gemini ã¢ããªãããŒã¿ä¿è·ä»ãã§å©çšå¯èœã«ãªã£ãŠããã https://gemini.google.com/ ã«ã¢ã¯ã»ã¹ããããšã§ããã«æ¥åå©çšããããšãã§ããŸããNotebookLM ãåæ§ã§ã https://notebooklm.google.com/ ã«ã¢ã¯ã»ã¹ããã°ããå©çšå¯èœã§ãã æ¥åå¹çåã®ããã®åçš® AI ãµãŒãã¹ã®æ¯èŒã«ã€ããŠã¯ã以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp èªç€ŸããŒã¿ãå¹ççã«æ€çŽ¢ãããçæ AI ã«è³ªåã«çãããããå Žå èªç€Ÿã®å€§éã®ããã¥ã¡ã³ãé¡ã®äžããå¿
èŠãªããŒã¿ãå¹ççã«æ€çŽ¢ããããçæ AI ã«èŠçŽããããå ŽåãGoogle Cloud ãããã¯ãã®1ã€ã§ãã Vertex AI Search ã䜿ããŸãã èç©ããã倧éã®èªç€ŸããŒã¿ãããšã«çæ AI ã«ã³ã³ãã³ããçæãããããæ¥æ¬èªã§ã®è³ªåã«çãããããããããšãã§ããŸãã ãŸããã·ã¹ãã ããŸããã èªç€ŸããŒã¿ã®æšªææ€çŽ¢ãããšãŒãžã§ã³ãæ©èœãå©çšã§ãã Web ãµãŒãã¹ã§ãã Gemini Enterprise ã®å©çšãæ€èšããŸããããã°ã©ã ãå®è£
ããããšãªãããµãŒãã¹ãšããŠæšªææ€çŽ¢ãçæ AI æ©èœãå©çšããããšãã«æå¹ã§ãã åè : Gemini Enterpriseã培åºè§£èª¬ïŒ - G-gen Tech Blog èªç€Ÿã®æ°ãµãŒãã¹ã«çæ AI ãçµã¿èŸŒãå Žå èªç€Ÿã®ã¢ããªã«çæ AI ãçµã¿èŸŒãã ããé¡§å®¢ãžæäŸãããµãŒãã¹ã«çæ AI ãæŽ»çšãããå Žåã Generative AI on Vertex AI ã䜿ããŸãã èªç€Ÿã¢ããªãã Vertex AI çµç±ã§ Gemini ãåŒã³åºããããã³ãããå
¥åããŠãçæçµæãåŸãããšãã§ããŸããã·ã¹ãã éçºã®ç¥èããããã°ãæ©æ¢°åŠç¿ã®ç¥èããªããšããVertex AI ã Vertex AI Search ã® API åŒã³åºãã«ãããé«åè³ªãªæ€çŽ¢ã RAG ãå®çŸããããšãã§ããŸãã ã·ã¹ãã éçºãå¹çåãããå Žå ã·ã¹ãã éçºãå¹çåãããå Žåãã³ãŒãçæè£å©æ©èœãªã©ãåãã Gemini for Google Cloud ã䜿ããŸãã Gemini for Google Cloud ã®1æ©èœã§ãã Gemini Code Assist ã¯ãæé¡ãµãã¹ã¯ãªãã·ã§ã³å¶ã§ãããé«åºŠãªéçºè£å©æ©èœãåããŠããŸãã ããžãã¹å°å
¥ã«ãããæ³šæç¹ çæ AI ã®ããžãã¹é©çš OpenAI 瀟ã2022幎11æã«çæ AI ãã£ããããã Chat GPT ãå
¬éããŠãããç¬ãéã«çæ AI ããŒã ãå·»ãèµ·ãããŸããã2023幎ã«ã¯å€ãã®äŒæ¥ããçæ AI ã®ããžãã¹å©çšã詊ã¿ã PoCïŒProof of ConceptïŒãè¡ãã2024幎ã«ã¯å®éã«æ¥åã§å©çšããäŒæ¥ãå¢ããŸããã çæ AI ããŒã ã«ä¹ãé
ããŸããšã2025幎ãå€ãã®äŒæ¥ãçæ AI ã® PoC ããæ¥åãžã®é©çšã詊ã¿ããã®ãšèããããŸããããããçæ AI ã¯éã®åŒŸäžžïŒäžèœè¬ïŒã§ã¯ãããŸããã以äžã«èª¬æããæ§è³ªãé©åã«çè§£ããããžãã¹ã«é©çšããããšãæ€èšããŠãã ããã çæ AI ã¯ç¢ºçãšã³ãžã³ã§ããããšãçè§£ãã Gemini ãå«ãçæ AI ã¯ã倧éã®ããŒã¿ããåŠç¿ãã確ççã« æããããããåçãçæ ããã確çãšã³ãžã³ãã§ãããã®ãããå®ç§ãªåçãè¿ããšã¯éããŸããããæ¯ååãã³ã³ãã³ããçæããããšãéããŸããã ãã®ç¹ãçè§£ããäžã§ãGemini ãæŽ»çšããæ¥åãšããã§ãªãæ¥åãèŠæ¥µããå¿
èŠããããŸãããããçè§£ããŠããªããšã粟床åäžã«å ±ãããªãåŽåãæ³šãç¶ããããšã«ãªã£ãŠããŸããŸãã åè : The Prompt: 確çãããŒã¿ããããŠçæ AI ã«åãåããã€ã³ãã»ãããšã¯ çæ AI ã«åããŠãæ¥å / åããŠãªãæ¥å åããŠããæ¥å åè¿°ã®æ§è³ªãããçæ AI ã¯ä»¥äžã®ãããªæ¥åé åãåŸæãšããŠããŸãã åµé çãªäœæ¥ æ°ããã¢ã€ãã¢ã®åµåºãæç« ãã³ãŒãã®äœæããã¶ã€ã³ã翻蚳ãªã© æ
å ±åéãåæ å€§éã®ããŒã¿ã®èŠçŽããã¬ã³ãåæãã¬ããŒãäœæãªã© ã³ãã¥ãã±ãŒã·ã§ã³ é«åºŠãªæ£ç¢ºæ§ãæ±ããããªã顧客察å¿ã瀟å
ã³ãã¥ãã±ãŒã·ã§ã³ãæè²ãªã© å埩çãªäœæ¥ ããŒã¿å
¥åãè°äºé²äœæãåçŽãªè³ªåãžã®åçãªã© åããŠããªãæ¥å å察ã«ã以äžã®ãããªæ¥åã«ã¯åããŠããŸããã é«åºŠãªå€æãæææ±ºå® å°éç¥èãå«çèŠ³ãæ±ããããæ¥å æ£ç¢ºæ§ãæ±ããããæ¥å å»ç蚺æãéèååŒãæ³åŸçžè«ãªã© ã»ãã¥ãªãã£äžãé«åºŠã«ã»ã³ã·ãã£ããªæ¥å éèŠãªå人æ
å ±ãæ©å¯æ
å ±ãå«ã¿ãéåžžã«é«åºŠãªã»ãã¥ãªãã£äžã®èæ
®ãå¿
èŠãªæ¥å ã»ãã¥ãªã㣠ããŒã¿ä¿è· çæ AI ã®æ¥åå©çšã§ã¯ãå
¥åããããã³ãããçæãããã³ã³ãã³ãããçæ AI ãµãŒãã¹æäŸäºæ¥è
ã«ãã£ãŠã©ãæ±ããããã«ååæ³šæããå¿
èŠããããŸãã å€ãã®å Žåãç¡åã®çæ AI ãããã¯ãã§ã¯ãå
¥åºåããŒã¿ãäºæ¥è
ã® ãµãŒãã¹æ¹åã®ããã«å©çšãããŸã ããããé²ãã«ã¯ãæåçã賌å
¥ãã ãªããã¢ãŠã ãšåŒã°ãããäºæ¥è
ã«ãã£ãŠå
¥åºåããŒã¿ããµãŒãã¹æ¹åã«çšããããªãããã«ããããªãã·ã§ã³ãæå¹åããå¿
èŠããããŸãã Gemini ã®å Žåãç¡åçã® Gemini ã¢ããªãç¡åçã® Gemini APIïŒGoogle AI StudioïŒã§ã¯ãå
¥åºåããŒã¿ããµãŒãã¹æ¹åã«å©çšãããããšãå©çšèŠçŽã«æèšãããŠããŸãã äžæ¹ã§ãGemini for Google Workspace ã Generative AI on Vertex AIïŒGoogle CloudïŒã§ã¯ãå
¥åºåããŒã¿ã«ãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ããŒã¿ä¿è·ãé©çšããããµãŒãã¹æ¹åãªã©ã«ã¯å©çšãããŸããã ãã®ç¹ãããçè§£ããå©çšèŠçŽãªã©ã確èªããŠãã ããã çæ AI ã¢ããªãžã®æ»æ ç¹ã«èªç€Ÿã¢ããªã«çæ AI ãçµã¿èŸŒãã§äžè¬ãŠãŒã¶ãŒåãã«å
¬éããå Žåãçæ AI ã®è匱æ§ãçªãæ»æææ³ã§ãã ããã³ããã€ã³ãžã§ã¯ã·ã§ã³ ãªã©ã«ååæ³šæããå¿
èŠããããŸãã ããã³ããã€ã³ãžã§ã¯ã·ã§ã³ã¯ãçæ AI ã«æªæãæã£ãŠå·¥å€«ããããã³ãããæå
¥ããæ¬æ¥ãŠãŒã¶ãŒãããã¹ãã§ã¯ãªãæ
å ±çãçããããææ³ã§ããããã«ãããæ©å¯æ
å ±ãã·ã¹ãã ã®å
éšæ§é ãæŒæŽ©ãããªã¹ã¯ããããŸãã ãã¢ããªã±ãŒã·ã§ã³å
éšæ§é ã«ãããããŒã¿ã®ã¢ã¯ã»ã¹æš©éèšèšããã·ã¹ãã åŽããã³ããã®å·¥å€«ããã¬ã¹ãã³ã¹ãžã®ãã£ã«ã¿èšå®ããçæ AI ãæ
åœããæ©èœç¯å²ã®èª¿æŽããªã©ãé©åãªå¯ŸåŠãè¡ãããšã§ãªã¹ã¯ãäœæžããããšãã§ããŸãã åè : 責任ãã AI åè : Google AI Studio - å®å
šã«é¢ããã¬ã€ãã³ã¹ äžé©åãªçæã³ã³ãã³ã çæ AI ã¯ç¢ºçè«çãªä»çµã¿ã§ãããããäžé©åãªçæã³ã³ãã³ããçæãããå¯èœæ§ãåŠå®ã§ããŸãããç¹ã«å€éšã«å
¬éããå¯èœæ§ã®ããçæ AI ãçµã¿èŸŒãã èªç€Ÿã¢ããªã§ã¯ãæ¿æ²»ãå®æãæ§çãªã³ã³ãã³ããå·®å¥çãªçºèšããã©ã³ãã€ã¡ãŒãžãæ¯æãããããªã³ã³ãã³ããªã©ãçæããããªã¹ã¯ãäœæžããå¿
èŠããããŸãã ã·ã¹ãã ããã³ããã工倫ããããšã§ãããã£ãçæãææ¢ããããGemini ã§ã¯ å®å
šãã£ã«ã¿ ã«ãã£ãŠãã®ãããªã³ã³ãã³ããè¿çãããããšãé²ãããšãã§ããŸãã åè : å®å
šæ§ã®ããã®ã·ã¹ãã æç€º åè : å®å
šãã£ã«ã¿ãšã³ã³ãã³ã ãã£ã«ã¿ 察ç Google Cloud ã§ã¯ã Model Armor ãšãããµãŒãã¹ãæäŸãããŠããŸããçæ AI ã¢ãã«ãžã®ã€ã³ããããšã¢ãŠãããããæ€æ»ããŠãæ»æã詊ã¿ãããã³ããããäžé©åãªåºåã鮿ããããšãã§ããŸãã詳现ã¯ä»¥äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp å°å
¥äºäŸ æ¥çš®ãæ¥æ
ãåãããæ§ã
ãªäŒæ¥ã Gemini ãå°å
¥ããæ¥åå¹çåã顧客æºè¶³åºŠãåäžããŠããŸããå
·äœçãªå°å
¥äºäŸã¯ã以äžã®èšäºãåèã«ããŠãã ããã g-gen.co.jp g-gen.co.jp G-gen ç€Ÿã®æäŸãããGenerative AI æŽ»çšæ¯æŽãœãªã¥ãŒã·ã§ã³ãã§ã¯ãGoogle Cloud ã®ã¹ãã·ã£ãªã¹ããšã³ãžãã¢ãã貎瀟㮠Gemini 掻çšãæ¯æŽããŸããéçºãå
補åããå Žåãšã倿³šããå Žåã®äž¡æ¹ã§æŽ»çšããã ããŸãã g-gen.co.jp ç±³å· äœæºäºº (èšäºäžèЧ) ãã©ãããã©ãŒã ãšã³ãžãã¢ãªã³ã°æ¬éš å¶æ¥éš å¶æ¥2課 å
Œ ç²ããäºæ¥æ 2022幎7æã«G-genã«ãžã§ã€ã³ã ã¢ãããŒã¯ãã¯ã©ãŠãã§ãé¢è¥¿ãããã£ãšåããããã 課é¡è§£æ±ºã«åããææ¡ïŒã客æ§ãšã®äŒŽèµ°ãããžã§ã¯ãã«ã¢ãããŒã·ã§ã³ãæããæ¥ã
ãçŸåš Google Cloud å
šè³æ Œã³ã³ããªãŒãç®æããŠå¥®éäžïŒããš1ã€ïŒãã§ãããæ¬è·ã¯ å
ã®æŠå£«@FFXIV ã§ãã
G-gen ã®äžæµŠã§ããåœèšäºã§ã¯2024幎12æ17æ¥ã«ããŒã¿çãšããŠå
¬éããã Microsoft Teams ãã Google Chat ãžã®ç§»è¡ããŒã«ã®æ€èšŒçµæãã玹ä»ããŸãã æŠèŠ Microsoft Teams ããã®ããŒã¿ç§»è¡ ãšã¯ åææ¡ä»¶ å¶çŽ æ€èšŒæŠèŠ æ€èšŒç°å¢ æ€èšŒã®æµã èšå®æé [Microsoft 365] Teams ã®ã°ã«ãŒã ID ãç¢ºèª [Google Workspace] ç§»è¡çšã® csv ãã¡ã€ã«ã®æºå [Google Workspace] ããŒã¿ç§»è¡ã®å®æœ [Microsoft 365] ç§»è¡åŸã«ãTeams ã§æ°èŠã®ã¡ãã»ãŒãžãéä¿¡ [Google Workspace] å·®åç§»è¡ã®å®æœ [Google Workspace] ç§»è¡ãå®äºããã¹ããŒã¹ãå±é æŠèŠ Microsoft Teams ããã®ããŒã¿ç§»è¡ ãšã¯ Teams ããã®ã¡ãã»ãŒãžã®ç§»è¡ æ©èœã¯ãGoogle Workspace ã®ç®¡çæ©èœã§ãããMicrosoft TeamsïŒä»¥äžãTeamsïŒã®ãã£ã³ãã«ã®ã¡ãã»ãŒãžã Google ChatïŒä»¥äžãChatïŒã®ã¹ããŒã¹ã«ç§»è¡ããããšãã§ããŸãã åè : Teams ããã®ã¡ãã»ãŒãžã®ç§»è¡ã«ã€ããŠïŒããŒã¿çïŒ åææ¡ä»¶ 2024幎12æçŸåšãæ¬æ©èœã¯ããŒã¿çã§ãããæ£åŒãªãªãŒã¹ãããŠããŸãããããŒã¿çæ©èœã® æ¬çªç°å¢ã§ã®å©çšã¯éæšå¥š ã®ããããã¹ããæ€èšŒã§äœ¿çšããŠãã ããã詳现ã¯ä»¥äžã®å©çšèŠçŽãã確èªãã ããã åè : Google Workspace ãµãŒãã¹åºæã®å©çšèŠçŽ åœæ©èœã§ç§»è¡ã宿œããã«ã¯ãGoogle Workspace åŽã§ã¯ç¹æš©ç®¡çè
ããŒã«ããTeams åŽã§ã¯ã°ããŒãã«ç®¡çè
ããŒã«ãå¿
èŠã§ãã å¶çŽ åœæ©èœã«ã¯ä»¥äžã®ãããªå¶éããããŸãã ããŒã å
ã®ã¡ãã»ãŒãžã®ã¿ç§»è¡å¯èœã§ãããŠãŒã¶ãŒéã®åå¥ãã£ããããã€ã¬ã¯ãã¡ãã»ãŒãžã¯ç§»è¡ã§ããŸããã Teams ã®ãããŒã ã㯠Chat ã®ãã¹ããŒã¹ãã«å€æãããŸãããã ããå
ã®æš©éïŒæšæºããã©ã€ããŒãïŒã¯ãã¹ãŠå¶éä»ãã¹ããŒã¹ã«å€æãããŸããå¶éä»ãã¹ããŒã¹ã¯åŸãã倿Žå¯èœã§ãã ç§»è¡ã«é¢ããå¶éã®è©³çްã¯ã以äžå
¬åŒããã¥ã¡ã³ããã確èªãã ããã åè : ãã£ããã®ç§»è¡ã§ç§»è¡ãããããŒã¿ïŒããŒã¿çïŒ æ€èšŒæŠèŠ æ€èšŒç°å¢ æ€èšŒç°å¢ã¯ä»¥äžã®ãšããã§ããå®éã®ç§»è¡ã±ãŒã¹ãæ³å®ããTeams ãš Chat ã®ãã¡ã€ã³ããã³ãŠãŒã¶ãŒæ
å ±ãçµ±äžããç°å¢ã§æ€èšŒããŸããã ãã©ãããã©ãŒã ãã¡ã€ã³å ãŠãŒã¶ãŒå ã©ã€ã»ã³ã¹ Google Workspace miurak-test.com teamstest@miurak-test.com Google Workspace Business Standard Microsoft 365 miurak-test.com teamstest@miurak-test.com Microsoft 365 Business Basic Teams ã®ããŒã ã¯ä»¥äžã®ãšããã§ãã 芪ãã£ã¬ã¯ã㪠ããŒã å çš®é¡ ææè
æ¢å®ã®ãã£ã¬ã¯ã㪠äžè¬ æšæº teamstest@miurak-test.com æ¢å®ã®ãã£ã¬ã¯ã㪠teams-channel-private ãã©ã€ããŒã teamstest@miurak-test.com æ¢å®ã®ãã£ã¬ã¯ã㪠teams-channel-public æšæº teamstest@miurak-test.com ããŒã èšå® æ€èšŒã®æµã 以äžã®æé ã§ããŒã¿ã®ç§»è¡ã宿œããŸãã é
ç® äœæ¥ ãã©ãããã©ãŒã 1 Teams ã®ã°ã«ãŒã ID ãç¢ºèª Microsoft 365 2 ç§»è¡çšã® csv ãã¡ã€ã«ã®æºå Google Workspace 3 ããŒã¿ç§»è¡ã®å®æœ Google Workspace 4 ç§»è¡åŸã«ãTeams ã§æ°èŠã®ã¡ãã»ãŒãžãéä¿¡ Microsoft 365 5 å·®åç§»è¡ã®å®æœ Google Workspace 6 ç§»è¡ãå®äºããã¹ããŒã¹ãå±é Google Workspace èšå®æé [Microsoft 365] Teams ã®ã°ã«ãŒã ID ãç¢ºèª Microsoft Teams 管çã»ã³ã¿ãŒïŒ https://admin.teams.microsoft.com ïŒã«ãã°ã€ã³ããŸãã åè : Microsoft Teams 管çã»ã³ã¿ãŒã§ããŒã ã管çãã [Teams] > [ããŒã ã管ç] > [ãšã¯ã¹ããŒã] ãããããŒã æ
å ±ã csv 圢åŒã§ãšã¯ã¹ããŒãããŸãã ãšã¯ã¹ããŒããéžæ ãšã¯ã¹ããŒããå®è¡ csv ã確èªãã Groups Id ãæ§ããŠãã ããã ã°ã«ãŒãIDã®ç¢ºèª [Google Workspace] ç§»è¡çšã® csv ãã¡ã€ã«ã®æºå Google Workspace ã®ç®¡çã³ã³ãœãŒã«ïŒ https://admin.google.com ïŒã«ãã°ã€ã³ããŸãã åè : 管çã³ã³ãœãŒã«ã«ãã°ã€ã³ãã [ããŒã¿] > [ããŒã¿ã®ã€ã³ããŒããšãšã¯ã¹ããŒã] > [ããŒã¿ç§»è¡ïŒæ°èŠïŒ] ãžç§»åããã¹ããã 2 ã® [ãµã³ãã« csv ãããŠã³ããŒã] ãéžæããŸãã ç§»è¡çšã®ãµã³ãã« csv ã®ããŠã³ããŒã ããŠã³ããŒããã csv ãéãã Source MicrosoftTeamsID ã®ç®æã«ãåã®æé ã§ç¢ºèªãã Teams ã® Groups Id ãå
¥åããä¿åããŸãã ç§»è¡çšã® csv ãã¡ã€ã«ã®ç·šé [Google Workspace] ããŒã¿ç§»è¡ã®å®æœ ãã£ããã®ç§»è¡ã® [ã¹ããã 1] ã§ [Microsoft ã¢ã«ãŠã³ãã«æ¥ç¶] ãéžæããç§»è¡ããŒã«ã«æš©éãä»äžããŸãã Microsoftã¢ã«ãŠã³ãã«æ¥ç¶ Microsoftã¢ã«ãŠã³ããéžæ ã¢ã¯ã»ã¹èš±å¯å
容ã確èªããŠæ¿è«Ÿ æ¥ç¶ãç¢ºèª [ã¹ããã 2] ã® [ç§»è¡ãããã® csv ãã¢ããããŒã] ãéžæããåã®æé ã§äœæãã csv ãã¡ã€ã«ãéžæããŸãã äœæããcsvã®ã¢ããããŒã [ã¹ããã 3] ã¯ãTeams ãš Chat ã®ãŠãŒã¶ãŒåãç°ãªãå Žåã®ã¿å®æœããŸããä»åã¯åããããçç¥ããŸãã äŸ: Microsoft 365 ã®ãŠãŒã¶ãŒã miura-teams@miurak-test.com ã§ããã®ãŠãŒã¶ãŒã Google Workspace ã® miura-chat@miurak-test.com ã«é¢é£ä»ãããå Žåã«å®æœããŸãã ãŠãŒã¶ãŒIDã®é¢é£ä»ã åè : ã¹ããã 4: ID ããããäœæããŠã¢ããããŒãããïŒå¿
èŠãªå ŽåïŒ [ã¹ããã 4] ã§ä»¥äžãéžæã㊠[ä¿å] ããŠãã ããã ã¡ãã»ãŒãžã®ç§»è¡éå§æ¥ïŒTeams ã®ã¡ãã»ãŒãžã Chat ãžç§»è¡ããéå§æ¥ãéžæããŸãã ãããã³ã°ãããŠããªã IDïŒæå¹å ID ã®ç§»è¡å
ãã¡ã€ã³ãä¿æããïŒTeams ãš Chat ã®ãã¡ã€ã³ãåãå Žåã¯ãã¡ããéžæ ID ã«ã¿ãŒã²ãããã¡ã€ã³ã䜿çšããïŒTeams ãš Chat ã®ãã¡ã€ã³ãç°ãªãå Žåã¯ãã¡ããéžæ ç§»è¡èšå®ã®éžæ [ã¹ããã 5] ã® [ç§»è¡ãéå§] ãéžæããŸãã ç§»è¡ã®éå§ ç§»è¡ãå®äºããããšã確èªããŸãã詳现㯠[ç§»è¡ã¬ããŒã] ãŸã㯠[æŠèŠã¬ããŒã] ããšã¯ã¹ããŒãããããšã§ç¢ºèªã§ããŸãã â» ãã®æç¹ã§ã¯ããŠãŒã¶ãŒåŽã«ç§»è¡ããã¹ããŒã¹ã¯è¡šç€ºãããŸãããå·®åãå«ããç§»è¡äœæ¥ããã¹ãŠå®äºããæåŸã« [ã¹ããŒã¹ãããŒã«ã¢ãŠã] ããããšã§è¡šç€ºãããŸãã ç§»è¡å®äºç¢ºèª æŠèŠã¬ããŒã [Microsoft 365] ç§»è¡åŸã«ãTeams ã§æ°èŠã®ã¡ãã»ãŒãžãéä¿¡ ããŒã¿ã®ç§»è¡åŸã« Teams ã®ãã£ã³ãã«ã§æ°èŠã®ã¡ãã»ãŒãžãéä¿¡ããŸãã 差忀ç¥çšã®ã¡ãã»ãŒãž [Google Workspace] å·®åç§»è¡ã®å®æœ ãã£ããã®ç§»è¡ãã [ã¹ããã 5] ã® [å·®åç§»è¡ãå®è¡] ãéžæããŸãã å·®åç§»è¡ã宿œ åŠçãæåããããšã確èªããŸãã å·®åç§»è¡ã®æå æŠèŠã¬ããŒã [Google Workspace] ç§»è¡ãå®äºããã¹ããŒã¹ãå±é ãã¹ãŠã®ç§»è¡ãå®äºãããã[ã¹ããŒã¹ãããŒã«ã¢ãŠã] ãéžæããŸãã ã¹ããŒã¹ã®ããŒã«ã¢ãŠãã宿œ 泚æäºé
ã確èªããããã§ã[ã¹ããŒã¹ãããŒã«ã¢ãŠã] ãå®è¡ããŸãããã®æäœãè¡ããšãTeams åŽã§æ°ãã«è¿œå ãããã¡ãã»ãŒãžã倿Žå
容㯠Chat ã«ç§»è¡ãããŸãããäºåã«ååã«ç¢ºèªããããã§é²ããŠãã ããã æ³šæäºé
ã確èªããããã§ã[ã¹ããŒã¹ãããŒã«ã¢ãŠã] ãå®è¡ããŸããç¹ã«ä»¥äžã®ç¹ã«ã泚æãã ãã ãã®æäœã¯ãç§»è¡éå§ãã30æ¥ä»¥å
ã«å®äºããå¿
èŠããããŸãã 30æ¥ãéãããšãç§»è¡ãæåããããçŽãå¿
èŠããããŸãã ããŒã«ã¢ãŠãåŸãTeams åŽã§ã®ã¡ãã»ãŒãžã倿Žã¯åç§»è¡ã§ããŸããã æ³šæäºé
ã®ç¢ºèªãšããŒã«ã¢ãŠãå®è¡ åè : æé 3: ãŠãŒã¶ãŒãã¹ããŒã¹ãšã¡ãã»ãŒãžãå©çšã§ããããã«ãã ã¹ããŒã¹ã®å
¬éãå®äºããããšã確èªããŸãã å
¬éç¢ºèª Chat ã確èªããå·®åçšã®ã¡ãã»ãŒãžãå«ããŠç§»è¡ã§ããããšã確èªããŸãã Google Chat ã§ã®ããŒã¿ç§»è¡ç¢ºèª äžæµŠ 奿 (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2023幎10æããG-genã«ãžã§ã€ã³ãå
ãªã³ãã¬äžå¿ã®ãããã¯ãŒã¯ãšã³ãžãã¢ããããã¯ãŒã¯ã»ã»ãã¥ãªãã£ã»åæãã»èŸããã®ã奜ãã
G-gen ã®äžæµŠã§ããåœèšäºã§ã¯ãGoogle ãã©ã€ãã®ã€ã³ãã³ããªã¬ããŒãæ©èœã䜿ã£ãã»ãã¥ãªãã£ãªã¹ã¯ã®ç®¡çæ¹æ³ã玹ä»ããŸãã æŠèŠ ãã©ã€ãã€ã³ãã³ããªãšã¯ åææ¡ä»¶ èšå®ã®æŠèŠ èšå®æé [Google Cloud] BigQuery ããŒã¿ã»ããã®äœæ [Google Workspace] ã€ã³ãã³ããªã¬ããŒãã®æå¹å [Google Cloud] ã¬ããŒãããŒã¿ã®ç¢ºèª ããŒã¿æœåºäŸ ãµã³ãã«ã¯ãšãªâ ïŒã¢ã¯ã»ã¹æš©ãããªã³ã¯ãç¥ã£ãŠããã€ã³ã¿ãŒãããäžã®èª°ããã¢ã¯ã»ã¹ã§ããããã¡ã€ã«ã®æœåº ãµã³ãã«ã¯ãšãªâ¡ïŒç¹å®ã®ãŠãŒã¶ãŒããªãŒããŒãšãªã£ãŠãããã¡ã€ã«ãæœåºïŒãã€ãã©ã€ããå«ãïŒ ãµã³ãã«ã¯ãšãªâ¢ïŒçµç¹å€ã®ãã¡ã€ã³ãšå
±æãããŠãããã¡ã€ã«ãæœåº æŠèŠ ãã©ã€ãã€ã³ãã³ããªãšã¯ Google ãã©ã€ãã® ã€ã³ãã³ããªã¬ããŒãæ©èœ ã¯ãçµç¹å
ã® Google ãã©ã€ããå
±æãã©ã€ãã®å©çšç¶æ³ãææ¡ãã管çè
ãããŒã¿ãç£æ»ã»ç®¡çããããã®æ©èœã§ãã ãã®æ©èœã䜿ãã°ããã©ã€ãå
ã®ãã¡ã€ã«æ
å ±ãã¢ã¯ã»ã¹æš©ãæŽæ°æ¥æã鱿¬¡ã§ BigQuery ã«ãšã¯ã¹ããŒãã§ããŸããããã«ããã ããŒã¿æŒæŽ©ãªã¹ã¯ã®è»œæž ã å©çšç¶æ³ã®å¯èŠå ãå¯èœã§ãã åè : BigQuery ã®ãã©ã€ã ã€ã³ãã³ã㪠åè : ãã©ã€ãã®ã€ã³ãã³ããªã®ãšã¯ã¹ããŒã ã¹ããŒã åææ¡ä»¶ ãã©ã€ãã€ã³ãã³ããªã¬ããŒãæ©èœã¯ã以äžã® Google Workspace ãšãã£ã·ã§ã³ã§äœ¿çšã§ããŸãã Enterprise Standard Enterprise Plus Education Standard Education Plus Enterprise Essentials Plus Cloud Identity Premium 詳现ã¯ä»¥äžã®ããã¥ã¡ã³ãããåç
§ãã ããã åè : çµç¹ã®ãã©ã€ãã®ã€ã³ãã³ããªããšã¯ã¹ããŒããã èšå®ã®æŠèР以äžã®æé ã§ã€ã³ãã³ããªã¬ããŒããèšå®ããåäœã確èªããŸãã é çª äœæ¥å Žæ äœæ¥å å
容 1 Google Cloud BigQuery ããŒã¿ã»ããäœæ ã€ã³ãã³ããªã¬ããŒãããšã¯ã¹ããŒããã BigQuery ããŒã¿ã»ãããäœæããŸãã 2 Google Workspace ã€ã³ãã³ããªã¬ããŒãã®æå¹å ã€ã³ãã³ããªã¬ããŒããæå¹åããŸãã 3 Google Cloud ã¬ããŒãããŒã¿ã®ç¢ºèª BigQuery ã«ãšã¯ã¹ããŒããããããŒã¿ã確èªããŸãã èšå®æé [Google Cloud] BigQuery ããŒã¿ã»ããã®äœæ BigQuery ã®ããŒã¿ã»ãããäœæããŸããGoogle Workspace ã§ ããŒã¿ ãªãŒãžã§ã³ ããªã·ãŒ ã䜿çšããŠããå Žåã¯ãBigQuery ã®ãªãŒãžã§ã³ãããªã·ãŒã§æå®ãããªãŒãžã§ã³ãšåäžã«ããŸãã åè : ããŒã¿ã®å°ççãªå Žæãéžæãã # ç°å¢å€æ°ãèšå® PROJECT_ID = " my_project " # Google Cloud ãããžã§ã¯ã ID ãèšå® BQ_DATASET = " my_dataset " # BigQuery ã®ããŒã¿ã»ããåãèšå® BQ_LOCATION = " US " # BigQuery ã®ãªãŒãžã§ã³ãèšå® GWS_USER = " admin@example.com " # Google Workspace 管çè
ã¢ã«ãŠã³ããèšå® ã # BigQuery ããŒã¿ã»ãããäœæ bq --project_id = $PROJECT_ID \ mk --location = $BQ_LOCATION \ $BQ_DATASET ã # Google Workspace 管çè
ã¢ã«ãŠã³ãã« BigQuery ã®ç·šéæš©éãä»äž gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" user: $GWS_USER " \ --role =" roles/bigquery.dataEditor " ã # Google Workspace 管çè
ã¢ã«ãŠã³ãã« IAM ã®ç®¡çæš©éãä»äž gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" user: $GWS_USER " \ --role =" roles/resourcemanager.projectIamAdmin " [Google Workspace] ã€ã³ãã³ããªã¬ããŒãã®æå¹å Google Workspace ã®ç®¡çã³ã³ãœãŒã«ïŒ https://admin.google.com ïŒã«ãã°ã€ã³ããŸãã åè : 管çã³ã³ãœãŒã«ã«ãã°ã€ã³ãã [ã¬ããŒã] > [ããŒã¿çµ±å] ãžç§»åãã[ãã©ã€ãã®ã€ã³ãã³ããªã®ãšã¯ã¹ããŒã] ãéžæããŸãã ããŒã¿çµ±å 以äžãèšå®ãã[ä¿å] ãéžæããŸãã ãã©ã€ãã®ã€ã³ãã³ã㪠ã¬ããŒãã® Google BigQuery ãžã®ãšã¯ã¹ããŒããæå¹ã«ããïŒ æå¹å BigQuery ã®ãããžã§ã¯ã IDïŒ ãããžã§ã¯ã ID ãããžã§ã¯ãå
ã®æ¢åã®ããŒã¿ã»ããïŒ ããŒã¿ã»ããå ãšã¯ã¹ããŒãå
ã®èšå® ãšã¯ã¹ããŒãã®æå¹åããååã®ãšã¯ã¹ããŒããŸã§ã¯1ïœ2é±éããããŸãã2åç®ä»¥éã¯é±æ¬¡ã§ããŒã¿ãæŽæ°ãããŸãã åè : çµç¹ã®ãã©ã€ãã®ã€ã³ãã³ããªããšã¯ã¹ããŒããã ãšã¯ã¹ããŒããå®äºããªãå Žåã管çè
ã®ãã°ã€ãã³ãã確èªãããšã©ãŒã®æç¡ãã確èªãã ããã åè : ãã©ã€ãã®ã€ã³ãã³ããªã®ãšã¯ã¹ããŒãã«é¢é£ããã€ãã³ã [Google Cloud] ã¬ããŒãããŒã¿ã®ç¢ºèª Google Cloud ã³ã³ãœãŒã«ãããã°ã€ã³ããæ€çŽ¢ããŒã« BigQuery ãšå
¥åãã[BigQuery] ãéžæããŸãã BigQueryæ€çŽ¢ ããŒã¿ã»ããã¢ã€ã³ã³ãéžæãã [inventory] ãšããååã®ããŒãã«ã衚瀺ãããããšã確èªããŸãã ã€ã³ãã³ããªã®ç¢ºèª ããŒã¿æœåºäŸ ãµã³ãã«ã¯ãšãªâ ïŒã¢ã¯ã»ã¹æš©ãããªã³ã¯ãç¥ã£ãŠããã€ã³ã¿ãŒãããäžã®èª°ããã¢ã¯ã»ã¹ã§ããããã¡ã€ã«ã®æœåº æ³å®ãŠãŒã¹ã±ãŒã¹ 誀ã£ãŠå€éšå
±æãããŠãããã¡ã€ã«ã®æ€åº ããŒã¿æŒæŽ©ãªã¹ã¯ã®é«ããã¡ã€ã«ã®ç¹å® ç£æ»å¯Ÿå¿ã®ããã®å€éšå
±æãã¡ã€ã«ã®äžèŠ§äœæ SELECT id AS file_id, CONCAT ( ' https://drive.google.com/file/d/ ' , id, ' /view ' ) AS file_url, -- ãã¡ã€ã«ã®URLãçæ title AS file_name, -- ãã¡ã€ã«å owner. user .email AS owner_email, -- ãªãŒããŒã®ã¡ãŒã«ã¢ãã¬ã¹ perm.email AS shared_with_email, -- å
±æçžæã®ã¡ãŒã«ã¢ãã¬ã¹ïŒanyone ã®å Žå㯠nullïŒ perm.role AS shared_role, -- å
±æåœ¹å²ïŒanyone ã®å Žå㯠nullïŒ perm. type AS shared_type -- å
±æã¿ã€ã FROM `my_project.my_dataset.inventory`, -- ããŒã¿ã»ãããæå® UNNEST( access .permissions) AS perm -- permissions ãå±é WHERE perm. type = ' ANYONE ' -- å
±æã¿ã€ãã anyone ã®ãã¡ã€ã«ãæœåº ORDER BY id; -- file_id ã§ãœãŒã å®è¡çµæ ãµã³ãã«ã¯ãšãªâ¡ ïŒç¹å®ã®ãŠãŒã¶ãŒããªãŒããŒãšãªã£ãŠãããã¡ã€ã«ãæœåºïŒãã€ãã©ã€ããå«ãïŒ æ³å®ãŠãŒã¹ã±ãŒã¹ éè·è
ã®ããŒã¿æŽçãšåŒç¶ã ç¹å®ãŠãŒã¶ãŒã®ãã¡ã€ã«ã¢ã¯ã»ã¹ç¶æ³ã®ç¢ºèª éèŠããŒã¿ã®ãŠãŒã¶ãŒåäœã§ã®ç®¡ç SELECT child.id AS file_id, -- ãã¡ã€ã«ID child.title AS file_name, -- ãã¡ã€ã«å child.owner. user .email AS owner_email, -- ãªãŒããŒã®ã¡ãŒã«ã¢ãã¬ã¹ child.org_unit_path AS org_unit, -- æå±çµç¹åäœ parent.title AS parent_folder_name, -- 芪ãã©ã«ãå child.trashed AS is_trashed, -- ãŽãç®±ã«å
¥ã£ãŠããã (true:ãŽãç®±å
¥ã) child.mime_type, -- MIMEã¿ã€ã child.size_bytes / ( 1024 * 1024 ) AS file_size_mb, -- ãã¡ã€ã«ãµã€ãºïŒMBïŒ child.create_time_micros AS created_time, -- äœææ¥æïŒãã€ã¯ãç§ïŒ child.last_modified_time_micros AS last_modified_time -- æçµæŽæ°æ¥æïŒãã€ã¯ãç§ïŒ FROM `my_project.my_dataset.inventory` AS child -- ããŒã¿ã»ãããæå® LEFT JOIN `my_project.my_dataset.inventory` AS parent -- 芪ãã©ã«ãæ
å ±ãååŸããããã«èªå·±çµå ON child.parent = parent.id -- 芪ãã©ã«ãã®IDã§çµå WHERE child.owner. user .email = ' user@example.com ' -- æœåºããããŠãŒã¶ãŒã®ã¡ãŒã«ã¢ãã¬ã¹ãæå® ORDER BY child.last_modified_time_micros DESC ; -- æçµæŽæ°æ¥æã§éé ãœãŒã å®è¡çµæ ãµã³ãã«ã¯ãšãªâ¢ ïŒçµç¹å€ã®ãã¡ã€ã³ãšå
±æãããŠãããã¡ã€ã«ãæœåº æ³å®ãŠãŒã¹ã±ãŒã¹ çµç¹å€ãšã®ãã¡ã€ã«å
±æç¶æ³ã®ææ¡ ãã¡ã€ã«å
±æããªã·ãŒéåã®æ€åº å€éšãã¡ã€ã³ãšã®ããŒã¿å
±æç¯å²ã®ç£èŠ SELECT id AS file_id, -- ãã¡ã€ã«ID title AS file_name, -- ãã¡ã€ã«å owner. user .email AS owner_email, -- ãªãŒããŒã®ã¡ãŒã«ã¢ãã¬ã¹ perm.email AS shared_with_email, -- å
±æçžæã®ã¡ãŒã«ã¢ãã¬ã¹ perm.domain AS shared_with_domain, -- å
±æçžæã®ãã¡ã€ã³ perm.role AS shared_role -- å
±æåœ¹å² FROM `my_project.my_dataset.inventory`, -- ããŒã¿ã»ãããæå® UNNEST( access .permissions) AS perm -- permissions ãå±é WHERE perm.domain NOT IN ( ' example.com ' ) -- èªç€Ÿãã¡ã€ã³ä»¥å€ãšå
±æãããŠãããã¡ã€ã«ãæœåº ORDER BY shared_with_domain, file_name; -- ãã¡ã€ã³ããã¡ã€ã«åã§ãœãŒã å®è¡çµæ äžèšä»¥å€ã«ãå
¬åŒããã¥ã¡ã³ãã«ãµã³ãã«ã¯ãšãªããããŸãã®ã§ãã確èªãã ããã åè : ã¯ãšãªã®äŸ äžæµŠ 奿 (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2023幎10æããG-genã«ãžã§ã€ã³ãå
ãªã³ãã¬äžå¿ã®ãããã¯ãŒã¯ãšã³ãžãã¢ããããã¯ãŒã¯ã»ã»ãã¥ãªãã£ã»åæãã»èŸããã®ã奜ãã
2024幎12æ17æ¥ãããCloud Run ãåŒã³åºãããã®æš©éãæã€3ã€ã®äºåå®çŸ©ããŒã«ãæ°ãã«å©çšå¯èœãšãªããŸãããåœèšäºã§ã¯ããŒã«ã®è©³çްããåŸæ¥ããå©çšãããŠããäºåå®çŸ©ããŒã«ãšã®éããªã©ã解説ããŸãã ã¯ããã« æ°ããªäºåå®çŸ©ããŒã« Cloud Run ãµãŒãã¹èµ·åå
Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ ãªãŒããŒã©ã€ãã䜿çšãã Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ Cloud Run èµ·åå
ããŒã«ãšã®æ¯èŒ æš©éå
å®¹ã®æ¯èŒ Cloud Run jobs ã®ãã£ã³ã»ã«ããªãŒããŒã©ã€ãã«é¢ã㊠åèãªã³ã¯ ã¯ããã« 2024幎12æ17æ¥ãããCloud Run ãåŒã³åºãããã®æš©éãæã€ä»¥äžã®3ã€ã®äºåå®çŸ©ããŒã«ãæ°ãã«å©çšå¯èœãšãªããŸããã Cloud Run ãµãŒãã¹èµ·åå
ïŒ roles/run.servicesInvoker ïŒ Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ïŒ roles/run.jobsExecutor ïŒ ãªãŒããŒã©ã€ãã䜿çšãã Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ïŒ roles/run.jobsExecutorWithOverrides ïŒ åœèšäºã§ã¯ããŒã«ã®è©³çްããåŸæ¥ããå©çšãããŠããäºåå®çŸ©ããŒã«ãšã®éããªã©ã解説ããŸãã æ°ããªäºåå®çŸ©ããŒã« Cloud Run ãµãŒãã¹èµ·åå
Cloud Run ãµãŒãã¹èµ·åå
ïŒ roles/run.servicesInvoker ãè±å Cloud Run Service InvokerïŒããŒã«ã¯ä»¥äžã®æš©éã®ã¿ãä»äžãããäºåå®çŸ©ããŒã«ã§ãCloud Run services ã®ãµãŒãã¹åŒã³åºããããã³ Cloud Run functions ã®é¢æ°åŒã³åºããå¯èœã«ããŸãããã®ããŒã«ãæã£ãŠããŠã Cloud Run jobs ã®ãžã§ãå®è¡ã¯ã§ããŸããã run.routes.invoke Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ ïŒ roles/run.jobsExecutor ãè±å Cloud Run Jobs ExecutorïŒããŒã«ã¯ä»¥äžã®2ã€ã®æš©éãä»äžãããäºåå®çŸ©ããŒã«ã§ãCloud Run jobs ã®ãžã§ãå®è¡ãšãžã§ãã®ãã£ã³ã»ã«ãå¯èœã«ããŸãããã®ããŒã«ãæã£ãŠããŠããCloud Run services ã®ãµãŒãã¹åŒã³åºããããã³ Cloud Run functions ã®é¢æ°åŒã³åºãã¯ã§ããŸããã run.jobs.run run.executions.cancel ãªãŒããŒã©ã€ãã䜿çšãã Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ ãªãŒããŒã©ã€ãã䜿çšãã Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ ïŒ roles/run.jobsExecutorWithOverrides ãè±å Cloud Run Jobs Executor With OverridesïŒããŒã«ã¯ä»¥äžã®3ã€ã®æš©éãä»äžãããäºåå®çŸ©ããŒã«ã§ãCloud Run jobs ã®ãžã§ãå®è¡ããžã§ãã®ãã£ã³ã»ã«ã®ã»ãã ãžã§ãæ§æããªãŒããŒã©ã€ããããžã§ãã®å®è¡ ãå¯èœã§ãã run.jobs.run run.executions.cancel run.jobs.runWithOverrides ãžã§ãæ§æããªãŒããŒã©ã€ãããå®è¡ã®è©³çްã«ã€ããŠã¯ä»¥äžã®èšäºã§è§£èª¬ããŠããŸãã blog.g-gen.co.jp Cloud Run èµ·åå
ããŒã«ãšã®æ¯èŒ æš©éå
å®¹ã®æ¯èŒ åŸæ¥ãCloud Run ã®ãµãŒãã¹ã»é¢æ°ã»ãžã§ãã®å®è¡ã«ã€ããŠã¯ã Cloud Run èµ·åå
ïŒ roles/run.invoker ïŒããŒã«ã®äœ¿çšãæšå¥šãããŠããŸããããã®äºåå®çŸ©ããŒã«ã«ã¯ã以äžã®2ã€ã®æš©éãä»äžãããŠããŸãããããã®æš©éã«ããããµãŒãã¹ã»é¢æ°ã»ãžã§ãã®ããããå®è¡ããããšãã§ããŸãã run.routes.invoke run.jobs.run æ°ããäºåå®çŸ©ããŒã«ãç¹ã«ãCloud Run ãµãŒãã¹èµ·åå
ããšãCloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ãã®2ã€ã¯ãåŸæ¥ãããã Cloud Run èµ·åå
ããŒã«ã®åœ¹å²ãåå²ãããããªåœ¢ã«ãªã£ãŠããŸããããã«ãããããµãŒãã¹ã»é¢æ°ã®åŒã³åºãã®ã¿ãã§ããããªã³ã·ãã«ããšããžã§ãã®å®è¡ã®ã¿ãã§ããããªã³ã·ãã«ããšãã£ã æå°æš©éã®åå ãæèããæš©é管çãã§ããããã«ãªããŸãã Cloud Run jobs ã®ãã£ã³ã»ã«ããªãŒããŒã©ã€ãã«é¢ããŠ åŸæ¥ã® Cloud Run èµ·åå
ããŒã«ã«ã¯ãCloud Run jobs ã®ãžã§ãå®è¡ããã£ã³ã»ã«ããããã®æš©éïŒrun.executions.cancelïŒãããžã§ãæ§æããªãŒããŒã©ã€ãããããã®æš©éïŒrun.jobs.runWithOverridesïŒããããŸããããã®ããããžã§ãã®ãã£ã³ã»ã«ããªãŒããŒã©ã€ããè¡ãããå Žå㯠Cloud Run éçºè
ïŒroles/run.developerïŒããŒã«ãå¿
èŠã§ããã ããããCloud Run éçºè
ããŒã«ã¯ Cloud Run ã®äœæãæŽæ°ãåé€ã®æš©éãæã£ãŠãããããããªã³ã·ãã«ã«ãžã§ãã®å®è¡ã«é¢ããããšã ããããããå Žåãéå°ãªæš©éãäžããŠããŸãããšã«ãªããŸãã æ°ãã«è¿œå ããããCloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ãããã³ããªãŒããŒã©ã€ãã䜿çšãã Cloud Run ãžã§ã ãšã°ãŒãã¥ãŒã¿ãããŒã«ã§ã¯ããžã§ãã®å®è¡æã«å¿
èŠãšãªãæš©é ã®ã¿ ãä»äžãããŠããŸãã ãã®ãããããšãã°ã¯ãŒã¯ãããŒããç°å¢ã«ãã£ãŠæ§æããªãŒããŒã©ã€ããããžã§ããå®è¡ãããããªã±ãŒã¹ã§ãã¯ãŒã¯ãããŒã䜿çšãããµãŒãã¹ã¢ã«ãŠã³ããªã©ã®ããªã³ã·ãã«ã«å¯ŸããŠéå°ãªæš©éãæãããã«æžã¿ãŸãã åèãªã³ã¯ Cloud Run IAM rolesïŒå
¬åŒããã¥ã¡ã³ãïŒ äœã
æš é§¿å€ª (èšäºäžèЧ) G-genæå端ãåæµ·éåšäœã®ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšãšã³ãžã㢠2022幎6æã«G-genã«ãžã§ã€ã³ãGoogle Cloud Partner Top Engineer 2025 Fellowã«éžåºã奜ããªGoogle Cloudãããã¯ãã¯Cloud Runã è¶£å³ã¯ã³ãŒããŒãå°èª¬ïŒSFããã¹ããªïŒãã«ã©ãªã±ãªã©ã Follow @sasashun0805
G-gen ã®äžæµŠã§ããåœèšäºã§ã¯ Google WorkspaceïŒCloud IdentityïŒã䜿çšããŠãSlack ã«ã·ã³ã°ã«ãµã€ã³ãªã³ïŒä»¥äžãSSOïŒãèšå®ããæ¹æ³ã玹ä»ããŸãã åºç€ç¥è ã·ã³ã°ã«ãµã€ã³ãªã³ïŒSSOïŒãšã¯ SAML èªèšŒãšã¯ SAML èªèšŒã®æµã Google Workspace ã® SSO 察å¿ããã¢ã㪠Google Workspace ã IdP ãšããã¡ãªãã 察å¿ãšãã£ã·ã§ã³ æ€èšŒã®æŠèŠ æ€èšŒäœæ¥ [Google Workspace] ã«ã¹ã¿ã SAML ã¢ããªã®äœæ [Google Workspace] ã«ã¹ã¿ã SAML ã¢ããªã®ãŠãŒã¶ãŒèšå® [Slack] SAML èªèšŒèšå® [Slack] Slack ãžã®çŽæ¥ã¢ã¯ã»ã¹ç¢ºèª [Google Workspace] Google Workspace ã¢ããªçµç±ã®ç¢ºèª [Google Workspace] ã³ã³ããã¹ãã¢ãŠã§ã¢ã¢ã¯ã»ã¹ã®èšå®æé ç¢ºèª åºç€ç¥è ã·ã³ã°ã«ãµã€ã³ãªã³ïŒSSOïŒãšã¯ ã·ã³ã°ã«ãµã€ã³ãªã³ ïŒSSOïŒãšã¯ãäžåºŠã®èªèšŒã§è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãå©çšã§ããããã«ããããã®ä»çµã¿ã§ããå©çšè
ãè€æ°ã®ãµãŒãã¹ãå©çšãããšããéåžžã¯ãµãŒãã¹ããšã« ID ãšãã¹ã¯ãŒããå
¥åããŸããããã1åºŠã§æžãããã«ããä»çµã¿ã SSO ã§ãã SSO ãå®è£
ããããšã§ã以äžã®å¹æãåŸãããŸãã å©äŸ¿æ§åäž ãŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ããšã«ãã¹ã¯ãŒããå
¥åããå¿
èŠããªããªããŸãã ã»ãã¥ãªãã£åŒ·å ãã¹ã¯ãŒãã®ç®¡çãç°¡çŽ åãããã»ãã¥ãªãã£ãªã¹ã¯ã軜æžã§ããŸãã SAML èªèšŒãšã¯ SSO ãå®çŸãããããã³ã«ã®äžã€ã« SAML ïŒSecurity Assertion Markup LanguageïŒããããŸããSAML ã¯ãèªèšŒæ
å ±ãå®å
šã«ããåãããããã®æšæºèŠæ Œã§ããçŸåšã§ã¯ SAML 2.0 ãæšæºãšãããŠããŸãã SAML ã«ããèªèšŒæ
å ±ã®ãããšããçè§£ããããã«ã¯ã以äžã®2ã€ã®åœ¹å²ãçè§£ããå¿
èŠããããŸãã IdP ïŒIdentity ProviderïŒ ã¢ã€ãã³ãã£ãã£ïŒã¢ã«ãŠã³ãïŒãä¿åãããã管çãã圹å²ãSSO ã§ã¯èªèšŒãæ
ããåœèšäºã§ã¯ Google Workspace ã該åœã SP ïŒService ProviderïŒ èªèšŒæžã¿ã®ãŠãŒã¶ãŒãå®éã«å©çšãããµãŒãã¹ãä»åã®äŸã§ã¯ Slack ã該åœã SAML èªèšŒã®æµã Slack ãäŸã«åããšããŠãŒã¶ãŒããèŠãèªèšŒã®æµãã¯ä»¥äžã®ããã«ãªããŸãã ãŠãŒã¶ãŒã SlackïŒSPïŒ ã«ã¢ã¯ã»ã¹ Google WorkspaceïŒIdPïŒã«ãªãã€ã¬ã¯ããããèªèšŒãè¡ããã Slack ã«ãªãã€ã¬ã¯ãããããã°ã€ã³ãå®äº Google Workspace ã® SSO 察å¿ããã¢ã㪠Google Workspace ã IdP ãšããŠå©çšããã°ãå€ãã®ã¯ã©ãŠããµãŒãã¹ã§ SAML èªèšŒã䜿çšããã·ã³ã°ã«ãµã€ã³ãªã³ãå®çŸã§ããŸãã äŸãã°ã以äžã®ãããªãµãŒãã¹ããçµ±åå¯Ÿå¿ SAML ã¢ããªããšããŠãã€ãã£ãã«å¯Ÿå¿ããŠããŸãã Amazon Web Services Notion ServiceNow Tableau Zendesk ãŸããã€ãã£ãã«å¯Ÿå¿ããŠããªããµãŒãã¹ã§ããSAML 2.0 èŠæ Œã«æºæ ããŠããã°ããã«ã¹ã¿ã SAML ã¢ããªããšã㊠SSO èšå®ãå¯èœã§ãã åè : çµ±åå¯Ÿå¿ SAML ã¢ããªã®äžèЧ åè : ã«ã¹ã¿ã SAML ã¢ããªãèšå®ãã Google Workspace ã IdP ãšããã¡ãªãã Google Workspace ã IdP ãšããŠå©çšããããšã§ãSSO ã®å¹æãããã«é«ãã以äžã®å©ç¹ããããŸãã Google ã¢ã«ãŠã³ãã®çµ±äžç®¡ç Google ã¢ã«ãŠã³ããèªèšŒåºç€ãšããŠäœ¿çšãããããè€æ°ã®ã¢ã«ãŠã³ãããã¹ã¯ãŒãã管çããå¿
èŠããªããªãããŠãŒã¶ãŒã®å©äŸ¿æ§ãåäžã ã»ãã¥ãªãã£åŒ·å å€èŠçŽ èªèšŒïŒGoogle Authenticator ãã»ãã¥ãªãã£ããŒã®å©çšïŒãã³ã³ããã¹ãã¢ãŠã§ã¢ã¢ã¯ã»ã¹ïŒIP ã¢ãã¬ã¹ãããã€ã¹ã«ããã¢ã¯ã»ã¹å¶åŸ¡ïŒã掻çšããäŒæ¥ã®ã»ãã¥ãªãã£èŠä»¶ããªã¹ã¯ç®¡çæ¹éã«å¿ããæè»ãªèªèšŒããªã·ãŒãèšå®å¯èœã å¹
åºããµãŒãã¹ãšã®é£æº Google Workspace ãéããŠãSlack ãªã©ã®å€éšãµãŒãã¹ã ãã§ãªããGoogle Workspace å
éšã®ãµãŒãã¹ïŒGoogle DriveãGoogle Meet ãªã©ïŒãžã®ã¢ã¯ã»ã¹ãäžå
管çã 2段éèªèšŒãã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã«ã€ããŠã¯ã以äžã®å
¬åŒããã¥ã¡ã³ããåèã«ããŠãã ããã åè : 2 段éèªèšŒããã»ã¹ã§ããžãã¹ãä¿è·ãã åè : ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã§ããžãã¹ãä¿è·ãã 察å¿ãšãã£ã·ã§ã³ Google Workspace ã§ã¯ãEssentials Starter 以å€ã®å
šãšãã£ã·ã§ã³ã§ãGoogle Workspace ã IdP ãšãã SSO ãæ§æã§ããŸãã Cloud Identity ã§ãåæ§ã«ãFree ãš Premium ã®äž¡ãšãã£ã·ã§ã³ã§ãCloud Identity ã IdP ãšãã SSO ãæ§æã§ããŸãã åè : Google Workspace ã®åãšãã£ã·ã§ã³ã®æ¯èŒ åè : Cloud Identity ã®æ©èœãšãšãã£ã·ã§ã³ã®æ¯èŒ æ€èšŒã®æŠèР以äžã®æé ã§ SSO ãèšå®ããåäœã確èªããŸãã é çª äœæ¥å Žæ äœæ¥å å
容 1 Google Workspace ã«ã¹ã¿ã SAML ã¢ããªã®äœæ Google Workspace åŽã§ SAML èªèšŒãèšå® 2 Google Workspace ã«ã¹ã¿ã SAML ã¢ããªã®ãŠãŒã¶ãŒèšå® ã¢ããªãå©çšãã察象ïŒçµç¹ãã°ã«ãŒãïŒãèšå® 3 Slack SAML èªèšŒèšå® Slack åŽã§ SAML èªèšŒãèšå® 4 Slack Slack ãžã®çŽæ¥ã¢ã¯ã»ã¹ç¢ºèª Google Workspace ã«ãã°ã€ã³ããŠããªãç¶æ
ã§ãSAML èªèšŒãæ£ããåäœããããç¢ºèª 5 Google Workspace Google Workspace ã¢ããªçµç±ã®ç¢ºèª Google Workspace ã®ã«ã¹ã¿ã SAML ã¢ããªãå©çšããŠãSSO ãæ£ããèšå®ãããŠããããç¢ºèª 6 Google Workspace ã³ã³ããã¹ãã¢ãŠã§ã¢ã¢ã¯ã»ã¹ã®èšå®æé ç¢ºèª ã¢ã¯ã»ã¹å¶éïŒIP ã¢ãã¬ã¹ãããã€ã¹å¶åŸ¡ïŒã®èšå®æé ãç¢ºèª åè : Google Workspace ã·ã³ã°ã«ãµã€ã³ãªã³ åè : Slack ã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ ãªãåæãšããŠãSlack ã§ã¯ Business+ ãŸã㯠Enterprise Grid ãã©ã³ã§ã®ã¿ãSAML ããŒã¹ã® SSO ãå©çšã§ããŸããFree ãã©ã³ã Pro ãã©ã³ã§ã¯å©çšã§ããŸããã®ã§ã泚æãã ããã åè : ããŒã ã«åã£ããã©ã³ãéžæããŸããã æ€èšŒäœæ¥ [Google Workspace] ã«ã¹ã¿ã SAML ã¢ããªã®äœæ Google Workspace ã®ç®¡çã³ã³ãœãŒã«ïŒ https://admin.google.com ïŒã«ãã°ã€ã³ããŸãã åè : 管çã³ã³ãœãŒã«ã«ãã°ã€ã³ãã [ã¢ããª] > [ãŠã§ãã¢ããªãšã¢ãã€ã«ã¢ããª] > [ã¢ããªã远å ] > [ã«ã¹ã¿ã SAML ã¢ããªã®è¿œå ] ãéžæããŸãã ã«ã¹ã¿ã SAML ã¢ããªã®è¿œå ã¢ããªåãå
¥åããå¿
èŠã«å¿ããŠã¢ã€ã³ã³ãæ·»ä»ããŸããå
¥åãçµãã£ãã [ç¶è¡] ãéžæããŸãã ã¢ããªåã®å
¥å 管çè
ã¯ãSlack åŽã«ç»é²ããããã«ä»¥äžã®3ç¹ãæ§ããŠããã[ç¶è¡] ãéžæããŸãã SSO ã® URL ãšã³ãã£ã㣠ID èšŒææžïŒå³åŽã®ããŠã³ããŒãã¢ã€ã³ã³ãéžæããŠããŠã³ããŒãããŸãïŒ IdP èšå®ã®ç¢ºèª 以äžãå
¥åãã[ç¶è¡] ãéžæããŸãã ACS ã® URL ïŒ https://${{Slack URL}}/sso/saml ãšã³ãã£ã㣠ID ïŒ https://slack.com 眲åä»ãå¿ç ïŒæå¹åïŒãã§ãã¯ãå
¥ããïŒ åå ID ïŒ [Basic Information] > [Primary email] Slack URL ã¯ã以äžã®ããã¥ã¡ã³ããåç
§ããŠç¢ºèªããŠãã ããã åè : Slack URL ãŸã㯠ID ã確èªãã SP èšå® [ãããã³ã°ã远å ] ãã以äžã®éãã«èšå®ãã[å®äº] ãéžæããŸãã [Basic Information] > [Primary email] ïŒ User.Email [Basic Information] > [First name] ïŒ first_name [Basic Information] > [Last Name] ïŒ last_name 屿§ã®ãããã³ã° [Google Workspace] ã«ã¹ã¿ã SAML ã¢ããªã®ãŠãŒã¶ãŒèšå® äœæããã¢ããªã® [ãŠãŒã¶ãŒ ã¢ã¯ã»ã¹] ãéžæããŸãã ãŠãŒã¶ãŒã¢ã¯ã»ã¹ãéžæ SAML èªèšŒãå©çšããå¯Ÿè±¡ïŒ çµç¹å
šäœ ãŸã㯠ç¹å®ã®çµç¹éšé ãŸã㯠Google ã°ã«ãŒã ïŒãéžæãã[ãªã³] > [ä¿åïŒãŸãã¯ãªãŒããŒã©ã€ãïŒ] ãéžæããŸãã SAML ã¢ããªã®æå¹å [Slack] SAML èªèšŒèšå® 管çè
ã¢ã«ãŠã³ãã«ãŠã[ã¯ãŒã¯ã¹ããŒã¹å] > [ããŒã«ãšèšå®] > [ã¯ãŒã¯ã¹ããŒã¹ã®èšå®] ãéžæããŸãã ã¯ãŒã¯ã¹ããŒã¹ã®èšå®ãéžæ [èªèšŒ] > [èªèšŒ] ãã SAML èªèšŒã® [èšå®ãã] ãéžæããŸãã SAML èªèšŒèšå®ãéžæ 以äžã®éãã«èšå®ãã詳现èšå®ã® [éã] ãéžæããŸãã SAML 2.0 ãšã³ããã€ã³ã (HTTP) ïŒ SSO ã® URL ID ãããã€ãçºè¡è
ïŒ ãšã³ãã£ã㣠ID å
¬éèšŒææž ïŒããŠã³ããŒãããèšŒææžãã¡ã€ã«ãããã¹ããšãã£ã¿ã§éãããã®å
容ãã³ããŒããŠè²Œãä»ããŸãã SAML èªèšŒèšå®1 以äžãéžæãã[èšå®ãä¿åãã] ãéžæããŸãã ãµãŒãã¹ãããã€ãçºè¡è
ïŒã«ã¹ã¿ã SAML ã¢ããªã§èšå®ãã ãšã³ãã£ã㣠ID 眲åä»ãã¬ã¹ãã³ã¹ ïŒæå¹åïŒãã§ãã¯ãå
¥ããïŒ ã¯ãŒã¯ã¹ããŒã¹ã®èªèšŒãå¿
èŠãªã¡ã³ã㌠ïŒSAML èªèšŒãå¿
èŠãªå¯Ÿè±¡ãéžæããŸãã SAML èªèšŒèšå®2 SAML èªèšŒèšå®3 SAML èªèšŒãæå¹åãããããšã確èªããŸãã æå¹åç¢ºèª [Slack] Slack ãžã®çŽæ¥ã¢ã¯ã»ã¹ç¢ºèª Google Workspace ã«ãã°ã€ã³ããŠããªãç¶æ
ã§ãSlack ã® URLïŒäŸ: https://${{Slack URL}} ïŒã«ã¢ã¯ã»ã¹ããŸãã Slack URL ãžã¢ã¯ã»ã¹ [SAML ã§ãµã€ã³ã€ã³] ãéžæããŸãã SAML ã§ãµã€ã³ã€ã³ãéžæ Google ã®ãã°ã€ã³ç»é¢ã衚瀺ããããããã¢ã«ãŠã³ãåã³ãã¹ã¯ãŒããå
¥åã㊠[次ãž] ãéžæããŸãã Google ãã°ã€ã³ èªèšŒãå®äºãããš Slack ã«ãªãã€ã¬ã¯ãããããã°ã€ã³ã§ããããšã確èªããŸãã ãã°ã€ã³ç¢ºèªïŒçŽæ¥ã¢ã¯ã»ã¹ïŒ [Google Workspace] Google Workspace ã¢ããªçµç±ã®ç¢ºèª Google Workspace ã«ãã°ã€ã³ããç¶æ
ã§ã[ã¢ããª] > [ã«ã¹ã¿ã SAML ã¢ããª] ãéžæããŸãã ã«ã¹ã¿ã SAML ã¢ããªãéžæ Slack ã«ãã°ã€ã³ã§ããããšã確èªããŸãã ãã°ã€ã³ç¢ºèªïŒã«ã¹ã¿ã SAML ã¢ããªïŒ Google Workspace ã®ç®¡çç»é¢ããããã°ã確èªããæ¹æ³ãæ€èšŒããŸãã [ã¬ããŒã] > [ç£æ»ãšèª¿æ»] > [SAML ãã°ã€ãã³ã] ãã SAML èªèšŒã«é¢ãããã°ã確èªã§ããŸãã ãã°ç¢ºèª [Google Workspace] ã³ã³ããã¹ãã¢ãŠã§ã¢ã¢ã¯ã»ã¹ã®èšå®æé ç¢ºèª [ã»ãã¥ãªãã£] > [ã¢ã¯ã»ã¹ãšããŒã¿ç®¡ç] > [ã³ã³ããã¹ãã¢ãŠã§ã¢ã¢ã¯ã»ã¹] > [ã¢ããªã«ã¢ã¯ã»ã¹ã¬ãã«ãå²ãåœãŠã] ãéžæããŸãã ã¢ããªã«ã¢ã¯ã»ã¹ã¬ãã«ãå²ãåœãŠã ã¢ã¯ã»ã¹ã¬ãã«ãé©çšãã察象ãšã㊠ã«ã¹ã¿ã SAML ã¢ã㪠ãéžæããŸãã[å²ãåœãŠ] ãéžæããããšã§ãã¢ã¯ã»ã¹ã¬ãã«ãèšå®ã§ããŸãã ã«ã¹ã¿ã SAML ã¢ããªãžã®å²ãåœãŠ ã³ã³ããã¹ãã¢ãŠã§ã¢ã¢ã¯ã»ã¹ã®è©³çްãªèšå®æé ãã¢ã¯ã»ã¹ã¬ãã«ã®äœææ¹æ³ã«ã€ããŠã¯ã以äžã®èšäºãåç
§ããŠãã ããã blog.g-gen.co.jp äžæµŠ 奿 (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2023幎10æããG-genã«ãžã§ã€ã³ãå
ãªã³ãã¬äžå¿ã®ãããã¯ãŒã¯ãšã³ãžãã¢ããããã¯ãŒã¯ã»ã»ãã¥ãªãã£ã»åæãã»èŸããã®ã奜ãã
G-gen ã®äžæµŠã§ããåœèšäºã§ã¯ãã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ïŒCAAïŒã䜿ã£ãŠ Google ãã©ã€ãçã® Google Workspace ã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããæ¹æ³ã玹ä»ããŸãã ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ãšã¯ åææ¡ä»¶ æ€èšŒå
容 åäœç¢ºèª ã¢ãã¿ãŒã¢ãŒãã®èšå® åäœç¢ºèªïŒã¢ãã¿ãŒã¢ãŒãïŒ ã¢ã¯ã»ã¹ã¬ãã«å€æŽïŒã¢ã¯ãã£ãã¢ãŒãïŒ åäœç¢ºèªïŒã¢ã¯ãã£ãã¢ãŒãïŒ è€åæ¡ä»¶ã®èšå® è€åæ¡ä»¶ã®åäœç¢ºèªïŒã¢ã¯ãã£ãã¢ãŒãïŒ ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ãšã¯ ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ïŒä»¥éãCAAïŒã¯ãIP ã¢ãã¬ã¹ãããã€ã¹ã®ç¶æ
ãªã©ã®ã³ã³ããã¹ãïŒèæ¯æ
å ±ïŒã«åºã¥ããŠã¢ã¯ã»ã¹ãå¶åŸ¡ãããGoogle Workspace ã®æ©èœã§ãã Google ãã©ã€ããGmailãGoogle ã«ã¬ã³ããŒãLooker Studio ãªã©ã«æ¡ä»¶ä»ãã§ã¢ã¯ã»ã¹å¶åŸ¡ãé©çšã§ããŸãã 䜿çšäŸ : IP ã¢ãã¬ã¹å¶é : 瀟å
ãããã¯ãŒã¯ã® IP ã¢ãã¬ã¹ããã®ã¿ Google ãã©ã€ããžã®ã¢ã¯ã»ã¹ãèš±å¯ãã瀟å€ïŒèªå®
ãå
Œ
± Wi-FiïŒããã®å©çšãçŠæ¢ããã ããã€ã¹å¶é : äŒç€Ÿæ¯çµŠã®ã¢ãã€ã«ããã€ã¹ïŒiPhoneãAndroidïŒããã®ã¿ Gmail ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããç§çšããã€ã¹ããã®å©çšãçŠæ¢ããã åè : ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã®æŠèŠ åææ¡ä»¶ CAA ã¯ãGoogle WorkspaceïŒCloud IdentityïŒã®ç¹å®ã®ãšãã£ã·ã§ã³ïŒFrontline StandardãEnterprise StandardãEnterprise PlusãCloud Identity Premium çïŒã§å©çšã§ããŸãã 詳现ã¯ä»¥äžã®ããã¥ã¡ã³ãããåç
§ãã ããã åè : ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã§ããžãã¹ãä¿è·ãã æ€èšŒå
容 以äžã®æé ã§ CAA ãèšå®ããåäœã確èªããŸãã ã¢ãã¿ãŒã¢ãŒãã®èšå® 瀟å
IP ã¢ãã¬ã¹ã®ã¿ã«ã¢ã¯ã»ã¹ãå¶éããã«ãŒã«ãäœæããã¢ãã¿ãŒã¢ãŒãïŒæ€ç¥ã®ã¿ã§ãããã¯ããªãïŒã§èšå®ããŸãã åäœç¢ºèªïŒã¢ãã¿ãŒã¢ãŒãïŒ ç€Ÿå
å€ã®ã¢ã¯ã»ã¹ç¶æ³ã確èªãããã°ã確èªããŸãã ã¢ã¯ã»ã¹ã¬ãã«å€æŽïŒã¢ã¯ãã£ãã¢ãŒãïŒ ã¢ã¯ãã£ãã¢ãŒãã«åãæ¿ããæ¡ä»¶å€ã®ã¢ã¯ã»ã¹ããããã¯ããããã«èšå®ããŸãã åäœç¢ºèªïŒã¢ã¯ãã£ãã¢ãŒãïŒ ç€Ÿå
IP ã¢ãã¬ã¹ããã¢ã¯ã»ã¹å¯èœã§ã瀟å€ããã¯ãããã¯ãããããšã確èªããŸãã è€åæ¡ä»¶ã®èšå® 瀟å
IP ã¢ãã¬ã¹ã«å ããå€èŠçŽ èªèšŒïŒMFAïŒãå©çšããŠããå Žåã®ã¿èš±å¯ããæ¡ä»¶ãèšå®ããŸãã è€åæ¡ä»¶ã®åäœç¢ºèªïŒã¢ã¯ãã£ãã¢ãŒãïŒ æ¡ä»¶ã«åèŽããªãã¢ã¯ã»ã¹ããããã¯ãããããšã確èªããŸãã åäœç¢ºèª ã¢ãã¿ãŒã¢ãŒãã®èšå® Google Workspace ã®ç®¡çã³ã³ãœãŒã«ïŒURL : https://admin.google.com ïŒã«ãã°ã€ã³ããŸãã åè : 管çã³ã³ãœãŒã«ã«ãã°ã€ã³ãã [ã»ãã¥ãªãã£] > [ã¢ã¯ã»ã¹ãšããŒã¿ç®¡ç] > [ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹] ã«ç§»åããŸãã ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ãžç§»å CAA ãç¡å¹ãªå Žåã¯ã[æå¹ã«ãã] ãéžæããŠæå¹åããŸãããã®åŸ [ã¢ã¯ã»ã¹ã¬ãã«] ãéžæããŸãã æå¹åãšã¢ã¯ã»ã¹ã¬ãã«ã®éžæ [ã¢ã¯ã»ã¹ã¬ãã«ãäœæ] ãéžæããŸãã ã¢ã¯ã»ã¹ã¬ãã«ãäœæãéžæ 以äžãèšå®ãã[äœæ] ãéžæããŸãã ã¢ã¯ã»ã¹ã¬ãã«å ïŒä»»æã®ååãå
¥åããŸãã æ¡ä»¶ ïŒ[åºæ¬] > [IP ãµãããã] ãéžæãã瀟å
IP ã¢ãã¬ã¹ãå
¥åããŸãã 1ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã®äœæ [ã¢ããªã«å²ãåœãŠ] ãéžæããŸãã ã¢ããªã«å²ãåœãŠãéžæ é©çšãã察象ïŒãŠãŒã¶ãŒãŸãã¯ã°ã«ãŒããŸãã¯çµç¹éšéïŒãšã¢ããªãéžæãã[å²ãåœãŠ] ãéžæããŸãã é©çšå¯Ÿè±¡ã®éžæ ã¢ã¯ã»ã¹ã¬ãã«ãéžæãããç£èŠãã«ãã§ãã¯ãå
¥ããŠãç¶è¡ããéžæããŸãã ã¢ãã¿ãŒã¢ãŒãïŒç£èŠïŒ ã§ã¯ãã¢ã¯ã»ã¹ã¬ãã«ã®åœ±é¿ç¯å²ããã°ã§ç¢ºèªã§ãããããã¯ã¯è¡ãããŸããã ãªãã¢ã¯ã»ã¹ã¬ãã«ã¯è€æ°éžæã§ããŸããã OR æ¡ä»¶ ã§åäœãããããããããã®ã¢ã¯ã»ã¹ã¬ãã«ãæºããå Žåã¯æ¥ç¶ãèš±å¯ãããŸãã åè : ã¢ããªã«ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã¬ãã«ãå²ãåœãŠã ã¢ã¯ã»ã¹ã¬ãã«ãšã¢ãŒãã®éžæ [ç¶è¡] ãéžæããŸãã ç¶è¡ãéžæ å
容ã確èªãã[å²ãåœãŠ] ãéžæããŸãã ã¢ãã¿ãŒã¢ãŒãã®é©çš åäœç¢ºèªïŒã¢ãã¿ãŒã¢ãŒãïŒ ç€Ÿå
ããã³ç€Ÿå€ãã Google ãã©ã€ããGoogle ã«ã¬ã³ããŒãGmail ã«ã¢ã¯ã»ã¹ããŸãããã®æ®µéã§ã¯ãã©ã¡ããããã¢ã¯ã»ã¹å¯èœã§ãã ã¢ã¯ã»ã¹ç¢ºèª [ã¬ããŒã] > [ç£æ»ãšèª¿æ»] > [ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã®ãã°ã€ãã³ã] ãéžæããŸãã ãã°ã€ãã³ãã®éžæ 以äžã®æ¡ä»¶ã§æ€çŽ¢ããã¢ãã¿ãŒã¢ãŒãã§ãããã¯ããããŠãŒã¶ãŒã®ãã°ã確èªããŸããæå³ããªããããã¯ãçºçããŠããªãã確èªããŠãã ããã ã€ãã³ã 次ã«äžèŽ ã¢ã¯ã»ã¹æåŠïŒã¢ãã¿ãŒã¢ãŒãïŒ ã¢ã¯ã»ã¹ã¬ãã«ã®é©ç𠿬¡ã®æåãå«ã ã¢ã¯ã»ã¹ã¬ãã«å ã¢ãã¿ãŒã¢ãŒãã®ãã°ç¢ºèª ã¢ã¯ã»ã¹ã¬ãã«å€æŽïŒã¢ã¯ãã£ãã¢ãŒãïŒ [ã»ãã¥ãªãã£] > [ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹] ãžç§»åãã [ã¢ããªã«ã¢ã¯ã»ã¹ã¬ãã«ãå²ãåœãŠã] ãéžæããŸãã ã¢ããªã«ã¢ã¯ã»ã¹ã¬ãã«ãå²ãåœãŠããéžæ ã¢ã¯ã»ã¹ã¬ãã«ãé©çšãã察象ãšã¢ããªãéžæãã[å²ãåœãŠ] ãéžæããŸãã å²ãåœãŠãéžæ ç£èŠ ã®ãã§ãã¯ãå€ãã ã¢ã¯ãã£ã ã®ãã§ãã¯ãå
¥ã㊠[ç¶è¡] ãéžæããŸãã ã¢ã¯ãã£ãã¢ãŒããžã®å€æŽ [ç¶è¡] ãéžæããå
容ã確èªãã[å²ãåœãŠ] ãéžæããŸãã ç¶è¡ãéžæ ã¢ã¯ãã£ãã¢ãŒãã®é©çš åäœç¢ºèªïŒã¢ã¯ãã£ãã¢ãŒãïŒ ç€Ÿå
IP ã¢ãã¬ã¹åã³ç€Ÿå€ IP ã¢ãã¬ã¹ããã¢ã¯ã»ã¹ããŸãã瀟å
IP ã¢ãã¬ã¹ã§ã¯æ£åžžã«ã¢ã¯ã»ã¹ã§ããç€Ÿå€ IP ã¢ãã¬ã¹ã§ã¯ã¢ã¯ã»ã¹ããããã¯ãããããšã確èªããŸãã ãããã¯ç¢ºèªïŒIP ãµããããïŒ è€åæ¡ä»¶ã®èšå® [ã»ãã¥ãªãã£] > [ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹] ã«ç§»åãã[ã¢ã¯ã»ã¹ã¬ãã«] > [ã¢ã¯ã»ã¹ã¬ãã«ãäœæ] ãéžæããŸãã ã¢ã¯ã»ã¹ã¬ãã«ãéžæ ã¢ã¯ã»ã¹ã¬ãã«ãäœæãéžæ 以äžãèšå®ã [äœæ] ãéžæããŸãããã®æ¡ä»¶ã«ããã MFA èªèšŒããããŠããªããšã¢ã¯ã»ã¹ãããã㯠ãããŸããæ¡ä»¶åŒã®è©³çްã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ã¢ã¯ã»ã¹ã¬ãã«å ïŒä»»æã®ååãå
¥åããŸãã æ¡ä»¶ ïŒ[詳现] > request.auth.claims.crd_str.mfa == true åè : ã«ã¹ã¿ã ã¢ã¯ã»ã¹ã¬ãã«ã®ä»æ§ åè : 詳现ã¢ãŒãã§ã®ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã®äŸ 2ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã®äœæ [çµäº] ãéžæããŸãã çµäºãéžæ [ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹] > [ã¢ã¯ã»ã¹ã¬ãã«] ãžç§»åãã1ã€ç®ãš2ã€ç®ã®ã«ãŒã«ã® CELå ã確èªããæ§ããŸãã CELåã®ç¢ºèª [ã¢ã¯ã»ã¹ã¬ãã«ãäœæ] ãéžæããŸãã [ã¢ã¯ã»ã¹ã¬ãã«ãäœæ] ãéžæ 以äžãèšå®ã [äœæ] ãéžæããŸãããã®æ¡ä»¶ã«ããã è€æ°ã®æ¡ä»¶ïŒIP ã¢ãã¬ã¹å¶éãšå€èŠçŽ èªèšŒïŒMFAïŒïŒãåæã«æºããå Žåã®ã¿ ã¢ã¯ã»ã¹ãèš±å¯ãããŸãã ã¢ã¯ã»ã¹ã¬ãã«å ïŒä»»æã®ååãå
¥åããŸãã æ¡ä»¶ ïŒ[詳现] > levels.${{1ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã® CEL å}} && levels.${{2ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã® CEL å}} 3ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã®äœæ [ã»ãã¥ãªãã£] > [ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹] ãžç§»åãã [ã¢ããªã«ã¢ã¯ã»ã¹ã¬ãã«ãå²ãåœãŠã] ãéžæããŸãã ã¢ããªã«ã¢ã¯ã»ã¹ã¬ãã«ãå²ãåœãŠããéžæ ã¢ã¯ã»ã¹ã¬ãã«ãé©çšãã察象ãšã¢ããªãéžæãã[å²ãåœãŠ] ãéžæããŸãã å²ãåœãŠãéžæ é©çšæžã¿ã®1ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ãåé€ãã3ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ãéžæãã ã¢ã¯ãã£ã ã®ãã§ãã¯ãå
¥ããŠã[ç¶è¡] ãéžæããŸãã æ¬çªç°å¢ãžé©çšããå Žåã¯ããŸã [ç£èŠ] ã®ã¿ã«ãã§ãã¯ãå
¥ããŠã¢ãã¿ãŒã¢ãŒãã§åœ±é¿ããªãããšã確èªããäžã§ãã¢ã¯ãã£ãã¢ãŒãã«åãæ¿ããããšãæšå¥šããŸãã 1ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã®åé€ 3ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã®éžæ [ç¶è¡] ãéžæããå
容ã確èªãã[å²ãåœãŠ] ãéžæããŸãã ç¶è¡ãéžæ 3ã€ç®ã®ã¢ã¯ã»ã¹ã¬ãã«ã®é©çš è€åæ¡ä»¶ã®åäœç¢ºèªïŒã¢ã¯ãã£ãã¢ãŒãïŒ ç€Ÿå
ã® IP ã¢ãã¬ã¹ã〠MFA ãç¡å¹åãããŠããã¢ã«ãŠã³ãããã¢ã¯ã»ã¹ã確èªãã以äžç»é¢ã衚瀺ãããããšã確èªããŸãã MFA ãç¡å¹ãªã¢ã«ãŠã³ã ãããã¯ç¢ºèªïŒè€åæ¡ä»¶ïŒ [ã¬ããŒã] > [ç£æ»ãšèª¿æ»] > [ã³ã³ããã¹ãã¢ãŠã§ã¢ ã¢ã¯ã»ã¹ã®ãã°ã€ãã³ã] ãéžæããŸãã ãã°ã€ãã³ãã®éžæ 以äžã®æ¡ä»¶ã§æ€çŽ¢ããã¢ã¯ãã£ãã¢ãŒãã§æåŠãããæ¥ç¶ãã°ã確èªããŸãã ã¢ã¯ã»ã¹ã¬ãã«ã®äžè¶³ ã確èªããããšã§ãã©ã®ã¢ã¯ã»ã¹ã¬ãã«ã§ãããã¯ãããããç¹å®ã§ããŸãã ã€ãã³ã 次ã«äžèŽ ã¢ã¯ã»ã¹ãæåŠãããŸãã ã¢ã¯ã»ã¹ã¬ãã«ã®é©ç𠿬¡ã®æåãå«ã ã¢ã¯ã»ã¹ã¬ãã«å ãã°ã®ç¢ºèª ã¢ã«ãŠã³ãã®MFAãæå¹ååŸããã°ã¢ãŠãããMFAãå©çšããŠå床ãã°ã€ã³ããŸãã ãã°ã€ã³æã« ãã®ããã€ã¹ã§ã¯æ¬¡åãã衚瀺ããªã ãéžæããªãã§ãã ãããéžæãããšã次å以éã®ãã°ã€ã³ã§ MFA èªèšŒãçç¥ãããCAA ã«ãã£ãŠã¢ã¯ã»ã¹ããããã¯ãããŸãã äžãäžéžæããŠããŸã£ãå Žåã¯ã以äžã®ããã¥ã¡ã³ããåç
§ããŠãã°ã€ã³ Cookie ããªã»ããããŠãã ããã åè : 管ç察象㮠Google ã¢ã«ãŠã³ããããã°ã¢ãŠããã MFA ãå©çšããŠãã°ã€ã³ Googleãã©ã€ãã«ã¢ã¯ã»ã¹ããæ£åžžã«è¡šç€ºãããããšã確èªããŸãã ã¢ã¯ã»ã¹ç¢ºèª äžæµŠ 奿 (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš 2023幎10æããG-genã«ãžã§ã€ã³ãå
ãªã³ãã¬äžå¿ã®ãããã¯ãŒã¯ãšã³ãžãã¢ããããã¯ãŒã¯ã»ã»ãã¥ãªãã£ã»åæãã»èŸããã®ã奜ãã
G-gen ã®æŠäºã§ããåœèšäºã§ã¯ Privileged Access Manager ã Terraform ã§ç®¡çããæ¹æ³ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« æŠèŠ Privileged Access Manager (PAM) PAM ã«å¿
èŠãªæš©é å©çšè³æ Œã®ç®¡ç å©çšè³æ Œã®å©çš (ç³è«ãæ¿èª) å
šäœæ§æ 飿ºæ¹åŒ ãœãŒã¹ã³ãŒã Direct Workload Identity ããã³ GitHub Actions ã¯ãŒã¯ãã㌠Terraform ãã£ã¬ã¯ããªæ§æ env é
äž (åŒã³åºãåŽ) modules é
äž (ã¢ãžã¥ãŒã«) ããã〠terraform plan terraform apply ãªãœãŒã¹ åäœç¢ºèª ç³è« æ¿èª æš©éä»äž æš©éã¯ã奪 åç³è« ã¯ããã« æŠèŠ åœèšäºã§ã¯ Google Cloud ã«ãããäžæç㪠IAM æš©éä»äžãå®çŸããä»çµã¿ã§ãã Privileged Access Manager (以éãPAM) ããTerraform ãš GitHub Actions ã«ãã CI/CD ã§ç®¡çããæ¹æ³ã玹ä»ããŸãã åœèšäºã§å®çŸããã®ã¯ãPAM ã®ä»çµã¿ã®ãããã€ã§ããAPI ã®æå¹åããµãŒãã¹ãšãŒãžã§ã³ããžã®æš©éä»äžãå©çšè³æ Œ (entitlements) ã®äœæãªã©ã Terraform ã§è¡ãããšã§ããããã€ä»¥é㯠PAM ã䜿ã£ãæ¿èªãããŒã«ãããçµç¹ã® IAM æš©éã管çããããšãã§ããããã«ãªããŸãã Privileged Access Manager (PAM) PAM ã®è©³çްã¯ä»¥äžã®èšäºã§è§£èª¬ããŠããŸãã blog.g-gen.co.jp PAM ã§ã®æš©é管çã®ä»çµã¿ã端çã«ãŸãšãããšã å©çšè³æ Œ (entitlements) ãšããèšå®æ
å ±ã«ããšã¥ããäžæçãªæš©éã®ä»äžãè¡ããã®ã§ãã å©çšè³æ ŒïŒentitlementsïŒã¯ PAM ã®ãªããžã§ã¯ãã§ãããæ¿èªãããŒãšèšãæããããšãã§ããŸããå©çšè³æ Œã«ã¯ãä»äžãã IAM ããŒã«ããæš©éãä»äžããæå€§æéããèª°ãæš©éããªã¯ãšã¹ãã§ããããã誰ããªã¯ãšã¹ããæ¿èªã§ããããã誰ãéç¥ãåãåããããªã©ãå®çŸ©ã§ããŸãã æ¿èªãããŒã¯ä»¥äžã®ããã«ãªããŸãã ç³è«è
㯠å¿
èŠãªæš©éãæéããã®çç± ãå©çšè³æ Œã«æèšããæ¿èªè
ã«æåºãã æ¿èªè
ã¯ããã®åŠ¥åœæ§ã確èªãç³è«ã æ¿èªãããã¯åŠèª ãã æ¿èªãããå Žåãç³è«è
ã«å¯Ÿãäžå®æéæš©éãä»äžããã æå®ã®æéãçµéãããšãç³è«è
ã«ä»äžãããŠããæš©éã¯èªåçã«ã¯ã奪ããã PAM ã«å¿
èŠãªæš©é PAM ã«å¿
èŠãªæš©é (IAM ããŒã«) ã«ã€ããŠã¯ä»¥äžã®éãã§ãã åèïŒ Privileged Access Manager ã®æš©éãšèšå® å©çšè³æ Œã®ç®¡ç å©çšè³æ Œã 管ç(äœæãæŽæ°ãåé€) ããããªã³ã·ãã«ã«ã¯ã Privileged Access Manager 管çè
( roles/privilegedaccessmanager.admin ) ãå¿
èŠã§ãã ãŸããå©çšè³æ Œã çµç¹ããªãŒã®äžã®ã©ãã§ å©çšãããã«ãã£ãŠã以äžã®ããããã®æš©éãå¿
èŠã§ãã çµç¹å
šäœïŒã»ãã¥ãªãã£ç®¡çè
ïŒ roles/iam.securityAdmin ïŒ ãã©ã«ãïŒãã©ã«ã IAM 管çè
ïŒ roles/resourcemanager.folderIamAdmin ïŒ ãããžã§ã¯ãïŒProject IAM 管çè
ïŒ roles/resourcemanager.projectIamAdmin ïŒ å©çšè³æ Œã®å©çš (ç³è«ãæ¿èª) å©çšè³æ ŒãçšããŠãæš©éä»äžãç³è«ããããããã¯ç³è«ãæ¿èªããããªã³ã·ãã«ã«ã¯ã Privileged Access Manager é²èЧè
( roles/privilegedaccessmanager.viewer ) ãå¿
èŠã§ãã å
šäœæ§æ åœèšäºã§ã¯å©çšè³æ Œã Terraform ãš GitHub Actions ã§ç®¡çããŸãã å©çšè³æ Œã¯ çµç¹/ãã©ã«ã/ãããžã§ã¯ãã¬ãã« ã§èšå®å¯èœã§ãããä»åã¯çµç¹ãšãããžã§ã¯ãã¬ãã«ã« PAM ããããã€ããŸãã 飿ºæ¹åŒ Google Cloud ãš GitHub Actions ã®é£æºã«ã¯ Direct Workload Identity ã䜿çšããŸãã ãµãŒãã¹ã¢ã«ãŠã³ãããŒããµãŒãã¹ã¢ã«ãŠã³ãã®æš©éãåçšããåŸæ¥æ¹åŒãšã¯ç°ãªããWorkload Identity ããŒã«ã«å¿
èŠãª IAM æš©éãçŽæ¥ä»äžããŸãã åè : Workload Identity Federation ãœãŒã¹ã³ãŒã Direct Workload Identity ããã³ GitHub Actions ã¯ãŒã¯ãã㌠以äžã®èšäºã§ Direct Workload Identity ãäœæãã bash ã¹ã¯ãªãããš GitHub Actions ã®ã¯ãŒã¯ãããŒãæ²èŒããŠããŸãã blog.g-gen.co.jp ãªããäžèšã®èšäºã«æ²èŒããã¹ã¯ãªããã§äœæããã Workload Identity ããŒã«ã«å¯ŸããŠã¯ãçµç¹ã¬ãã«ã§ä»¥äžã® IAM ããŒã«ãä»äžããŠãããå©çšè³æ Œã®ç®¡çã«å¿
èŠãªæš©éãå
å«ããŠããŸãã ãªãŒã㌠( roles/owner ) çµç¹ç®¡çè
( roles/resourcemanager.organizationAdmin ) Terraform PAM ã®ãœãŒã¹ã³ãŒãã¯ä»¥äžã®ãã£ã¬ã¯ããªæ§æã«ããšã¥ããŸãã åèïŒ google_privileged_access_manager_entitlement ãã£ã¬ã¯ããªæ§æ . âââ env â âââ Test_Environment â â âââ yutakei â â âââ backend.tf â â âââ locals.tf â â âââ main.tf â â âââ versions.tf â âââ organization â âââ backend.tf â âââ locals.tf â âââ main.tf â âââ versions.tf âââ modules âââ apis â âââ main.tf â âââ outputs.tf â âââ variables.tf âââ pam âââ main.tf âââ outputs.tf âââ variables.tf env é
äž (åŒã³åºãåŽ) # backend.tf terraform { backend "gcs" { bucket = "common-tfstate" prefix = "terraform/organization/state" } } # locals.tf locals { organization_id = "1234567890" # å©çšç³è«(entitlements)ã®èšå® entitlements = { pam_org1 = { entitlement_id = "pam-organization-acm-demo" max_request_duration = "3600s" eligible_users = [ "user:demo-user01@dev.g-gen.co.jp" ] resource_type = "cloudresourcemanager.googleapis.com/Organization" resource = "//cloudresourcemanager.googleapis.com/organizations/1234567890" roles = [ "roles/accesscontextmanager.gcpAccessReader" , "roles/accesscontextmanager.policyReader" ] require_approver_justification = true approvals_needed = 1 approvers = [ "user:demo-user01@g-gen.co.jp" ] } } } # main.tf # çµç¹ã¬ãã«ã§PAMãæå¹ã«ããã«ã¯ãPAMãµãŒãã¹ã¢ã«ãŠã³ãã«PAMãµãŒãã¹ãšãŒãžã§ã³ãããŒã«ãå¿
èŠ resource "google_organization_iam_member" "pam_service_agent" { org_id = local.organization_id role = "roles/privilegedaccessmanager.serviceAgent" member = "serviceAccount:service-org-$ { local.organization_id } @gcp-sa-pam.iam.gserviceaccount.com" } module "pam" { source = "../../modules/pam" entitlements = local.entitlements parent = "organizations/$ { local.organization_id } " location = "global" } # versions.tf terraform { required_version = "~> 1.9.7" required_providers { google = { source = "hashicorp/google" version = "~> 6.6.0" } } } provider "google" { user_project_override = true } # backend.tf terraform { backend "gcs" { bucket = "common-tfstate" prefix = "terraform/yutakei/state" } } # locals.tf locals { project_id = "yutakei" apis = [ "privilegedaccessmanager.googleapis.com" , ] # å©çšç³è«(entitlements)ã®èšå® entitlements = { pam1 = { entitlement_id = "pam-yutakei-bigquery-demo" max_request_duration = "3600s" eligible_users = [ "user:demo-user01@dev.g-gen.co.jp" ] resource_type = "cloudresourcemanager.googleapis.com/Project" resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" roles = [ "roles/bigquery.jobUser" , "roles/bigquery.dataViewer" ] require_approver_justification = true approvals_needed = 1 approvers = [ "user:demo-user01@g-gen.co.jp" ] } pam2 = { entitlement_id = "pam-yutakei-gcs-demo" max_request_duration = "3600s" eligible_users = [ "user:demo-user01@dev.g-gen.co.jp" ] resource_type = "cloudresourcemanager.googleapis.com/Project" resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" roles = [ "roles/storage.admin" ] require_approver_justification = true approvals_needed = 1 approvers = [ "user:demo-user01@g-gen.co.jp" ] } } } # main.tf module "apis" { source = "../../../modules/apis" project_id = local.project_id apis = local.apis } module "pam" { source = "../../../modules/pam" entitlements = local.entitlements parent = "projects/$ { local.project_id } " location = "global" } # versions.tf 岿 modules é
äž (ã¢ãžã¥ãŒã«) # main.tf resource "google_privileged_access_manager_entitlement" "pam" { for_each = var.entitlements entitlement_id = each.value.entitlement_id location = var.location max_request_duration = each.value.max_request_duration parent = var.parent requester_justification_config { unstructured {} } eligible_users { principals = each.value.eligible_users } privileged_access { gcp_iam_access { resource_type = each.value.resource_type resource = each.value.resource # è€æ°ã®role_bindingsãçæ dynamic "role_bindings" { for_each = each.value.roles content { role = role_bindings.value } } } } approval_workflow { manual_approvals { require_approver_justification = each.value.require_approver_justification steps { approvals_needed = each.value.approvals_needed approvers { principals = each.value.approvers } } } } } # outputs.tf output "entitlement_ids" { description = "List of entitlement IDs created" value = [ for entitlement in google_privileged_access_manager_entitlement.pam : entitlement.entitlement_id ] } variable "entitlements" { description = "A map of entitlement configurations" type = map ( object ( { entitlement_id = string max_request_duration = string eligible_users = list ( string ) resource_type = string resource = string roles = list ( string ) require_approver_justification = bool approvals_needed = number approvers = list ( string ) } )) } # variables.tf variable "parent" { description = "Parent resource (e.g., project, folder, or organization)" type = string } variable "location" { description = "Location for the entitlement" type = string default = "global" } # main.tf resource "google_project_service" "apis" { for_each = toset (var.apis) project = var.project_id service = each.value disable_on_destroy = false } # APIã®æå¹åã«ã¯æéãããããããåŸ
æ©æéãèšå® resource "null_resource" "delay" { provisioner "local-exec" { command = "sleep 180" } depends_on = [ google_project_service.apis ] } # outputs.tf output "enabled_apis" { description = "List of enabled APIs for the project" value = [ for service in google_project_service.apis : service.id ] } # variables.tf variable "apis" { description = "List of APIs to enable" type = list ( string ) } variable "project_id" { description = "The ID of the project to create resources in" type = string } ããã〠terraform plan GitHub Actions ( terraform plan ) ã®å®è¡çµæã§ãã # çµç¹åãã®ã¯ãŒã¯ãããŒ(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_organization_iam_member.pam_service_agent will be created + resource "google_organization_iam_member" "pam_service_agent" { + etag = (known after apply) + id = (known after apply) + member = "serviceAccount:service-org-1234567890@gcp-sa-pam.iam.gserviceaccount.com" + org_id = "1234567890" + role = "roles/privilegedaccessmanager.serviceAgent" } # module.pam.google_privileged_access_manager_entitlement.pam["pam_org1"] will be created + resource "google_privileged_access_manager_entitlement" "pam" { + create_time = (known after apply) + entitlement_id = "pam-organization-acm-demo" + etag = (known after apply) + id = (known after apply) + location = "global" + max_request_duration = "3600s" + name = (known after apply) + parent = "organizations/1234567890" + state = (known after apply) + update_time = (known after apply) + approval_workflow { + manual_approvals { + require_approver_justification = true + steps { + approvals_needed = 1 + approvers { + principals = [ + "user:demo-user01@g-gen.co.jp" , ] } } } } + eligible_users { + principals = [ + "user:demo-user01@dev.g-gen.co.jp" , ] } + privileged_access { + gcp_iam_access { + resource = "//cloudresourcemanager.googleapis.com/organizations/1234567890" + resource_type = "cloudresourcemanager.googleapis.com/Organization" + role_bindings { + role = "roles/accesscontextmanager.gcpAccessReader" } + role_bindings { + role = "roles/accesscontextmanager.policyReader" } } } + requester_justification_config { + unstructured {} } } Plan: 2 to add, 0 to change, 0 to destroy. # ãããžã§ã¯ãåãã®ã¯ãŒã¯ãããŒ(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: # module.apis.google_project_service.apis["privilegedaccessmanager.googleapis.com"] will be created + resource "google_project_service" "apis" { + disable_on_destroy = false + id = (known after apply) + project = "yutakei" + service = "privilegedaccessmanager.googleapis.com" } # module.apis.null_resource.delay will be created + resource "null_resource" "delay" { + id = (known after apply) } # module.pam.google_privileged_access_manager_entitlement.pam["pam1"] will be created + resource "google_privileged_access_manager_entitlement" "pam" { + create_time = (known after apply) + entitlement_id = "pam-yutakei-bigquery-demo" + etag = (known after apply) + id = (known after apply) + location = "global" + max_request_duration = "3600s" + name = (known after apply) + parent = "projects/yutakei" + state = (known after apply) + update_time = (known after apply) + approval_workflow { + manual_approvals { + require_approver_justification = true + steps { + approvals_needed = 1 + approvers { + principals = [ + "user:demo-user01@g-gen.co.jp" , ] } } } } + eligible_users { + principals = [ + "user:demo-user01@dev.g-gen.co.jp" , ] } + privileged_access { + gcp_iam_access { + resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" + resource_type = "cloudresourcemanager.googleapis.com/Project" + role_bindings { + role = "roles/bigquery.jobUser" } + role_bindings { + role = "roles/bigquery.dataViewer" } } } + requester_justification_config { + unstructured {} } } # module.pam.google_privileged_access_manager_entitlement.pam["pam2"] will be created + resource "google_privileged_access_manager_entitlement" "pam" { + create_time = (known after apply) + entitlement_id = "pam-yutakei-gcs-demo" + etag = (known after apply) + id = (known after apply) + location = "global" + max_request_duration = "3600s" + name = (known after apply) + parent = "projects/yutakei" + state = (known after apply) + update_time = (known after apply) + approval_workflow { + manual_approvals { + require_approver_justification = true + steps { + approvals_needed = 1 + approvers { + principals = [ + "user:demo-user01@g-gen.co.jp" , ] } } } } + eligible_users { + principals = [ + "user:demo-user01@dev.g-gen.co.jp" , ] } + privileged_access { + gcp_iam_access { + resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" + resource_type = "cloudresourcemanager.googleapis.com/Project" + role_bindings { + role = "roles/storage.admin" } } } + requester_justification_config { + unstructured {} } } Plan: 4 to add, 0 to change, 0 to destroy. terraform apply GitHub Actions ( terraform apply ) ã®å®è¡çµæã§ããæ»ãå€ã¯å
ã»ã©åæ§ã®ãã岿ããŸãã ãªãœãŒã¹ çµç¹ã§ã¯ PAM ãµãŒãã¹ã¢ã«ãŠã³ãã«å¯Ÿãã IAM Policy ãš å©çšè³æ Œ ããããã€ãããŸããã ãããžã§ã¯ãã§ã å©çšè³æ Œ ããããã€ãããŸããã åäœç¢ºèª ç³è« ç³è«è
ã®ã¢ã«ãŠã³ãã§ PAM ã®ç®¡çç»é¢ã«ã¢ã¯ã»ã¹ãã æš©éä»äžããªã¯ãšã¹ã ãã¯ãªãã¯ããŸãã 以äž3é
ç®ãå
¥åãã æš©éä»äžããªã¯ãšã¹ã ãã¯ãªãã¯ãããšãæ¿èªãããŒãæ¿èªè
ãžãšé²ã¿ãŸãã æš©éä»äžã®æé (å¿
é ãæå€§æéã1æéã®å Žåã30å/45å/1æéããéžæã§ãã) çç± (å¿
é ) éç¥ã®åä¿¡è
(ä»»æãçç¥ããŠãå©çšè³æ Œã§èšå®ããæ¿èªè
ã«ã¡ãŒã«éç¥ãè¡ããã) æ¿èªããããŸã§ã®éãåœè©²å©çšè³æ Œã®ã¹ããŒã¿ã¹ã¯ Approval Awaited ãšãªããŸãã ` æ¿èª æ¿èªè
ã®ã¢ã«ãŠã³ãã§ PAM ã®ç®¡çç»é¢ã«ã¢ã¯ã»ã¹ãããšãç³è«è
ããã®æ¿èªãããŒãåã£ãŠããããšãããããŸãã 以äžã®ã¡ãŒã«éç¥ãå±ããŸãã æ¿èª / æåŠ ãã¯ãªãã¯ãç³è«å
容ã確èªããŸãã ã³ã¡ã³ãæ¬ (å¿
é ) ã«æ¿èªããæšãå
¥åãã æ¿èª ãã¯ãªãã¯ããŸãã æš©éä»äž æ¿èªè
ã«ã¯ä»¥äžã®ã¡ãŒã«éç¥ãå±ããŸãã å©çšè³æ Œã®ã¹ããŒã¿ã¹ã Approval Awaited > Active ãšãªã£ãŠãããæš©éä»äžã®æ®ãæéã衚瀺ãããŠããŸãã IAM Policy ã®ç®¡çç»é¢ã確èªãããšãä»åå©çšè³æ Œã®äžã§å®çŸ©ãã2ã€ã®ããŒã«ã PAM ã«ãã£ãŠä»äžãããããšãããããŸãã æš©éã¯ã奪 ç³è«æã«åžæããä»äžæé (ä»åã¯30å) ãçµéãããšãå
ã»ã©ãŸã§ä»äžãããŠããããŒã«ã PAM ã«ãã£ãŠã¯ã奪ãããŠããããšãããããŸãã åç³è« å©çšè³æ Œã®ã¹ããŒã¿ã¹ã Available (ç³è«éå§åã®ç¶æ
) ã«æ»ã£ãŠãããå¿
èŠãªéã«ã¯å床åãå©çšè³æ Œã䜿ã£ãŠç³è«ãè¡ããŸãã æŠäº ç¥ä» (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšæå±ãG-genå¯äžã®å±±æ¢šçåšäœãšã³ãžã㢠Google Cloud Partner Top Engineer 2025 éžåºãIaC ã CI/CD åšãã®ãµãŒãã¹ããããã¯ããèå³åéã§ãã è¶£å³ã¯ããŒããã€ã¯ãããŒãã¬ãŒã¹ããµãã«ãŒèгæŠã§ãã Follow @ggenyutakei
G-gen ã®æŠäºã§ããåœèšäºã§ã¯ Google Cloud ãš GitHub Actions (Terraform) ã飿ºãã Direct Workload Identity ãäœæãã bash ã¹ã¯ãªããã玹ä»ããŸãã ã¯ããã« æŠèР以åã®èšäºãšã®éã å¶éäºé
åææ¡ä»¶ å
責äºé
ãœãŒã¹ã³ãŒã ã¹ã¯ãªããã®äœ¿ãæ¹ èªèšŒ 倿°èšå® å®è¡ ãªãœãŒã¹ã®ç¢ºèª Workload Identity ããŒã«ã»ãããã€ã㌠ãµãŒãã¹ã¢ã«ãŠã³ã Workload Identity ããŒã«ã® IAM Policy æ§æ ãœãŒã¹ã³ãŒã (Terraform) Terraform ãã£ã¬ã¯ããªæ§æ ã¯ãŒã¯ãã㌠(terraform.yaml) env/demo é
äž (åŒã³åºãåŽ) modules/apis é
äž (ã¢ãžã¥ãŒã«) ãã«ãªã¯ãšã¹ã (terraform plan) ããŒãž (terraform apply) ã¯ããã« æŠèŠ åœèšäºã§ç޹ä»ããã®ã¯ãGoogle Cloud ãš GitHub Actions (Terraform) ãšã®é£æºã«å¿
èŠãª Direct Workload Identity ãªãœãŒã¹ãäœæãã bash ã¹ã¯ãªããã§ãã 以åã®èšäºãšã®éã 以åå·çããèšäºã§ç޹ä»ããã®ã¯ã ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éãåçšããåœ¢åŒ ã® Workload Identity ãªãœãŒã¹ãäœæããã¹ã¯ãªããã§ãã blog.g-gen.co.jp ä»åã玹ä»ããã®ã¯ã Workload Identity ããŒã«ã«å¿
èŠãªæš©é (IAM ããŒã«) ãçŽæ¥ä»äžããåœ¢åŒ ã® Workload Identity ãªãœãŒã¹ãäœæããã¹ã¯ãªããã§ãã ãã®æ¹åŒã¯ããµãŒãã¹ã¢ã«ãŠã³ãã®æãåºãããµãŒãã¹ã¢ã«ãŠã³ããåçšããããã®æš©éä»äžãå¿
èŠãªããããåŸæ¥ãããã»ãã¥ã¢ãªé£æºãå¯èœã§ãGoogle Cloudããªãã³ã« GitHub ã®å
¬åŒããã¥ã¡ã³ãäžã§ãæšå¥šãããŠããŸãã åèïŒ ã¢ã¯ã»ã¹ç®¡ç åèïŒ (Preferred) Direct Workload Identity Federation å¶éäºé
æšå¥šããã圢åŒã§ã¯ãããã®ã®ãDirect Workload Identity ã«ã¯ 察å¿å¯èœãªãããã¯ããæ©èœã«å¶éããããŸãã 察å¿ããŠããªããããã¯ãããã®æ©èœã管çãããå ŽåãåŸæ¥åœ¢åŒ (ãµãŒãã¹ã¢ã«ãŠã³ãã®æš©éãåçšãã圢åŒ) ã® Workload Identity ããå©çšãã ããã åèïŒ ID 飿º: ãããã¯ããšå¶éäºé
åææ¡ä»¶ åœ bash ã¹ã¯ãªããã¯ã Debian GNU/Linux 12 (bookworm) äžã§éçºãããåäœç¢ºèªãããŠããŸãã ãŸãã以äžã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããããšãåæã§ããã«ãã³å
ã¯éçºæã®ããŒãžã§ã³ã§ãã gcloudïŒ Google Cloud SDK 486.0.0 ïŒ ã¹ã¯ãªããå®è¡æã¯ãå®è¡å
ã®ãããžã§ã¯ãã«å¯Ÿã㊠gcloud CLI ãèªèšŒããå¿
èŠããããŸãã åè : ãŠãŒã¶ãŒ ã¢ã«ãŠã³ãã䜿çšããŠèªå¯ãã åè : ãµãŒãã¹ ã¢ã«ãŠã³ãã䜿çšããŠæ¿èªãã blog.g-gen.co.jp å
責äºé
åœèšäºã§ç޹ä»ããããã°ã©ã ã®ãœãŒã¹ã³ãŒãã¯ããèªèº«ã®è²¬ä»»ã®ããšã䜿çšãåŒçšãæ¹å€ãåé
åžããŠæ§ããŸããã ãã ããåãœãŒã¹ã³ãŒããåå ã§çºçããäžå©çããã©ãã«ã«ã€ããŠã¯ãåœç€Ÿã¯äžåã®è²¬ä»»ãè² ããŸããã ãœãŒã¹ã³ãŒã åè¿°ã® å
責äºé
ããçè§£ã®ããããå©çšãã ããã init.sh #!/bin/bash # ãšã©ãŒãã³ããªã³ã°: ãšã©ãŒãçºçãããã¹ã¯ãªãããçµäº set -e # 倿°ã®èšå® PROJECT_ID = "" # ãããžã§ã¯ãID (ex: gha-demo-prj) PROJECT_NUMBER = "" # ãããžã§ã¯ãçªå· (ex: 1234567890) ORGANIZATION_ID = "" # ãããžã§ã¯ãã®çµç¹ID (ex: 0123456789) WORKLOAD_IDENTITY_POOL = "" # Workload IdentityããŒã«å (ex: gha-demo-pool) WORKLOAD_IDENTITY_PROVIDER = "" # Workload Identityãããã€ãå (ex: gha-demo-provider) GITHUB_REPO = "" # GitHubãªããžããªå (ex: gha-demo-org/gha-demo-repo) # ãã°åºå颿° log() { echo " [INFO] $1 " } log_error() { echo " [ERROR] $1 " >&2 } # 1. IAM Credential API ãæå¹å if ! gcloud services list --enabled --filter =" name:iamcredentials.googleapis.com " --format =" value(name) " | grep " iamcredentials.googleapis.com " > /dev/null 2 >& 1 ; then log " IAM Credential API ãæå¹ã«ããŠããŸã... " gcloud services enable iamcredentials.googleapis.com --project =" $PROJECT_ID " else log " IAM Credential API ã¯æ¢ã«æå¹åãããŠããŸã " fi # 2. Workload Identity ããŒã«ã®äœæ if ! gcloud iam workload-identity-pools describe $WORKLOAD_IDENTITY_POOL --location =" global " --project =" $PROJECT_ID " > /dev/null 2 >& 1 ; then log " Workload Identity ããŒã«ãäœæäž: $WORKLOAD_IDENTITY_POOL " gcloud iam workload-identity-pools create $WORKLOAD_IDENTITY_POOL \ --project =" $PROJECT_ID " \ --location =" global " \ --display-name =" $WORKLOAD_IDENTITY_POOL " else log " Workload Identity ããŒã«ã¯æ¢ã«ååšããŸã: $WORKLOAD_IDENTITY_POOL " fi # 3. Workload Identity ãããã€ãã®äœæ if ! gcloud iam workload-identity-pools providers describe $WORKLOAD_IDENTITY_PROVIDER --workload-identity-pool =" $WORKLOAD_IDENTITY_POOL " --location =" global " --project =" $PROJECT_ID " > /dev/null 2 >& 1 ; then log " Workload Identity ãããã€ããäœæäž: $WORKLOAD_IDENTITY_PROVIDER " gcloud iam workload-identity-pools providers create-oidc $WORKLOAD_IDENTITY_PROVIDER \ --project =" $PROJECT_ID " \ --location =" global " \ --workload-identity-pool =" $WORKLOAD_IDENTITY_POOL " \ --display-name =" $WORKLOAD_IDENTITY_PROVIDER " \ --issuer-uri =" https://token.actions.githubusercontent.com " \ --attribute-mapping =" google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository " \ --attribute-condition =" assertion.repository==' $GITHUB_REPO ' " else log " Workload Identity ãããã€ãã¯æ¢ã«ååšããŸã: $WORKLOAD_IDENTITY_PROVIDER " fi # 4. çµç¹ã¬ãã«ã§ã®ããŒã«ä»äž log " çµç¹ã¬ãã«ã§ã®ããŒã«ä»äžã®ç¢ºèª " for role in " roles/resourcemanager.organizationAdmin " " roles/owner " ; do if ! gcloud organizations get-iam-policy $ORGANIZATION_ID --flatten =" bindings[].members " --filter =" bindings.members:principalSet://iam.googleapis.com/projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $WORKLOAD_IDENTITY_POOL AND bindings.role: $role " --format =" value(bindings.role) " | grep " $role " > /dev/null 2 >& 1 ; then log " $role ãWorkload Identity ããŒã«ã«ä»äžäž: $WORKLOAD_IDENTITY_POOL " gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member =" principalSet://iam.googleapis.com/projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $WORKLOAD_IDENTITY_POOL /attribute.repository/ $GITHUB_REPO " \ --role =" $role " else log " $role ã¯æ¢ã«Workload Identity ããŒã«ã«ä»äžãããŠããŸã: $WORKLOAD_IDENTITY_POOL " fi done log " Direct Workload Identity èšå®ãå®äºããŸããã " ã¹ã¯ãªããã®äœ¿ãæ¹ èªèšŒ ãŸãã¯å®è¡å
ã®ãããžã§ã¯ãã«å¯Ÿã㊠gcloud CLI ã®èªèšŒãéããŸãã # å®è¡å
ãããžã§ã¯ãã®ç¢ºèª $ gcloud config list [ core ] account = test-user@demo.g-gen.co.jp disable_usage_reporting = True project = gha-demo-prj Your active configuration is: [ gha-demo-prj ] # gcloud CLI ã®èªèšŒ $ gcloud auth login ~~äžç¥~~ You are now logged in as [ test-user@demo.g-gen.co.jp ] . Your current project is [ gha-demo-prj ] . 倿°èšå® 7~12è¡ç® ã®å€æ°ã«ç°å¢æ
å ±ãå
¥åããŸãã â» åœã¹ã¯ãªããã§ã¯ããµãŒãã¹ã¢ã«ãŠã³ãã®å€æ°å®çŸ©ã¯ãããŸããã å®è¡ ã¹ã¯ãªããã«å®è¡æš©éãä»äžããŠå®è¡ããŸãã â» åœã¹ã¯ãªããã§ã¯ã以äžã®ãªãœãŒã¹ã¯äœæããŸããã ãµãŒãã¹ã¢ã«ãŠã³ã ãµãŒãã¹ã¢ã«ãŠã³ããåçšããããã® IAM Policy Workload Identity ããŒã«ãšãµãŒãã¹ã¢ã«ãŠã³ãã®çŽã¥ã # å®è¡æš©éä»äž $ chmod +x init.sh $ ls -l -rwxr-xr-x 1 test-user test-user 3784 Nov 12 14:27 init.sh # ã¹ã¯ãªããå®è¡ $ ./init.sh [ INFO ] IAM Credential API ã¯æ¢ã«æå¹åãããŠããŸã [ INFO ] Workload Identity ããŒã«ãäœæäž: gha-demo-pool Created workload identity pool [ gha-demo-pool ] . [ INFO ] Workload Identity ãããã€ããäœæäž: gha-demo-provider Created workload identity pool provider [ gha-demo-provider ] . [ INFO ] çµç¹ã¬ãã«ã§ã®ããŒã«ä»äžã®ç¢ºèª [ INFO ] roles/resourcemanager.organizationAdmin ãWorkload Identity ããŒã«ã«ä»äžäž: gha-demo-pool Updated IAM policy for organization [ 0123456789 ] . ~~äžç¥~~ [ INFO ] roles/owner ãWorkload Identity ããŒã«ã«ä»äžäž: gha-demo-pool Updated IAM policy for organization [ 0123456789 ] . ~~äžç¥~~ [ INFO ] Workload Identity èšå®ãå®äºããŸããã ãªãœãŒã¹ã®ç¢ºèª Workload Identity ããŒã«ã»ãããã€ã㌠以äžã®ããã«äœæãããŸãã Workload Identity ããŒã« (1/2) Workload Identity ããŒã« (2/2)ããµãŒãã¹ã¢ã«ãŠã³ãã䜿çšããŠããªã Workload Identity ãããã€ã㌠(1/2) Workload Identity ãããã€ã㌠(2/2) ãµãŒãã¹ã¢ã«ãŠã³ã åè¿°ã®éããDirect Workload Identity ã«ãµãŒãã¹ã¢ã«ãŠã³ãã¯äžèŠãªãããåœã¹ã¯ãªããã§ã¯äœæããŸããã Workload Identity ããŒã«ã® IAM Policy 以äžã®ããã«äœæãããŸãã â» IAM ããŒã«ã¯é©çšå
ã®ã»ãã¥ãªãã£ããªã·ãŒã«å¿ããŠèª¿æŽããŠãã ããã çµç¹ã¬ãã«ã® IAM Policy æ§æ åœã¹ã¯ãªããã§äœæããã Workload Identity ã䜿ããGoogle Cloud ãããžã§ã¯ãã«å¯Ÿãã terraform plan ã terraform apply ããGitHub Actions ã§èªååããŸãã ã¯ãŒã¯ãããŒã Terraform ãœãŒã¹ã³ãŒãã¯æ¬¡é
ã«èšèŒã®ãã®ã䜿çšããŸãã ãå©çšãããå Žåã¯ãåè¿°ã® å
責äºé
ããçè§£ã®ããããå©çšãã ããã ãœãŒã¹ã³ãŒã (Terraform) Terraform ãã£ã¬ã¯ããªæ§æ . âââ .github â âââ workflows â âââ terraform.yaml âââ env â âââ demo â âââ backend.tf â âââ locals.tf â âââ main.tf â âââ versions.tf âââ modules â âââ apis â âââ main.tf â âââ outputs.tf â âââ variables.tf âââ .gitignore âââ init.sh âââ README.md ã¯ãŒã¯ãã㌠(terraform.yaml) 以äžã®å€ããèªèº«ã®ç°å¢ã§äœæãããªãœãŒã¹ã«çœ®ãæããŠãã ããã 38è¡ç® ïŒ Workload Identity ãããã€ã㌠Direct Workload Identity ã§ã¯ã google-github-actions/auth@v2 ã§ãµãŒãã¹ã¢ã«ãŠã³ããå®çŸ©ããå¿
èŠã¯ãããŸããã name : terraform # main ãã©ã³ããžã® Pull request ãš Merge on : pull_request : branches : - main push : branches : - main # ãžã§ã (GitHUb runners ã§å®è¡) jobs : terraform-workflow : runs-on : ubuntu-latest permissions : id-token : write contents : read pull-requests : write strategy : matrix : # tf_working_dir ã« main.tf (åŒã³åºãåŽ) ã®ãã£ã¬ã¯ããªãæå® tf_working_dir : - ./env/demo steps : - uses : actions/checkout@v4 name : Checkout id : checkout # Workload Identity 飿º # https://cloud.google.com/iam/docs/using-workload-identity-federation#generate-automatic - id : 'auth' name : 'Authenticate to Google Cloud' uses : 'google-github-actions/auth@v2' with : workload_identity_provider : 'projects/1234567890/locations/global/workloadIdentityPools/gha-demo-pool/providers/gha-demo-provider' # https://github.com/marketplace/actions/setup-tfcmt - uses : shmokmt/actions-setup-tfcmt@v2 name : Setup tfcmt # https://github.com/marketplace/actions/setup-github-comment - uses : shmokmt/actions-setup-github-comment@v2 name : Setup github-comment # https://github.com/actions/setup-node # https://github.com/hashicorp/setup-terraform/issues/84 - uses : actions/setup-node@v4 with : node-version : '18' - uses : hashicorp/setup-terraform@v3 name : Setup terraform - name : Terraform fmt id : fmt run : | cd ${{ matrix.tf_working_dir }} terraform fmt -recursive continue-on-error : true - name : Terraform Init id : init run : | cd ${{ matrix.tf_working_dir }} terraform init -upgrade - name : Terraform Validate id : validate run : | cd ${{ matrix.tf_working_dir }} terraform validate # main ãã©ã³ããž pull request ããéã« terraform plan ãå®è¡ - name : Terraform Plan id : plan if : github.event_name == 'pull_request' run : | cd ${{ matrix.tf_working_dir }} export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} tfcmt -var target:${{ matrix.tf_working_dir }} plan -- terraform plan --parallelism=50 github-comment hide -condition 'Comment.Body contains "No changes."' continue-on-error : true # terraform status ã§å€±æããéã« workflow ã忢 - name : Terraform Plan Status id : status if : steps.plan.outcome == 'failure' run : exit 1 # main ãã©ã³ããž push ããéã« terraform apply ãå®è¡ - name : Terraform Apply id : apply if : github.ref == 'refs/heads/main' && github.event_name == 'push' run : | cd ${{ matrix.tf_working_dir }} export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} tfcmt -var target:${{ matrix.tf_working_dir }} apply -- terraform apply -auto-approve -input= false --parallelism=50 env/demo é
äž (åŒã³åºãåŽ) # backend.tf terraform { backend " gcs " { bucket = " gha-demo-prj-tfstate " prefix = " terraform/state " } } # locals.tf locals { project_id = " gha-demo-prj " apis = [ " artifactregistry.googleapis.com ", " cloudapis.googleapis.com ", " cloudasset.googleapis.com ", " cloudresourcemanager.googleapis.com ", " iam.googleapis.com ", " iamcredentials.googleapis.com ", " servicemanagement.googleapis.com ", " serviceusage.googleapis.com ", " sts.googleapis.com ", ] } # main.tf module " apis " { source = " ../../modules/apis " project_id = local.project_id apis = local.apis } # versions.tf terraform { required_version = " ~> 1.9.7 " required_providers { google = { source = " hashicorp/google " version = " ~> 6.6.0 " } } } provider " google " { user_project_override = true } modules/apis é
äž (ã¢ãžã¥ãŒã«) # main.tf resource " google_project_service " " apis " { for_each = toset ( var.apis ) project = var.project_id service = each.value disable_on_destroy = false } resource " null_resource " " delay " { provisioner " local-exec " { command = " sleep 180 " } depends_on = [ google_project_service.apis ] } # outputs.tf output " enabled_apis " { description = " List of enabled APIs for the project " value = [ for service in google_project_service.apis : service.id ] } # variables.tf variable " apis " { description = " List of APIs to enable " type = list ( string ) } variable " project_id " { description = " The ID of the project to create resources in " type = string } ãã«ãªã¯ãšã¹ã (terraform plan) Direct Workload Identity ã§ããmain ãã©ã³ããžã®ãã«ãªã¯ãšã¹ããããªã¬ãŒã« terraform plan ãå®è¡ãããŸããã â» ãã«ãªã¯ãšã¹ãã®å Žåã terraform apply ã¯ã¹ããããããŸãã ãã«ãªã¯ãšã¹ããããªã¬ãŒã« terraform plan ãèªåå®è¡ ããŒãž (terraform apply) Direct Workload Identity ã§ããmain ãã©ã³ããžã®ããŒãžãããªã¬ãŒã« terraform apply ãå®è¡ãããŸããã â» ããŒãžã®å Žåã terraform plan ã¯ã¹ããããããŸãã ããŒãžãããªã¬ãŒã« terraform apply ãèªåå®è¡ æŠäº ç¥ä» (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšæå±ãG-genå¯äžã®å±±æ¢šçåšäœãšã³ãžã㢠Google Cloud Partner Top Engineer 2025 éžåºãIaC ã CI/CD åšãã®ãµãŒãã¹ããããã¯ããèå³åéã§ãã è¶£å³ã¯ããŒããã€ã¯ãããŒãã¬ãŒã¹ããµãã«ãŒèгæŠã§ãã Follow @ggenyutakei
G-gen ã®å åã§ããåœèšäºã§ã¯ã Google ãã©ã€ã ãããŒã¿ãœãŒã¹ãšãã Vertex AI Search ã¢ããªã«å¯ŸããŠãPython ããæ€çŽ¢ãè¡ãéã«æ€çŽ¢çµæã0ä»¶ã«ãªã£ãŠããŸãå Žåã®å¯ŸåŠæ³ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« æ€çŽ¢ã倱æããã±ãŒã¹ Google Cloud APIs ã®ãã£ã³ãã«ã v1alpha 以å€ã®å Žå ãµãŒãã¹ã¢ã«ãŠã³ããçšããå Žå å¯ŸåŠæ³ Python Client ãµã³ãã«ã³ãŒã ãã€ã³ã ã©ã€ãã©ãªã®ãã£ã³ãã«æå® credentials Requests ã©ã€ãã©ãªãçšããŠã®çŽæ¥ã¢ã¯ã»ã¹ ãµã³ãã«ã³ãŒã ãã€ã³ã ã¯ããã« åœèšäºã§ã¯ãGoogle CloudïŒæ§ç§° GCPïŒãæäŸããæ€çŽ¢ãšã³ãžã³ãµãŒãã¹ã§ãã Vertex AI Search ã«ãããŠã Google ãã©ã€ã ãããŒã¿ãœãŒã¹ãšãã Vertex AI Search ã¢ããªã«å¯ŸããŠãPython ããæ€çŽ¢ãè¡ãæ¹æ³ã«ã€ããŠç޹ä»ããŸãã Vertex AI Search ã¢ããªã Python ããæ€çŽ¢ããã«ã¯ã次㮠2 ã€ã®æ¹æ³ããããŸãã Python Client ãçšããæ¹æ³ Requests ã©ã€ãã©ãªãçšããŠçŽæ¥ Google Cloud APIs ã«ã¢ã¯ã»ã¹ããæ¹æ³ ãããå®è£
æ¹æ³ã«ãã£ãŠã¯ãæ€çŽ¢çµæã0ä»¶ã«ãªã£ãŠããŸãå ŽåããããŸãã æ€çŽ¢ã倱æããã±ãŒã¹ Google Cloud APIs ã®ãã£ã³ãã«ã v1alpha 以å€ã®å Žå åœèšäºãå·çãã2024幎12æçŸåšãGoogle ãã©ã€ããããŒã¿ãœãŒã¹ãšãã Vertex AI Search ã¢ããªãžã®æ€çŽ¢ã¯ããPython Client ãçšããæ¹æ³ããçŽæ¥ Google Cloud APIs ã«ã¢ã¯ã»ã¹ããæ¹æ³ãã®äž¡æ¹ãšãã v1alpha ã§ã®ã¿æåŸ
éãåäœããŸããäžæ¹ã§ãv1 ãŸã㯠v1beta ãçšããå Žåã¯ãæ€çŽ¢çµæã0ä»¶ã«ãªããŸãã Google Cloud APIs ã«ãã㊠v1alpha ãšã¯ãAPI ã®ããŒãžã§ã³ã瀺ããã£ã³ãã«ã®1ã€ã§ããGoogle Cloud APIs ã¯åºæ¬çã«ãv1alphaãv1betaãv1 ãšããé ã§éçºãé²ã¿ãŸããv1alpha ã®æ©èœã¯äºåãªãåé€ãããå¯èœæ§ããããããæ¬çªç°å¢ã§ã®å©çšã¯éæšå¥šã§ãã åè : ããŒãžã§ãã³ã° ãµãŒãã¹ã¢ã«ãŠã³ããçšããå Žå Google Cloud APIs ã«ã¯éåžžãGoogle ã¢ã«ãŠã³ããŸãã¯ãµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã䜿çšããŠã¢ã¯ã»ã¹ããŸãã ãã ãã2024幎12æçŸåšã§ã¯ã ãµãŒãã¹ã¢ã«ãŠã³ããçšã㊠Google ãã©ã€ããããŒã¿ãœãŒã¹ãšãã Vertex AI Search ã¢ããªãžã®æ€çŽ¢ãè¡ã£ãå Žåã ãµãŒãåŽã®ãšã©ãŒ ïŒ500 Internal Server ErrorïŒãçºçããŸãã å¯ŸåŠæ³ åœäºè±¡ã«å¯Ÿãã2024幎12æçŸåšã®å¯ŸåŠæ³ã¯ã以äžã®ãšããã§ãã v1alpha ãã£ã³ãã«ã®ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã䜿çšãã ãµãŒãã¹ã¢ã«ãŠã³ãã§ã¯ãªããGoogle ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã䜿çšãã Python Client ãµã³ãã«ã³ãŒã Python Client ã䜿çšããå Žåã®ãµã³ãã«ã³ãŒãã¯æ¬¡ã®ãšããã§ãã from google.cloud.discoveryengine_v1alpha import SearchServiceClient, SearchRequest from google.protobuf.json_format import MessageToDict PROJECT_ID = "xxx" # Google Cloud ãããžã§ã¯ã ID VERTEX_AI_APP_ID = "xxx" # Vertex AI Search ã¢ããªã® ID client = SearchServiceClient(credentials=credentials) serving_config = f "projects/{PROJECT_ID}/locations/global/collections/default_collection/engines/{VERTEX_AI_APP_ID}/servingConfigs/default_serving_config" content_search_spec = SearchRequest.ContentSearchSpec( # ã¹ãããããåºåãããªã snippet_spec=SearchRequest.ContentSearchSpec().SnippetSpec( return_snippet= False ), # èŠçŽæãåºåããã summary_spec=SearchRequest.ContentSearchSpec().SummarySpec( summary_result_count= 3 , include_citations= False , # Gemini Proãçšããããã«æå® model_spec=SearchRequest.ContentSearchSpec().SummarySpec().ModelSpec( version= "gemini-1.5-flash-001/answer_gen/v1" ) ) ) # Vertex AI Searchã«ã¯ãšãªãæãã response = client.search( SearchRequest( serving_config=serving_config, query= "G-genãšã¯ïŒ" , page_size= 3 , content_search_spec=content_search_spec ) ) # èŠçŽæãæšæºåºå print (response.summary.summary_text) # æ€çŽ¢çµæãæšæºåºå for r in response.results: r_dct = MessageToDict(r._pb) print (r_dct) åè : Class SearchServiceClient ãã€ã³ã ã©ã€ãã©ãªã®ãã£ã³ãã«æå® from google.cloud.discoveryengine_v1alpha import SearchServiceClient, SearchRequest äžèšã®ããã«ãgoogle-cloud-discoveryengine ãã€ã³ããŒãããéã®ãã£ã³ãã«æå®ã¯ _v1alpha ãæç€ºçã«æå®ããå¿
èŠããããŸãããã£ã³ãã«ãæå®ããªã以äžã®ãããªã€ã³ããŒãæã ãšã æ€çŽ¢ã倱æããã±ãŒã¹ ã«èšèŒã®éããæ€çŽ¢çµæã0ä»¶ã«ãªããŸãã # æªæå® from google.cloud.discoveryengine import SearchServiceClient, SearchRequest # v1 æå® from google.cloud.discoveryengine_v1 import SearchServiceClient, SearchRequest # v1beta æå® from google.cloud.discoveryengine_v1beta import SearchServiceClient, SearchRequest credentials client = SearchServiceClient(credentials=credentials) ã§ãã©ã¡ãŒã¿ãšããŠäžããèªèšŒæ
å ±ã¯ãµãŒãã¹ã¢ã«ãŠã³ãã®ãã®ã§ã¯ãªããGoogle ã¢ã«ãŠã³ãã®ãã®ã«ããå¿
èŠããããŸãã Google ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã®å Žåã¯å€æ°ã®åã google.oauth2.credentials.Credentials ã«ããµãŒãã¹ã¢ã«ãŠã³ãã®èªèšŒæ
å ±ã®å Žåã¯å€æ°ã®åã google.oauth2.service_account.Credentials ã«ãªããŸãã Requests ã©ã€ãã©ãªãçšããŠã®çŽæ¥ã¢ã¯ã»ã¹ ãµã³ãã«ã³ãŒã Requests ã©ã€ãã©ãªã䜿çšã㊠Google Cloud APIs ã«çŽæ¥ã¢ã¯ã»ã¹ããå Žåã®ãµã³ãã«ã³ãŒãã¯æ¬¡ã®ãšããã§ãã import requests PROJECT_NUMBER = "xxx" # Google Cloud ãããžã§ã¯ãçªå· VERTEX_AI_APP_ID = "xxx" # Vertex AI Search ã¢ããªã® ID # APIã®URL url = f "https://discoveryengine.googleapis.com/v1alpha/projects/{PROJECT_NUMBER}/locations/global/collections/default_collection/engines/{VERTEX_AI_APP_ID}/servingConfigs/default_search" # ãªã¯ãšã¹ãããã headers = { "Authorization" : "Bearer " + credentials.token, "Content-Type" : "application/json" , } # ãªã¯ãšã¹ããã㣠session = f "projects/{PROJECT_NUMBER}/locations/global/collections/default_collection/engines/{VERTEX_AI_APP_ID}/sessions/-" data = { "query" : "G-genãšã¯ïŒ" , "pageSize" : 3 , "contentSearchSpec" : { "snippetSpec" : { "returnSnippet" : False }, "extractiveContentSpec" : { "maxExtractiveAnswerCount" : 1 } }, "session" : session } # æ€çŽ¢ãªã¯ãšã¹ãéä¿¡ response = requests.post(f "{url}:search" , headers=headers, json=data) # æ€çŽ¢çµæãæšæºåºå for r in response.json().get( "results" ): print (r) data = { "query" : { "text" : "G-genãšã¯ïŒ" , "queryId" : response.json().get( "sessionInfo" ).get( "queryId" ) }, "session" : response.json().get( "sessionInfo" ).get( "name" ), "answerGenerationSpec" : { "modelSpec" : { "modelVersion" : "gemini-1.5-flash-001/answer_gen/v1" } } } # èŠçŽãªã¯ãšã¹ãéä¿¡ response = requests.post(f "{url}:answer" , headers=headers, json=data) # èŠçŽæãæšæºåºå print (response.json().get( "answer" ).get( "answerText" )) åè : Method: projects.locations.collections.dataStores.servingConfigs.search ãã€ã³ã Requests ã©ã€ãã©ãªãçšããŠçŽæ¥ Google Cloud APIs ã«ã¢ã¯ã»ã¹ãã¿ãŒã³ã§ããéèŠãªãã€ã³ã㯠Python Client ãçšããå Žåãšå€ãããŸããã API ã® URL ã®ãã£ã³ãã«æå®ã v1alpha ã«ãã ãããã® Authorization ã«å«ãããŒã¯ã³ã¯ Google ã¢ã«ãŠã³ãã®ã¢ã¯ã»ã¹ããŒã¯ã³ãšãã å å ç«åž (èšäºäžèЧ) ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éšããŒã¿ã¢ããªãã£ã¯ã¹èª²ã2023幎4æãããG-genã«ãžã§ã€ã³ã Google Cloud Partner Top Engineer 2023, 2024ã«éžåº (2024幎ã¯Rookie of the yearã«ãéžåº)ãäŒã¿ã®æ¥ã¯ã ãããã²ãŒã ãããŠããããæã
èªè»¢è»ã§é åºãããŠããŸãã Follow @ryu_dohara