
UX
ã€ãã³ã
ãã¬ãžã³
æè¡ããã°
ããã«ã¡ã¯ããããã¯ãéš éšé·ã®çš²å£ã§ããïŒèªå·±ç޹ä»ããããŸã§ã®ãã£ãªã¢ã«ã€ããŠâãã芧ãã ãããïŒ tech-blog.rakus.co.jp ä»åã¯ãç§ãäœã£ããPdMã¿ã€ã蚺æããšããåãçµã¿ã«ã€ããŠã玹ä»ããŸãã ãã®èšºæã¯ãæ¢åã®æ§æ Œèšºæããã®ãŸãŸçšãããã®ã§ã¯ãªãã PdMãšããŠã®æèãè¡åã®åŸåãæŽçããããã«ãèªç¥ã¹ã¿ã€ã«ã«é¢ããèãæ¹ããã³ãã«ç¬èªã«èšèšãããã® ã§ãã 蚺æã®ä»çµã¿ãšãã©ã¯ã¹ã®éçºçµç¹ã§å®æœããŠèŠããŠããããšãã¬ããŒãããŸãã ãªãäœã£ãã®ã 蚺æã®ä»çµã¿ïŒ3ã€ã®è»žã8ã€ã®ã¿ã€ã 軞â ã³ãã¥ãã±ãŒã·ã§ã³ 軞⡠䟡å€ã®æ¹åæ§ è»žâ¢ å¿åæ§ ã©ã¯ã¹ç€Ÿå
ã§è©ŠããŠã¿ã éçºçµç¹å
šäœã®åŸåïŒãLogic à UX à Discoveryããæå€ ãããã¯ãéšã®ç¹åŸŽïŒãDiscoveryããéç«ã£ãŠé«ãã2ã€ã®ã¿ã€ããæ®æ ãã®çµæãã©ãåãåãã ãŸãšã ãããã« ãªãäœã£ãã®ã ãã£ããã¯ãå°ããªèª²é¡æããã§ããã PdMã®ã€ãã³ãã瀟å€ã®æ¹ãšè©±ããšãããã©ããªPdMã§ããïŒããšããåãã«ããŸãçããã®ãé£ãããšæããããšããããŸããã è·çš®åã ãã§ã¯äŒãããªãã§ãããã¹ãã«ã»ããã䞊ã¹ãŠãããã®äººããããŸã§ã¯ãªããªãèŠããŠããŸããã ããäžã€æããŠããã®ããããŒã ã¥ããã®å Žé¢ã§ã ãã®ã¡ã³ããŒã¯ã©ããªå Žé¢ã§åãçºæ®ããããã®ã ãå
±éèšèªã§è©±ãã«ããããšã§ããã ãã¡ããã人ã®é©æ§ãå¯èœæ§ã¯èšºæã ãã§æ±ºãŸããã®ã§ã¯ãããŸããã ãã ã察話ã®ãã£ããã«ãªãæŽç軞ãããã ãã§ãããäºãã®çè§£ã¯é²ãããããªããŸãã ããã§ãPdMãšããŠã®æèã»è¡åã¹ã¿ã€ã«ã3ã€ã®è»žã§æŽçãã8ã€ã®ã¿ã€ãã«åé¡ãã蚺æãäœã£ãŠã¿ãŸããã å察é¢ã®PdMå士ã§è©±ããã£ããã«ããããããŒã å
ã§èªåãä»è
ã®åŒ·ã¿ãèšèªåãããããããã®ã åèæ
å ±ã®äžã€ ãšããŠäœ¿ããããšãæåŸ
ããŠããŸãããŸãä»åã®æŽçã«ããã£ãŠã¯ãèšåãã¿ã€ã説æã®ãããå°ãèããéçšã§ãçæAIãè£å©çã«æŽ»çšããŸããã 人ãèããã¹ã軞ãè§£éãåæã«ãã€ã€ã衚çŸã®å¹
ãåºãããã説ææã磚ãããããããã§ãAIã¯è¯ã壿ã¡çžæã«ãªããšæããŠããŸãã 蚺æã®ä»çµã¿ïŒ3ã€ã®è»žã8ã€ã®ã¿ã€ã 蚺æã¯ã3ã€ã®è»žã®çµã¿åããã§PdMã®ã¿ã€ããåé¡ããŸãã 軞â ã³ãã¥ãã±ãŒã·ã§ã³ LogicïŒçè©°ãåïŒïŒ EmotionïŒå
±æåïŒ ããŒã ãé¢ä¿è
ãã©ãå·»ã蟌ãããèŠã軞ã§ãã ããŒã¿ãè«çã§åããåŸåã匷ãã®ããå
±æãé¢ä¿æ§ãèµ·ç¹ã«åããåŸåã匷ãã®ããèŠãŸãã 軞⡠䟡å€ã®æ¹åæ§ UXïŒãŠãŒã¶ãŒäŸ¡å€éèŠïŒïŒ BVïŒããžãã¹äŸ¡å€éèŠïŒ ã©ã®ææãããéèŠããããããèŠã軞ã§ãã 顧客äœéšãèµ·ç¹ã«èããã®ããäºæ¥æé·ãåçæ§ãèµ·ç¹ã«èããã®ãããã®åŸåãæŽçããŸãã 軞⢠å¿åæ§ DiscoveryïŒæ¢çŽ¢å¿åïŒïŒ DeliveryïŒå®è¡å¿åïŒ ã©ã®ãã§ãŒãºã§ã¢ãããŒã·ã§ã³ãæããããããèŠã軞ã§ãã ãŸã èŠã¬èª²é¡ãçºèŠããããšã«æ¹ãããã®ãã䟡å€ãçå®ã«å±ããããšã«æå¿ããæããã®ããèŠãŸãã ãã®3軞ã®çµã¿åããã§ã8ã€ã®ã¿ã€ãã«ãªããŸãã â»æ¬èšäºã§ã¯ã蚺æã®è©³çްãªèšåå
容ãå
¬éæ¹æ³ãã®ãã®ã®æ¡å
ã¯å²æããŸãã ã©ã¯ã¹ç€Ÿå
ã§è©ŠããŠã¿ã ãã£ããäœã£ãã®ã§ãã©ã¯ã¹ã®éçºçµç¹ã§ã詊ããŠã¿ãŸããã ãããã¯ãéšã®ã¡ã³ããŒã ãã§ãªããæ¥œæ¥œã·ãªãŒãºã®éçºã«æºãããšã³ãžãã¢ãQAãã€ã³ãã©ã管çè·ãŸã§ãå¹
åºãåå ããŠããããŸããã ããã§ç޹ä»ããã®ã¯ãå人ãè©äŸ¡ãããæ±ºãã€ãããããããã®ãã®ã§ã¯ãªãã çµç¹ã®åŸåã俯ç°ããŠèŠãããã®éèšçµæ ã§ãã ãã©ã®ã¿ã€ããåªããŠãããããèŠããã®ã§ã¯ãªãããã©ããªèŠç¹ãéãŸã£ãŠãããããç¥ãããã®ææãšããŠæ±ã£ãŠããŸãã ãã®ããã§ãããã€ãè峿·±ãåŸåãèŠããŠããŸããã éçºçµç¹å
šäœã®åŸåïŒãLogic à UX à Discoveryããæå€ éçºçµç¹å
šäœãèŠããšããã£ãšãå€ãã£ãã®ã¯ ãµã€ãšã³ãã£ã¹ãïŒLogic à UX à DiscoveryïŒã¿ã€ã ã§ããã å軞ã®å
šäœæ¯çã¯æ¬¡ã®ãšããã§ãã è«ççã«èãããŠãŒã¶ãŒäŸ¡å€ãéèŠããæ¢çŽ¢ãçºèŠã«ã¢ãããŒã·ã§ã³ãæãã人ãå€ãã ããããéçºçµç¹å
šäœã®å€§ãŸããªåŸåã§ããã å®éãæ¥ã
ã®ãããã¯ãéçºã§ãã ã顧客課é¡ãããæ·±ãçè§£ãããã ã仮説ãç«ãŠãŠæ€èšŒãããã ãšããå§¿å¢ãæã€ã¡ã³ããŒãå€ããšæããŠããŸãããã®åŸåã¯ã顧客ã«ãšã£ãŠæ¬åœã«äŸ¡å€ã®ããæ©èœãäœéšãèããããã§ãã©ã¯ã¹ã®éçºçµç¹ãããã®äžã€ãããããŸããã ãããã¯ãéšã®ç¹åŸŽïŒãDiscoveryããéç«ã£ãŠé«ãã2ã€ã®ã¿ã€ããæ®æ ãããã¯ãéšã«çµããšããŸãå°ãéã£ãé¡ãèŠããŠããŸããã ãããã¯ãéšã®å軞æ¯çã¯æ¬¡ã®ãšããã§ãã ç¹ã«ç®ãåŒããã®ã¯ãå¿åæ§ã§ãã å
šäœã§ã67%ãDiscoveryåã§ãããããããã¯ãéšã§ã¯ 79% ãšããã«é«ããªã£ãŠããŸããããŸã çãã®ãªãåããæ¢çŽ¢ããããšã奜ããªäººãçºèŠã®ãã§ãŒãºã«ãšãã«ã®ãŒãæ¹§ã人ãå€ãçµç¹ã ãšèšãããã§ãã ããã«è峿·±ãã£ãã®ããã¿ã€ãã®ååžã§ãã ãããã¯ãéšã§æå€ã ã£ãã®ã¯ã ããžã§ããªãŒïŒEmotion à UX à DiscoveryïŒ ãš ã¹ãã©ããžã¹ãïŒLogic à BV à DiscoveryïŒ ã®åçéŠäœã§ããã äžæ¹ã¯ãå
±æããæªæ¥ã®äœéšãæãã¿ã€ãã ããäžæ¹ã¯ãæ§é ããåã¡çãèŠåºãã¿ã€ãã§ãã ã¢ãããŒãã¯å¯Ÿç
§çã§ãããã©ã¡ãããDiscoveryïŒæ¢çŽ¢ïŒãã«åŒ·ãåããŠãããšããå
±éç¹ããããŸãã ææ§å¯ãã®äººãšè«çå¯ãã®äººããŠãŒã¶ãŒäŸ¡å€ã匷ãèŠã人ãšããžãã¹äŸ¡å€ã匷ãèŠãäººãæ··åšããŠããã ãã®å€æ§ãããã©ã¯ã¹ã®ãããã¯ãéšã®ç¹åŸŽã®äžã€ãªã®ãããããŸããã ãã®çµæãã©ãåãåãã ãã¿ã€ããéããšãæ©æŠãçãŸããã®ã§ã¯ããšæããæ¹ããããããããŸããã ç§ã¯ããããéã ãšæã£ãŠããŸãã ããšãã°ããžã§ããªãŒãšã¹ãã©ããžã¹ãã¯ãããããç°ãªã匷ã¿ãæã£ãŠããŸãã å
±æããäœéšãæãåãšãæ§é ããäºæ¥ã®åã¡çãèããåã¯ãã©ã¡ãããããã¯ãã¥ããã«æ¬ ãããŸããã 倧åãªã®ã¯ããããªãã¯ãã®ã¿ã€ãã ããããããã¹ãããšæ±ºããããšã§ã¯ãªãã ãã®ããŒã ã«ã¯ã©ããªèŠç¹ãéãŸã£ãŠããã®ã ãç¥ãããšã ãšæã£ãŠããŸãã ãã®èŠç¹ã®éããçè§£ã§ãããšã 顧客課é¡ã®èŠç«ãŠã«åãããªãã æææ±ºå®ã®èгç¹ãè¶³ããŠããã 誰ãã©ã®å Žé¢ã§åãçºæ®ããããã ãšãã£ãããšãããã建èšçã«è©±ãããããªããŸãã å®éããã®èšºæããã£ããã«ãã©ã¯ã¹ã®ãããã¯ãéšã§ã ãèªåã¯ã©ãããå Žé¢ã§åãåºãããããã ãããŒã ãšããŠèŠããšãã©ã®èŠç¹ã匷ããŠãã©ã®èŠç¹ãèããã ã話é¡ã«ãããããªã£ãæèŠããããŸãã ãã®çµæãšããŠã顧客ã«ãšã£ãŠã®äŸ¡å€ã®æãæ¹ãããããã¯ãã¥ããã«ããã圹å²åæ
ã®è§£å床ãå°ãäžãã£ãããã«æããŠããŸãã ãŸãšã ãPdMã¿ã€ã蚺æãã¯ããŸã çºå±éäžã®ããŒã«ã§ãã åã«ã¯ããããšãç®çã§ã¯ãªãã å
±éèšèªãéããŠãèªåãããŒã ã®åŸåãçè§£ããããã®åºçºç¹ ãšããŠäœ¿ã£ãŠããããããšæã£ãŠããŸãã PdMãšããŠããããã¯ãããã¯ãã¥ããã«é¢ããäžäººãšããŠã ãèªåã¯ã©ããªå Žé¢ã§åãçºæ®ããããã®ãã ãããŒã ã®äžã§ã©ããªèŠç¹ãæã¡èŸŒã¿ãããã®ãã ãèãããã£ããã«ãªãã°ãäœã£ãç²æããããŸãã ãããŠãããããçžäºçè§£ã¯ãããããããŒã ã¥ããã ãã§ãªãã 顧客課é¡ãå€é¢çã«æãããã䟡å€ããã¯ã©ãŠããµãŒãã¹ãå±ããããšã«ãã€ãªããã¯ãã§ãã èå³ãæã£ãŠããã ãããããã²äžåºŠè©ŠããŠã¿ãŠãã ããã ãããã« ã©ã¯ã¹ã®ãããã¯ãéšã§ã¯ãããŸããŸãªã¿ã€ãã®PdMããã¶ã€ããŒãäžç·ã«åããŠããŸãã éããé¢çœãããªããã顧客ã«ãšã£ãŠãããã䟡å€ãèãç¶ãããæ¹ãšããäžç·ã§ãããããããã§ãã æ¡çšæ
å ±ã¯ããã²ãã¡ãããã芧ãã ããã career-recruit.rakus.co.jp speakerdeck.com
æ¬èšäºã¯ 2026 幎 5 æ 7 æ¥ã«å
¬éããã â Announcing aggregations on Amazon ElastiCache â ã翻蚳ãããã®ã§ãã Amazon ElastiCache ãéèšã¯ãšãªããµããŒãããããã«ãªããåäžã®ã¯ãšãªã§ãã£ãã·ã¥å
ã®ããŒã¿ãçŽæ¥ãã£ã«ã¿ãªã³ã°ãã°ã«ãŒãåã倿ãéèšããããšãããç°¡åã«ãªããŸãããéèšã¯ãšãªã䜿çšããããšã§ããã©ãã€ãèŠæš¡ã®ããŒã¿ã«å¯ŸããŠãã€ã¯ãç§åäœã®äœã¬ã€ãã³ã·ãŒã§ãææ°ã®æžã蟌ã¿ãåæ ãããçµæãè¿ãããªã¢ã«ã¿ã€ã ãªã¢ããªã±ãŒã·ã§ã³äœéšãæ§ç¯ã§ããŸããããŒã¿ããã§ã«ååšããå Žæã§ãã¢ããªã±ãŒã·ã§ã³ãèŠæ±ããé床ã§åæãè¡ãããšãã§ããå¥éåæã¬ã€ã€ãŒãçšæããå¿
èŠã¯ãããŸãããéèšæ©èœã䜿çšãããšãElastiCache ã«ä¿åæžã¿ã®ããŒã¿ã«å¯ŸããŠããªã¢ã«ã¿ã€ã ã®ãªãŒããŒããŒãããã¡ã»ããæ€çŽ¢ã«ããã«ã¿ãã°ãã©ãŠãžã³ã°ãéçšã¬ããŒããæ¢çŽ¢çãªåæã¯ãšãªãªã©ãæ§ç¯ã§ããŸãã ElastiCache å
ã®ã¡ã¢ãªäžã§éçŽåŠçãçŽæ¥å®è¡ããããšã§ãã¢ãŒããã¯ãã£ã®è€éãã軜æžããå¿çæéãæ¹åã§ããŸããéçŽã¯ãšãªã¯ãµãŒããŒåŽã§èšç®ãå®è¡ãããããã¢ããªã±ãŒã·ã§ã³ã¯ããŒã¿ããã®å Žã§åæããæçµçãªãµããªãŒã®ã¿ãè¿ãããšãã§ããŸããäŸãã°ã1 ã€ã®éçŽã¯ãšãªã§ã補åã«ã¿ãã°ããã£ã«ã¿ãªã³ã°ããŠç¹å®ã®ã«ããŽãªã®ããŒã¿ãååŸããçµæããã©ã³ãããšã«ã°ã«ãŒãåããåãã©ã³ãã®å¹³åè©äŸ¡ãèšç®ããããã©ãŒãã³ã¹äžäœ 10 ä»¶ã®ã¿ãè¿ããšãã£ãããšãå¯èœã§ãããããã®ã¯ãšãªã¯ãGROUPBYãREDUCEãAPPLYãFILTERãSORTBYãLIMIT ãªã©ã®ã¹ããŒãžããã€ãã©ã€ã³ã«é£çµããããšã§æ§ç¯ã§ããåã¹ããŒãžã®åºåãæ¬¡ã®ã¹ããŒãžãžã®å
¥åã«ãªããŸãããããã®ã¹ããŒãžãä»»æã®é åºã§çµã¿åãããç¹°ãè¿ã䜿çšããããšã§ã1 ã€ã®ã³ãã³ãã§è€æ°ã¹ãããã®åæã¯ãŒã¯ãããŒãæ§ç¯ã§ããŸããéçŽã¯ãã©ã€ããªäžã§ Read-after-Write æŽåæ§ (æžã蟌ã¿åŸèªã¿åãæŽåæ§) ãæäŸãããããçµæã«ã¯ææ°ã®æžã蟌ã¿ãåæ ãããã¯ã©ã€ã¢ã³ãã³ãŒãã倿Žããããšãªãã·ã£ãŒãéã§ã¹ã±ãŒã«ããŸããæ¬æçš¿ã§ã¯ãéçŽã«ãã£ãŠå®çŸã§ãããŠãŒã¹ã±ãŒã¹ã玹ä»ããElastiCache for Valkey ã䜿ã£ãŠãã¡ã»ãããã©ãŠãžã³ã°ãšã³ãžã³ãæ§ç¯ããªããããã®ä»çµã¿ã解説ããŸãã ãããã®éçŽæ©èœã¯ãElastiCache version 9.0 for Valkey ã§ãå
šææ€çŽ¢ãå®å
šäžèŽæ€çŽ¢ãç¯å²æ€çŽ¢ããã¯ãã«æ€çŽ¢æ©èœ ( Amazon ElastiCache ã§ã®å
šææ€çŽ¢ãå®å
šäžèŽæ€çŽ¢ãç¯å²æ€çŽ¢ããã€ããªããæ€çŽ¢ ãåç
§) ãšäžŠãã§å©çšå¯èœã§ããElastiCache version 9.0 for Valkey ã§ã¯ãŸããåã
ã®ãã£ãŒã«ãã«å¯Ÿãããã现ãã㪠TTL å¶åŸ¡ãå¯èœã«ããããã·ã¥ãã£ãŒã«ãã®æå¹æéæ©èœããæå€§ 40% åäžãããã€ãã©ã€ã³ã¹ã«ãŒããããå°å
¥ãããŠããŸãããªãªãŒã¹ã®è©³çްã«ã€ããŠã¯ã Amazon ElastiCache åã Valkey 9.0 ã®ãç¥ãã ãã芧ãã ããã éçŽã®äœ¿çšãé©ããŠããå Žé¢ ã¢ããªã±ãŒã·ã§ã³ã¯ããªã¢ã«ã¿ã€ã ã§ãã£ã«ã¿ãªã³ã°ãã°ã«ãŒãåãéèšããå¿
èŠãããããŒã¿ã ElastiCache ã«ä¿åããããšããããããŸããäŸãã°ãE ã³ããŒã¹ãã©ãããã©ãŒã ã§ã¯ãã«ã¿ãã°å
šäœã«ããã£ãŠã«ããŽãªå¥ã®å¹³åè©äŸ¡ãååæ°ãèšç®ããŸããã¹ããªãŒãã³ã°ãµãŒãã¹ã§ã¯ããžã£ã³ã«å¥ã®ç·èŠèŽæ°ãå¹³åèŠèŽæéãåçæ°äžäœã®äœåãç®åºãããã¬ã³ããã£ãŒããã¬ã³ã¡ã³ããŒã·ã§ã³ã©ã³ãã³ã°ãæ§ç¯ããŸããéèãµãŒãã¹ã§ã¯ããŠãŒã¶ãŒãæéæ ããšã«ååŒãã°ã«ãŒãåããŠåèšãèšç®ãããããå€éåãæ€åºããã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒããçæããŸããã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒåãã®ãšã¯ã¹ããªãšã³ã¹ãã©ã€ãåæãéçšã¬ããŒããæ¯ããããã«ãã®ããŒã¿ããªã¢ã«ã¿ã€ã ã«åæããå¿
èŠããããå€ãããŒã¿ãé
ãçµæã¯ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžãããŸãããããã°ãåçºã®èª¿æ»ã®ããã«ã¢ãããã¯ãªã¯ãšãªãå¿
èŠãªéçºè
ã¯ãå¥ã®åæã¬ã€ã€ãŒãèšå®ããããããŒã¿ãã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã«ãšã¯ã¹ããŒããããããããšãªããã©ã€ãããŒã¿ã«å¯ŸããŠçŽæ¥éèšãå®è¡ããããšãã§ããŸããéèšã¯ã次㮠3 ã€ã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ããµããŒãããŸãã ã«ã¿ãã°ãã£ã«ã¿ãªã³ã°ã®ããã®ãã¡ã»ããæ€çŽ¢: E ã³ããŒã¹ãã©ãããã©ãŒã ã§ã¯ãè²·ãç©å®¢ããã©ãŠãžã³ã°ããéã«ãåãã£ã«ã¿ã®çµã¿åããã«äžèŽããååæ°ã衚瀺ããŸããè²·ãç©å®¢ãã«ããŽãªãäŸ¡æ Œåž¯ãéžæãããšãUI ã¯æ®ãã®ãã¹ãŠã®ãã£ã«ã¿å€ã®ã«ãŠã³ããå³åº§ã«æŽæ°ããŸãã1 ã€ã®éèšã¯ãšãªã§ãäžèŽããã«ã¿ãã°ããã©ã³ããè²ããŸãã¯è©äŸ¡ããšã«ã°ã«ãŒãåããã°ã«ãŒãããšã®ã«ãŠã³ããè¿ããããã¢ããªã±ãŒã·ã§ã³ã¯äºåèšç®ãå€ãã«ãŠã³ãã®ãã£ãã·ã¥ãªãã«æ£ç¢ºãªãã¡ã»ããæ°ã衚瀺ã§ããŸããéèšã¯ã€ã³ã¡ã¢ãªã§çŽæ¥å®è¡ããããããæ°çŸäžã®ååã«ãŸãããå Žåã§ãããããã®ã«ãŠã³ãã¯ãã€ã¯ãç§ã®ã¬ã€ãã³ã·ã§è¿ãããŸãã ãªã¢ã«ã¿ã€ã ã®ãã¬ã³ããšã©ã³ãã³ã°: ã²ãŒã ãã©ãããã©ãŒã ãã¹ããªãŒãã³ã°ãµãŒãã¹ãããŒã±ãããã¬ã€ã¹ã§ã¯ãã©ã€ãã®ãšã³ã²ãŒãžã¡ã³ãææšã«åºã¥ããŠãã¬ã³ãã³ã³ãã³ããäžäœã©ã³ã«ãŒã衚瀺ããŸããåŸæ¥ãããã«ã¯ã¹ã±ãžã¥ãŒã«ã«åŸã£ãŠã©ã³ãã³ã°ãåèšç®ããããã¯ã°ã©ãŠã³ããžã§ããå¿
èŠã§ãããŒã¿ã®é³è
åãæããŠããŸããããããã¯ã倧éã®çµæã»ããã«å¯Ÿããã¢ããªã±ãŒã·ã§ã³åŽã§ã®ãœãŒããå¿
èŠã§ãã¬ã€ãã³ã·ãŒãå¢å ããŠããŸãããåäžã®éèšã¯ãšãªã§ãã³ã³ãã³ããã«ããŽãªãŒããšã«ã°ã«ãŒãåããç·èŠèŽåæ°ããšã³ã²ãŒãžã¡ã³ãã¹ã³ã¢ããã¬ã€ã€ãŒã©ã³ã¯ãèšç®ããŠãäžäœã®çµæãè¿ãããšãã§ããŸããã€ã³ããã¯ã¹ã¯æžãèŸŒã¿æã«åæçã«æŽæ°ããããããéèšã¯ãšãªã¯ããŒãªã³ã°ããã£ãã·ã¥ç¡å¹åã宿çãªåèšç®ãè¡ãããšãªãææ°ã®ããŒã¿ãåæ ããŸãã éçšã¬ããŒããšåæ: ElastiCache ãé«éã¢ã¯ã»ã¹ã®ããã«å©çšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåãããŒã¿ã«å¯Ÿããéçšåæãã¬ããŒããå¿
èŠã«ãªãããšããããããŸããäŸãã°ãã»ãã·ã§ã³ã¹ãã¢ã§ã¯ããã€ã¹ããšã®å¹³åã»ãã·ã§ã³æéãèšç®ããE ã³ããŒã¹ãã©ãããã©ãŒã ã§ã¯ã¹ããŒã¿ã¹ããã«ãã£ã«ã¡ã³ã段éããšã®æ³šæéãèšç®ããŸããAggregations ã¯ãå¥éã®åæçšã¯ã©ã¹ã¿ãŒãããããžã§ãã³ã°ããã ETL ãã€ãã©ã€ã³ãç¶æãããããããšãªããã¹ã±ãžã¥ãŒã«ã«åºã¥ããŠããŸãã¯ãªã³ããã³ãã§ããããã®ã¯ãšãªãã€ã³ã¡ã¢ãªããŒã¿ã«å¯ŸããŠçŽæ¥å®è¡ããŸãã ElastiCache ã䜿ã£ããã¡ã»ããæ€çŽ¢ãšãªã¢ã«ã¿ã€ã åæã®æ§ç¯ ãããã®æ©èœãçµã¿åãããŠå®æŒããããã«ãã¡ãã£ã¢ã¹ããªãŒãã³ã°ãã©ãããã©ãŒã ã§ãã AnyOrganization åãã«ããã¡ã»ãããã©ãŠãžã³ã°ãšåæãšã³ãžã³ãæ§ç¯ããŸããAnyOrganization ã¯ã³ã³ãã³ãã«ã¿ãã°ã ElastiCache ã«ããã·ã¥ããŒãšããŠä¿åããŠãããåæ ç»ã¿ã€ãã«ã«ã¯ãžã£ã³ã«ãèšèªãã¹ã¿ãžãªãè©äŸ¡ããªã¢ã«ã¿ã€ã ã®èŠèŽåæ°ãšãã£ãã¡ã¿ããŒã¿ãå«ãŸããŠããŸãã以äžã®ã³ãŒãã§ã¯ããã®ããŒã¿ã«å¯Ÿã㊠3 ã€ã®ã¯ãšãªãã¿ãŒã³ãæ§ç¯ããŸãããã¡ã»ãããã£ã«ã¿ãªã³ã°ãã©ã€ããã¬ã³ãã¢ã€ãã ããããŠã¹ã¿ãžãªã¬ãã«ã®ãšã³ã²ãŒãžã¡ã³ãã¬ããŒãã§ãã åææ¡ä»¶ ãã®èšäºã®äŸã§ã¯ãPython ãš valkey-py ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã䜿çšããŸããæé ãå®è¡ããã«ã¯ã以äžãå¿
èŠã§ã (æèŠæéã®ç®å®: 30 å): AWS ã¢ã«ãŠã³ã ããã³ AWS Command Line Interface (AWS CLI) ElastiCache ã¬ããªã±ãŒã·ã§ã³ã°ã«ãŒããäœæããæš©éãæã€ AWS IAM ããŒã« Amazon ElastiCache ã¯ã©ã¹ã¿ãŒãšåã VPC å
ã«ãã Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ (ãŸã㯠Amazon ElastiCache ã«æ¥ç¶å¯èœãª ä»»æã®ã¢ããªã±ãŒã·ã§ã³) Python 3.9 以éãããã³ valkey-py ããŒãžã§ã³ 6.1.1 以é (pip install valkey) ãã®æçš¿ã®å®å
šãªãµã³ãã«ã³ãŒãã¯ã Amazon ElastiCache samples GitHub ãªããžããªã§å
¥æã§ããŸãã git clone https://github.com/aws-samples/amazon-elasticache-samples.git cd amazon-elasticache-samples/blogs/aggregations-blog ElastiCache for Valkey ã¯ã©ã¹ã¿ãŒã®ã»ããã¢ãã éèšæ©èœãå©çšããããã® ElastiCache ã¯ã©ã¹ã¿ãŒã¯ã AWS Management Console ãŸã㯠AWS CLI ã§äœæã§ããŸããéèšæ©èœã¯ ElastiCache version 9.0 for Valkey 以éã§å©çšå¯èœã§ãã以äžã®äŸã§ã¯ CLI ã䜿çšããŠããŸãã aws elasticache create-replication-group \ --replication-group-id AnyOrganization-cache \ --replication-group-description "AnyOrganization Valkey cluster" \ --engine valkey \ --engine-version 9.0 \ --transit-encryption-enabled \ --cache-node-type cache.r7g.large \ --num-node-groups 2 \ --replicas-per-node-group 1 \ --multi-az-enabled \ --automatic-failover-enabled # --transit-encryption-enabled ãèšå®ãããŠããå ŽåãPython ã¯ã©ã€ã¢ã³ãæ¥ç¶ã« # ssl=True ã远å ããŸã: # client = valkey.ValkeyCluster(..., ssl=True) ããŒã¿ãžã®ã€ã³ããã¯ã¹äœæ ElastiCache ã«ä¿åãããŠããããŒã¿ã«å¯ŸããŠã catalog_index ãšããã€ã³ããã¯ã¹ãäœæããŸãã Genre ã language ã studio ã¯ããã¡ã»ãããã£ã«ã¿ãªã³ã°çšã®å®å
šäžèŽã¿ã°ãšããŠã€ã³ããã¯ã¹åãããŸãã Release_year ã rating ã views_24h ã¯ãç¯å²ãã£ã«ã¿ããœãŒãçšã®æ°å€ãã£ãŒã«ããšããŠã€ã³ããã¯ã¹åãããŸããã¿ã€ãã«ã¯ãããŒã¯ãŒãããã¬ãã£ãã¯ã¹ããããŸãäžèŽããµããŒãããå
šææ€çŽ¢å¯èœãªãã£ãŒã«ããšããŠã€ã³ããã¯ã¹åãããŸãã 以äžã®ã³ãŒãã¯ãvalkey-py ã® search ã¢ãžã¥ãŒã«ã䜿çšã㊠Valkey Search ã³ãã³ããæ§ç¯ãéä¿¡ããŸããå Python ã¡ãœããåŒã³åºãã¯ããããã¯ãŒã¯è¶ãã«éä¿¡ããã Valkey ã³ãã³ãã«çŽæ¥å¯Ÿå¿ããŠããŸããäŸãã°ã client.ft("catalog_index").create_index(...) 㯠FT.CREATE ã³ãã³ããéä¿¡ãã client.ft("catalog_index").aggregate(req) 㯠FT.AGGREGATE ã³ãã³ããéä¿¡ããŸããåã³ãŒããããã¯ã®æšªã«ã察å¿ãã Valkey ã³ãã³ãã瀺ããŠããŸãã import valkey from valkey.commands.search.field import TextField, TagField, NumericField from valkey.commands.search.indexDefinition import IndexDefinition, IndexType # : Insert your ElastiCache cluster's discovery endpoint VALKEY_CLUSTER_ENDPOINT = "placeholder_cluster.cnxa6h.clustercfg.use1.cache.amazonaws.com" client = valkey.ValkeyCluster( host=VALKEY_CLUSTER_ENDPOINT, port=6379, decode_responses=True, ssl=True) client.ft("catalog_index").create_index(fields=[ TextField("title"), TagField("genre"), TagField("language"), TagField("studio"), NumericField("release_year"), NumericField("rating"), NumericField("views_24h")], definition=IndexDefinition(prefix=["title:"],index_type=IndexType.HASH)) åçã® Valkey ã³ãã³ã: FT.CREATE catalog_index ON HASH PREFIX 1 title: SCHEMA title TEXT genre TAG language TAG studio TAG release_year NUMERIC rating NUMERIC views_24h NUMERIC ElastiCache for Valkey ã¹ãã¢ã«ã«ã¿ãã°ããŒã¿ãæå
¥ããŸããæ¬èšäºã§ã¯ãElastiCache GitHub ãªããžããªã®ãµã³ãã«ããŒã¿ã䜿çšããŸãããä»ã®ããŒã¿ãœãŒã¹ã䜿çšããããšãã§ããŸãã import csv import urllib.request import io import time response = urllib.request.urlopen( "https://raw.githubusercontent.com/aws-samples/amazon-elasticache-samples/main/blogs/aggregations-blog/catalog_data.csv") reader = csv.DictReader(io.TextIOWrapper(response)) count = 0 for row in reader: key = row.pop("id") client.hset(key, mapping=row) count += 1 print(f"Loaded {count} records") ã€ã³ããã¯ã¹ã¯ããŒã¿ãããŒãããåã§ãåŸã§ãäœæã§ããŸãããã¬ãã£ãã¯ã¹ã«äžèŽããããŒãæ¢ã«ååšããå ŽåãValkey Search ã¯ããããèªåçã«ã€ã³ããã¯ã¹ã«ããã¯ãã£ã«ããŸãã ãã¡ã»ãããã£ã«ã¿ãŒ 以äžã®éèšã¯ããŠãŒã¶ãŒãéžæãããã£ã«ã¿ãŒãåãåããäžèŽããçµæããžã£ã³ã«ãèšèªãè©äŸ¡ãå
¬é幎ã§ã°ã«ãŒãåããåã°ã«ãŒãã®ã¿ã€ãã«æ°ãè¿ããŸããããã«ãããUI ã¯çµæãšäžŠã¹ãŠãã¡ã»ããã®ä»¶æ°ã衚瀺ã§ããŸãã from valkey.commands.search.aggregation import AggregateRequest, Desc from valkey.commands.search import reducers def get_facet_counts(filters): # Build query string from user-selected filters clauses = [] if "genre" in filters: clauses.append(f"@genre:{{{filters['genre']}}}") if "language" in filters: clauses.append(f"@language:{{{filters['language']}}}") if "min_rating" in filters: clauses.append(f"@rating:[{filters['min_rating']} + inf]") query = " ".join(clauses) if clauses else "@rating:[-inf + inf]" # Run an aggregation for each facet dimension dimensions = ["genre", "language", "rating"] facets = {} for dim in dimensions: req = AggregateRequest(query) \ .load(f"@{dim}") \ .group_by(f"@{dim}", reducers.count().alias("count")) facets[dim] = client.ft("catalog_index").aggregate(req).rows return facets # Example: user filters for dramas in english, get counts for each dimension facets = get_facet_counts({"genre": "drama", "language": "english"}) # Example output: # {'genre': [{'genre': 'drama', 'count': '6'}], # 'language': [{'language': 'english', 'count': '6'}], # 'rating': [{'rating': '4', 'count': '4'}, # {'rating': '5', 'count': '2'}]} åçã® Valkey ã³ãã³ã (1 ã€ã®ãã¡ã»ãããã£ã¡ã³ã·ã§ã³ãè±èªã®ãã©ãã§ãã£ã«ã¿ãªã³ã°ããå Žå): FT.AGGREGATE catalog_index "@genre:{drama} @language:{english}" LOAD 1 @genre GROUPBY 1 @genre REDUCE COUNT 0 AS count ãªã¢ã«ã¿ã€ã ã§æ¥äžæäžã®ã¢ã€ãã 以äžã®ã³ãŒãã¯ããžã£ã³ã«ããšã®ããããã¬ã³ãã¿ã€ãã«ãååŸããŸããããã¯ããŠãŒã¶ãŒãã³ã³ãã³ããèŠèŽãããšãªã¢ã«ã¿ã€ã ã§æŽæ°ããã views_24h ãã£ãŒã«ãã«å¯Ÿããéèšã«ãã£ãŠå®çŸãããŠããŸãã def get_trending_by_genre(limit=10): # Get the highest view count per genre # sorted by most popular genre first req = AggregateRequest("@rating:[-inf + inf]") \ .load("@genre", "@views_24h") \ .group_by("@genre", reducers.max("@views_24h").alias("max_views")) \ .sort_by(Desc("@max_views"), max=limit) return client.ft("catalog_index").aggregate(req).rows trending_by_genre = get_trending_by_genre() # Example output: # [{'genre': 'action', 'max_views': '4500'}, # {'genre': 'comedy', 'max_views': '3800'}, # {'genre': 'thriller', 'max_views': '3600'}, # {'genre': 'sci-fi', 'max_views': '3400'}, # {'genre': 'drama', 'max_views': '3200'}, # {'genre': 'animation', 'max_views': '3100'}, # {'genre': 'romance', 'max_views': '2800'}, # {'genre': 'horror', 'max_views': '2600'}, # {'genre': 'documentary', 'max_views': '1900'}] åçã® Valkey ã³ãã³ã (1 ã€ã®ãã¡ã»ãããã£ã¡ã³ã·ã§ã³ã§ãè±èªã®ãã©ãããã£ã«ã¿ãªã³ã°ããå Žå): FT.AGGREGATE catalog_index "@rating:[-inf + inf]" LOAD 2 @genre @views_24h GROUPBY 1 @genre REDUCE MAX 1 @views_24h AS max_views SORTBY 2 @max_views DESC MAX 10 ãªã¢ã«ã¿ã€ã ãã¬ã³ãã¢ã€ãã 以äžã®ã³ãŒãã¯ããžã£ã³ã«ããšã«ãã¬ã³ãã®äžäœã¿ã€ãã«ãååŸãããã®ã§ããŠãŒã¶ãŒãã³ã³ãã³ããèŠèŽãããšãªã¢ã«ã¿ã€ã ã«æŽæ°ããã views_24h ãã£ãŒã«ãã«å¯Ÿããéèšã«ãã£ãŠå®çŸãããŠããŸãã def get_trending_by_genre(limit=10): # Get the highest view count per genre # sorted by most popular genre first req = AggregateRequest("@rating:[-inf + inf]") \ .load("@genre", "@views_24h") \ .group_by("@genre", reducers.max("@views_24h").alias("max_views")) \ .sort_by(Desc("@max_views"), max=limit) return client.ft("catalog_index").aggregate(req).rows trending_by_genre = get_trending_by_genre() # Example output: # [{'genre': 'action', 'max_views': '4500'}, # {'genre': 'comedy', 'max_views': '3800'}, # {'genre': 'thriller', 'max_views': '3600'}, # {'genre': 'sci-fi', 'max_views': '3400'}, # {'genre': 'drama', 'max_views': '3200'}, # {'genre': 'animation', 'max_views': '3100'}, # {'genre': 'romance', 'max_views': '2800'}, # {'genre': 'horror', 'max_views': '2600'}, # {'genre': 'documentary', 'max_views': '1900'}] åçã® Valkey ã³ãã³ã: FT.AGGREGATE catalog_index "@rating:[-inf + inf]" LOAD 2 @genre @views_24h GROUPBY 1 @genre REDUCE MAX 1 @views_24h AS max_views SORTBY 2 @max_views DESC MAX 10 ãªã³ããã³ããšã³ã²ãŒãžã¡ã³ãã¬ããŒã AnyOrganization ã¯ãå¶äœã¹ã¿ãžãªå¥ã®ã³ã³ãã³ãããã©ãŒãã³ã¹ã枬å®ããããã«ãæ¥æ¬¡ã®ã¬ããŒããžã§ããå®è¡ããŠããŸããæ¬¡ã®ã³ãŒãã¯ãåãã€ã³ããã¯ã¹ã«å¯Ÿããéèšã䜿çšããŠãã¿ã€ãã«æ°ãå¹³åè©äŸ¡ãç·ãšã³ã²ãŒãžã¡ã³ããªã©ã®ã¹ã¿ãžãªã¬ãã«ã®ã¡ããªã¯ã¹ãèšç®ããŸãã def get_studio_report(): # Studio performance: title count, average rating, total 24h views req = AggregateRequest("@rating:[-inf + inf]") \ .load("@studio", "@rating", "@views_24h") \ .group_by("@studio", reducers.count().alias("title_count"), reducers.avg("@rating").alias("avg_rating"), reducers.sum("@views_24h").alias("total_views")) \ .sort_by(Desc("@total_views")) return client.ft("catalog_index").aggregate(req).rows studio_report = get_studio_report() # Example output: # [{'studio': 'StreamFlix Originals', 'title_count': '18', # 'avg_rating': '4.3333333333', 'total_views': '46200'}, # {'studio': 'Summit Pictures', 'title_count': '13', # 'avg_rating': '3.8461538462', 'total_views': '30000'}, # {'studio': 'Crimson Studios', 'title_count': '11', # 'avg_rating': '4.4545454545', 'total_views': '23100'}, # {'studio': 'Emerald Films', 'title_count': '8', # 'avg_rating': '4', 'total_views': '13600'}] åçã® Valkey ã³ãã³ã: FT.AGGREGATE catalog_index "@rating:[-inf + inf]" LOAD 3 @studio @rating @views_24h GROUPBY 1 @studio REDUCE COUNT 0 AS title_count REDUCE AVG 1 @rating AS avg_rating REDUCE SUM 1 @views_24h AS total_views SORTBY 2 @total_views DESC ãã¹ããã©ã¯ãã£ã¹ éèšã¯ãšãªã®ã¬ã€ãã³ã·ãŒãšã¹ã«ãŒããããæ¹åããã«ã¯ãåãã€ãã©ã€ã³ã¹ããŒãžãééããããã¥ã¡ã³ãæ°ãæžããããã«æ©ã段éã§ãã£ã«ã¿ãªã³ã°ããŸãããããããç¯å²ãåºãã¯ãšãªã¯ããã€ãã©ã€ã³ã«å
¥ãããŒã®æ°ãå¢ããåæã¹ãã£ã³ãšåæã¹ããŒãžã®ã³ã¹ããå¢å ããŸããäŸãã°ãäžèšã®ãã¡ã»ãããã£ã«ã¿ãªã³ã°ã®äŸã§ã¯ããŠãŒã¶ãŒã®ã¢ã¯ãã£ããªãã£ã«ã¿ãŒãã¯ãšãªæååã§æž¡ãããšã§ããããããããã¥ã¡ã³ãã®ã¿ã GROUPBY ã¹ããŒãžã«å
¥ããŸãããŸãããããå€ãæºãããªãã°ã«ãŒããåé€ããããã« GROUPBY ã¹ããŒãžã®åŸã« FILTER ã远å ããããšãã§ããŸããäŸãã°ãçµæãè¿ãåã«ã¿ã€ãã«æ°ã 5 æªæºã®ãžã£ã³ã«ãé€å€ããå Žåãªã©ã§ããããã«ãäžäœã®çµæã®ã¿ãå¿
èŠãªå Žåã¯ã SORTBY ã« MAX ã远å ããããšã§ããã¬ã³ãã¢ã€ãã ã®äŸã§ç€ºãããã«ããšã³ãžã³ã¯ã¯ãŒãã³ã°ã»ããå
šäœããœãŒãããã®ã§ã¯ãªããäžäœã®çµæã®ã¿ã远跡ããŸãã LOAD ã䜿ããšãã€ã³ããã¯ã¹ã«å«ãŸããŠããªããã£ãŒã«ãã§ãã£ãŠããåºãšãªãããã·ã¥ããŒã¿ããçŽæ¥ãã£ãŒã«ããååŸããŠéçŽãã€ãã©ã€ã³ã«åã蟌ãããšãã§ããŸããäŸãã°ãããã·ã¥ã« actors ãã£ãŒã«ããä¿åããŠãããã€ã³ããã¯ã¹åããŠããªãå Žåãã¯ãšãªå®è¡æã« LOAD ã§èªã¿èŸŒã¿ãããã䜿ã£ãŠã°ã«ãŒãåããœãŒããè¡ãããšãã§ããŸãããã ãã LOAD ã¯äžèŽããããã¥ã¡ã³ãããšã«åºãšãªãããŒããçããŒã¿ãååŸããå¿
èŠããããããçµæã»ããã®ãµã€ãºã«å¿ããŠã¬ã€ãã³ã·ãŒãå¢å ããŸãããã®ãªãŒããŒããããé¿ãããããããŒããããã£ãŒã«ãã®æ°ã¯æå°éã«æããŠãã ããã ã¯ãªãŒã³ã¢ãã ãã®ãŠã©ãŒã¯ã¹ã«ãŒã®ããã« ElastiCache ã¯ã©ã¹ã¿ãŒãäœæããäžèŠã«ãªã£ãå Žåã¯ãä»åŸã®èª²éãé¿ããããã«ã次㮠AWS CLI ã³ãã³ãã䜿çšããŠã¯ã©ã¹ã¿ãŒãåé€ããŠãã ããã aws elasticache delete-replication-group --replication-group-id AnyOrganization-cache ã¯ããã« ãã®èšäºã§ã¯ãElastiCache ã®ã¢ã°ãªã²ãŒã·ã§ã³ã«ã€ããŠããã¡ã»ãããã£ã«ã¿ãªã³ã°ãã©ã€ããã¬ã³ãã®ã¬ã³ã¡ã³ããŒã·ã§ã³ããªã³ããã³ãã®ãšã³ã²ãŒãžã¡ã³ãã¬ããŒããåãäžããããããã¹ãŠãåäžã® Valkey Search ã€ã³ããã¯ã¹äžã«æ§ç¯ããæ¹æ³ã解説ããŸãããã¢ã°ãªã²ãŒã·ã§ã³ã¯ããã¹ãŠã®åçš AWS ãªãŒãžã§ã³ãAWS GovCloud (US) ãªãŒãžã§ã³ãããã³äžåœãªãŒãžã§ã³ã«ãããŠãElastiCache for Valkey ããŒãžã§ã³ 9.0 ãå®è¡ããããŒãããŒã¹ã®ã¯ã©ã¹ã¿ãŒã§è¿œå è²»çšãªãã§ãå©çšããã ããŸããValkey ã¯ãRedis ã«ä»£ããæãå¯å®¹ãªã©ã€ã»ã³ã¹ã®ãªãŒãã³ãœãŒã¹ãã€ãã³ããŒäžç«ãªéžæè¢ã§ãããElastiCache ã§æšå¥šããããšã³ãžã³ã§ãã䜿ãå§ããã«ã¯ãAWS Management ConsoleãAWS SDKããŸã㯠AWS CLI ã䜿çšããŠãValkey 9.0 以éã®æ°ããã¯ã©ã¹ã¿ãŒãäœæãããã æ¢åã®ã¯ã©ã¹ã¿ãŒãã¢ããã°ã¬ãŒã ããŠãã ããã詳现ã«ã€ããŠã¯ã ElastiCache ã®ããã¥ã¡ã³ã ãã芧ãã ããã質åããã£ãŒãããã¯ãããå Žåã¯ã AWS re:Post for ElastiCache ãã芧ãã ããã èè
ã«ã€ã㊠Chaitanya Nuthalapati Chaitanya 㯠AWS ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ãµãŒãã¹ã®ã·ãã¢ãã¯ãã«ã«ãããã¯ããããŒãžã£ãŒã§ãAmazon ElastiCache for Valkey ã«æ³šåããŠããŸãã以åã¯ãçæ AIãæ©æ¢°åŠç¿ãã°ã©ããããã¯ãŒã¯ã掻çšãããœãªã¥ãŒã·ã§ã³ãæ§ç¯ããŠããŸãããä»äºä»¥å€ã®æéã§ã¯ãChaitanya ã¯è¶£å³ãéããã®ã«å¿ãããçŸåšã¯ããã¹ãã¹ã±ãŒãããŒããããã«ããŒããæ¥œããã§ããŸãã Karthik Subbarao Karthik 㯠Amazon ElastiCache ã®ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ã§ããããªãŒãã³ãœãŒã¹ã® Valkey ãããžã§ã¯ãã«ç©æ¥µçã«è²¢ç®ããŠããŸãã忣ã·ã¹ãã ãããŒã¿ããŒã¹ãRustããããŠå
šè¬çã«ãœãããŠã§ã¢éçºïŒãã¯ãããžãŒãéããã€ãããŒã·ã§ã³ã«æ
ç±ã泚ãã§ããŸãã Allen Samuels Allen 㯠AWS ã®ããªã³ã·ãã«ãšã³ãžãã¢ã§ãã忣åã§é«æ§èœãªã·ã¹ãã ã«æ
ç±ã泚ãã§ããŸããäžçäžãæ
ããããã¥ããªã±ãŒãããªããžããã¬ã€ãããããŠããªãæã¯ãã«ãªãã©ã«ãã¢å·ãµã³ããŒã§éãããŠããŸãã Siva Subramaniam Siva 㯠AWS ã®ã·ãã¢ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã§ãæè¡ãªãŒããŒã·ãããšããŒã¿ããŒã¹ã¢ãŒããã¯ãã£ã«ãã㊠20 幎ã®çµéšãæã£ãŠããŸããã客æ§ã AWS ã®å°çšããŒã¿ããŒã¹ã䜿çšããŠç§»è¡ãšã€ãããŒã·ã§ã³ãå®çŸã§ããããæ¯æŽããŠããŸããä»äºä»¥å€ã§ã¯ãSiva ã¯ã¯ãªã±ãããèŸ²äœæ¥ããããŠåŠ»ããæçãåŠã¶ããšã楜ããã§ããŸãã ãæå°ããã ãã Ian Childress æ°ããããŠãããžã§ã¯ãå
šäœãéããŠå®è£
é¢ã§è²¢ç®ããã ãã Miles Song æ°ã«ç¹ã«æè¬ããããŸãã æ¬èšäºã¯ã Announcing aggregations on Amazon ElastiCache ã翻蚳ãããã®ã§ãã翻蚳㯠Solutions Architect ã® Hayato Tsutsumi ãæ
åœããŸããã
ã¯ããã« NTTè¥¿æ¥æ¬ã®è¿è€ã§ãã æ¬èšäºã§ã¯ãCloudflare ãæäŸãã Cloudflare OneïŒCloudflare Zero TrustïŒ ã«ãããŠã Identity ProviderïŒä»¥äžãIdPããŠãŒã¶ãŒèªèšŒãæ
ãå€éšèªèšŒåºç€ïŒãšã㊠Okta ã OpenID ConnectïŒOIDCïŒã§é£æºããæ¹æ³ ã玹ä»ããŸãã Cloudflare One ã¯ããŒããã©ã¹ãã®èãæ¹ãåæãšãããã©ãããã©ãŒã ã§ããã ãŠãŒã¶ãŒèªèšŒã Cloudflare åŽã§å®æœããã®ã§ã¯ãªãã å€éš IdP ã«ãã£ãŠèªèšŒãããçµæãããšã«ã¢ã¯ã»ã¹å¶åŸ¡ãè¡ãæ§æ ãåºæ¬ãšãªããŸãã ãã®ãããIdP 飿ºã¯ Cloudflare One ãå©çšããäžã§éèŠãªåæèšå®ã®äžã€ã§ãã ãªããæ¬èšäºã§æ±ã IdPïŒIdentity ProviderïŒ ãšã¯ã ãŠãŒã¶ãŒããæ¬äººã§ããããšãã確èªãã圹å²ãæ
ãå€éšèªèšŒåºç€ãæããŸãã IDã»ãã¹ã¯ãŒãèªèšŒã MFAïŒå€èŠçŽ èªèšŒïŒãªã©ã¯ IdP åŽã§å®æœããã Cloudflare One ã¯ãèªèšŒçµæããåãåã£ãŠã¢ã¯ã»ã¹å¯åŠã倿ããŸãã æ¬èšäºã§ã¯ã Okta åŽã§ Cloudflare One 飿ºçšã¢ããªã±ãŒã·ã§ã³ã远å ããæµã Cloudflare One åŽã§ Okta ã IdP ãšããŠèšå®ããæµã åèšå®ç»é¢ã§ãäœãããŠããã®ãããã©ã®å€ãå¿
èŠãªã®ãã ãã å®éã®ç®¡çç»é¢ã¹ã¯ãªãŒã³ã·ã§ããã«æ²¿ã£ãŠ è§£èª¬ããŸãã ãªããæ¬èšäºã§ã¯ OIDC ãçšãã飿ºæ§æ ã察象ãšãã SAML ãšã®æ©èœæ¯èŒãè©³çŽ°ãªæ¹åŒéžå®ã¯è¡ããŸããã ãããŸã§ãCloudflare One ã®ç®¡çç»é¢äžã§äœãèšå®ããŠããã®ããçè§£ãããããšãç®çãšããŠããŸãã æ¬èšäºã¯ 2026 幎 4 ææç¹ã®æ
å ± ã«åºã¥ããŠããŸãã 察象èªè
æ¬èšäºãæ³å®ãã察象èªè
ã¯ä»¥äžã®éãã§ãã Cloudflare OneïŒCloudflare Zero TrustïŒãæ€èšŒã»å°å
¥ããŠããæ¹ Okta ã IdP ãšããŠæ¢ã«å©çšããŠããããŸãã¯æ€èšããŠããæ¹ ãŒããã©ã¹ãç°å¢ã«ããã IdP 飿ºã®å
·äœçãªèšå®ã€ã¡ãŒãžãææ¡ãããæ¹ ç®æ¬¡ ã¯ãã㫠察象èªè
ç®æ¬¡ 1. èæ¯ã»ç®ç 2. Cloudflare One ã«ããã IdP 飿ºã®èãæ¹ 3. Okta åŽã®èšå® 3.1 ã¢ããªã±ãŒã·ã§ã³äžèЧã®è¡šç€º 3.2 App Integration Catalog ã®æ€çŽ¢ 3.3 Cloudflare One 飿ºã¢ããªã®è©³çŽ°è¡šç€º 3.4 Cloudflare One ã¢ããªã±ãŒã·ã§ã³ã®è¿œå 3.5 äžè¬èšå®ïŒGeneral SettingsïŒ 3.6 ãŠãŒã¶ãŒïŒã°ã«ãŒãã®å²ãåœãŠ 3.6.1 ãŠãŒã¶ãŒãžã®å²ãåœãŠ 3.7 Sign On èšå®ïŒOIDCïŒ 4. Cloudflare One åŽã®èšå® 4.1 Cloudflare One ããã·ã¥ããŒã 4.2 Identity Provider ã®äžèЧ 4.3 IdP ã®è¿œå 4.4 Okta 飿ºèšå®ç»é¢ 5. èªèšŒåäœã®ç¢ºèª 6. SSOèšå®åŸã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ 7. æè¡çãªè£è¶³ 8. ãŸãšã å·çè
åèè³æã»åºå
ž åæš å
責äºé
1. èæ¯ã»ç®ç Cloudflare One ã«ãããã¢ã¯ã»ã¹å¶åŸ¡ã¯ãããããã¯ãŒã¯ã®å
å€ãã§ã¯ãªã ãŠãŒã¶ãŒã®ã¢ã€ãã³ãã£ãã£ãèµ·ç¹ã«å¶åŸ¡ãã ããšãåæãšããŠããŸãã Cloudflare One èªäœã¯ãŠãŒã¶ãŒèªèšŒãè¡ããã å€éš IdPïŒOkta ãªã©ïŒã«ãã£ãŠèªèšŒãããçµæãããšã«ã¢ã¯ã»ã¹å¯åŠã倿ããŸãã Okta ãš Cloudflare One ã®é£æºæ¹åŒã«ã¯ OIDC ãš SAML ããããŸããã Cloudflare One ã®ç®¡çç»é¢ã§ã¯ OIDC ãããã©ã«ããšãªã£ãŠããã èšå®é
ç®ãæ¯èŒçã·ã³ãã«ã§ãã ãTipsãOIDC ãåæãšããçç± Cloudflare One ã®ç®¡çç»é¢ã¯ OIDC ãåæãšããæ§æã«ãªã£ãŠããã ãŸã㯠OIDC ã察象ã«èšå®å
容ã远ãããšã§ã åé
ç®ãã©ã®åœ¹å²ãæã£ãŠããã®ããçè§£ãããããªããŸãã æ¬èšäºã§ã¯ã OIDC ãçšãã Okta à Cloudflare One 飿º ã察象ã«ã 管çç»é¢ã§ã®èšå®å
å®¹ãæŽçããããšãç®çãšããŠããŸãã 2. Cloudflare One ã«ããã IdP 飿ºã®èãæ¹ Cloudflare Oneã«ãããèªèšŒã®åœ¹å²åæ
ã¯æ¬¡ã®éãã§ãã Cloudflare OneïŒ ã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹èŠæ±ãåãä»ããèªèšŒãèŠæ±ãã OktaïŒIdPïŒïŒ ãŠãŒã¶ãŒèªèšŒïŒIDã»ãã¹ã¯ãŒãã»MFA ãªã©ïŒã宿œãã Cloudflare OneïŒ èªèšŒçµæãåºã«ã¢ã¯ã»ã¹ããªã·ãŒãè©äŸ¡ããèš±å¯ãŸãã¯æåŠ ãã®æ§æã«ããã èªèšŒããªã·ãŒã¯ IdP åŽã«éçŽ Cloudflare åŽã¯ã¢ã¯ã»ã¹å¶åŸ¡ã«å°å¿µ ãšããççµåãªèšèšãå®çŸãããŸãã ãTipsããªãèªèšŒãšã¢ã¯ã»ã¹å¶åŸ¡ãåé¢ããã®ã IdP åŽã§ MFA ã®è¿œå ãæ¡ä»¶å€æŽãè¡ã£ãŠãã Cloudflare One åŽã®èšå®ã倿Žããã«æåãåæ ã§ããç¹ã¯ã ãŒããã©ã¹ãèšèšã«ãããéèŠãªèãæ¹ã§ãã 3. Okta åŽã®èšå® ããããã¯ãOkta 管çã³ã³ãœãŒã«ã§ã®èšå®ãé ã«ç¢ºèªããŸãã 3.1 ã¢ããªã±ãŒã·ã§ã³äžèЧã®è¡šç€º Okta 管çã³ã³ãœãŒã«ã§ Applications ãéããŸãã ãã®ç»é¢ã§ã¯ãæ¢åã®ã¢ããªã±ãŒã·ã§ã³ãšæ°èŠè¿œå ãè¡ããŸãã 3.2 App Integration Catalog ã®æ€çŽ¢ ãBrowse App Catalogããéžæããæ€çŽ¢æ¬ã« cloudflare ãšå
¥åããŸãã æ€çŽ¢çµæãã Cloudflare One ãéžæããŸãã 3.3 Cloudflare One 飿ºã¢ããªã®è©³çŽ°è¡šç€º Cloudflare One ã®ã¢ããªè©³çްç»é¢ã衚瀺ãããŸãã ããã§ã¯ã 察å¿ããŠããã·ã³ã°ã«ãµã€ã³ãªã³æ¹åŒ ã¢ããªã±ãŒã·ã§ã³ã®æŠèŠ ã確èªã§ããŸããOIDC ã«å¯Ÿå¿ããŠããããšãåãããŸãã 3.4 Cloudflare One ã¢ããªã±ãŒã·ã§ã³ã®è¿œå ãAdd IntegrationããéžæããŸãã ããã«ãããOkta ããã³ãå
ã« Cloudflare One çšã®ã¢ããªã±ãŒã·ã§ã³ãäœæãããŸãã 3.5 äžè¬èšå®ïŒGeneral SettingsïŒ ã¢ããªã±ãŒã·ã§ã³ã®åºæ¬èšå®ç»é¢ã衚瀺ãããŸãã ãã®ç»é¢ã§ã¯ã以äžãèšå®ããŸãã Application label ïŒ Okta 管çç»é¢ããŠãŒã¶ãŒç»é¢ã«è¡šç€ºãããã¢ããªå Team Domain ïŒ Cloudflare One åŽã®ããŒã ãã¡ã€ã³ ãTipsãTeam Domain ãèšå®ããæå³ Team Domain ã¯ã ããã® Okta ã¢ããªãã©ã® Cloudflare One ç°å¢åãã®èªèšŒããã Okta åŽãèå¥ããããã®æ
å ±ã§ãã å€ãäžèŽããŠããªãå ŽåãåŸç¶ã®èªèšŒãããŒãæ£ããåäœããŸããã å
¥ååŸããDoneããéžæããŸãã 3.6 ãŠãŒã¶ãŒïŒã°ã«ãŒãã®å²ãåœãŠ äœæãã Cloudflare One ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠã èªèšŒãèš±å¯ãããŠãŒã¶ãŒãã°ã«ãŒããå²ãåœãŠãŸãã ãTipsãå²ãåœãŠãå¿
èŠãªçç± Okta ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ããšã« ãã©ã®ãŠãŒã¶ãŒããµã€ã³ã€ã³å¯èœãããæç€ºçã«ç®¡çããŸãã ãŠãŒã¶ãŒãã°ã«ãŒããå²ãåœãŠãŠããªãå Žåã èšå®ãæ£ãããŠãèªèšŒã¯å€±æããŸãã 3.6.1 ãŠãŒã¶ãŒãžã®å²ãåœãŠ ãAssignãâãAssign to PeopleããéžæããŸãã 察象ãŠãŒã¶ãŒãéžæãããAssignããæŒäžããŸãã 3.7 Sign On èšå®ïŒOIDCïŒ æ¬¡ã«ããSign Onãã¿ããéããŸãã ããã§ç¢ºèªã§ãã Client ID ãš Client Secret ã¯ã åŸã»ã© Cloudflare One åŽã®èšå®ã§äœ¿çšããŸãã ãTipsãClient ID / Client Secret ã®åœ¹å² ãããã¯ãŠãŒã¶ãŒã® ID ããã¹ã¯ãŒãã§ã¯ãªãã Cloudflare One ã ãæ£èŠã«ç»é²ãããã¢ããªã±ãŒã·ã§ã³ã§ãããããšã Okta ã«ç€ºãããã®è奿
å ±ã§ãã 4. Cloudflare One åŽã®èšå® ç¶ããŠãCloudflare One åŽã®èšå®ãè¡ããŸãã 4.1 Cloudflare One ããã·ã¥ããŒã Cloudflare ããã·ã¥ããŒããã Cloudflare One ãéããŸãã 4.2 Identity Provider ã®äžèЧ å·Šã¡ãã¥ãŒãã以äžãéžæããŸãã Integrations Identity providers åæç¶æ
ã§ã¯ãOne-time PIN ã®ã¿ã衚瀺ãããŠããå ŽåããããŸãã 4.3 IdP ã®è¿œå ãAdd an identity providerããéžæããŸãã IdP ã®äžèЧãã Okta ãéžæããŸãã 4.4 Okta 飿ºèšå®ç»é¢ Okta ã®èšå®ç»é¢ã衚瀺ãããŸãã ããã°æ²èŒçšã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯å
¥åå€ãé»å¡ãããŠããŸãã ããã§ã¯åé
ç®ã®æå³ãæŽçããŸãã é
ç® å
容 Name Cloudflare One ã®ãã°ã€ã³ç»é¢ã«è¡šç€ºããã IdP å App ID Okta åŽã§çºè¡ããã Client ID Client secret Okta åŽã§çºè¡ããã Client Secret Okta account URL Okta ããã³ãã® URL ãTipsãOkta account URL ã«ã€ã㊠ãã® URL ã¯ã Cloudflare One ãèªèšŒãªã¯ãšã¹ããéä¿¡ããå
ã® Okta ããã³ããèå¥ããããã®æ
å ±ã§ãã æ¬çªã»æ€èšŒç°å¢ã䜿ãåããŠããå Žåã¯ç¹ã«æ³šæãå¿
èŠã§ãã 5. èªèšŒåäœã®ç¢ºèª èšå®åŸãCloudflare One ã®ãã¹ãç»é¢ãéããŸãã ãYour connection works!ããšè¡šç€ºãããŠããã°ã Okta ãš Cloudflare One ã® OIDC 飿ºã¯æ£åžžã«åäœããŠããŸãã ãTipsããã®ç»é¢ã瀺ããŠããããš Cloudflare One ã Okta ãã ãŠãŒã¶ãŒæ
å ±ã OIDCïŒJWTïŒãšã㊠æ£ããååŸã§ããŠããããšã瀺ããŠããŸãã 6. SSOèšå®åŸã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ SSOã®èšå®ãå®äºããåŸãå®éã«ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãžã¢ã¯ã»ã¹ããéã®ãã°ã€ã³ãããŒã¯ä»¥äžã®ããã«ãªããŸãã 1 Cloudflare Oneã®ãã°ã€ã³ç»é¢ ãŠãŒã¶ãŒãCloudflare Oneã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹(ä»åã¯WARPã«ã¢ã¯ã»ã¹)ãããšãèªèšŒç»é¢ã衚瀺ãããŸããããã§èšå®ããIdPïŒOktaïŒã§ã®ãã°ã€ã³ãéžæãããã¿ã³ãã¯ãªãã¯ããŸãã 2 Oktaãžãªãã€ã¬ã¯ããšèªèšŒå®æœ ãã¿ã³ãã¯ãªãã¯ãããšãOktaã®ãã°ã€ã³ç»é¢ã«èªåçã«ãªãã€ã¬ã¯ããããŸãããŠãŒã¶ãŒã¯ããã§Oktaã®IDã»ãã¹ã¯ãŒãã®å
¥åããMFAïŒå€èŠçŽ èªèšŒïŒãªã©ã®èªèšŒããã»ã¹ã宿œããŸãã 3 RPåŽã«æ»ãããŠãã°ã€ã³å®äº Oktaã§ã®èªèšŒãæåãããšãåã³Cloudflare OneåŽã«ãªãã€ã¬ã¯ããããŸããèªèšŒæ
å ±ãæ£ããè©äŸ¡ãããç®çã®ã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹ãå¯èœã«ãªããŸãã 7. æè¡çãªè£è¶³ æ¬æ§æã¯ RP Initiated OIDC ã®ãããŒãæ¡çšããŠããŸãã èªèšŒã®éå§ç¹ã¯ Cloudflare One Okta ãèªèšŒçµæã JWT ãšããŠè¿åŽ Cloudflare Oneãã¢ã¯ã»ã¹ããªã·ãŒãè©äŸ¡ ãTipsããŒããã©ã¹ãèšèšäžã®å©ç¹ IdP åŽã®èªèšŒããªã·ãŒã倿ŽããŠãã Cloudflare One åŽã®èšå®ã倿Žããã«åæ ã§ããç¹ã¯ã ãŒããã©ã¹ãæ§æã«ããã倧ããªã¡ãªããã§ãã 8. ãŸãšã æ¬èšäºã§ã¯ãCloudflare One ã«ãã㊠IdP ãšã㊠Okta ã OIDC ã§é£æºããèšå®å
容 ãã å®éã®ç®¡çç»é¢ã¹ã¯ãªãŒã³ã·ã§ããã«æ²¿ã£ãŠç޹ä»ããŸããã Cloudflare One å°å
¥æã® IdP èšå®ãæ€èšããéã® åèæ
å ±ãšããŠæŽ»çšããã ããã°å¹žãã§ãã å·çè
è¿è€ é倪 ïŒNTTè¥¿æ¥æ¬ ãšã³ã¿ãŒãã©ã€ãºããžãã¹å¶æ¥éš NïŒSéšé NïŒSæšé²æ
åœïŒçŠå²¡ïŒïŒ ä¹å·ã»æ²çžãšãªã¢ã®ã¯ã©ãŠãã»ã»ãã¥ãªãã£æ¡ä»¶æšé²ã«æºãã£ãŠããŸãã AWS Community Builder (AI Engineering) 2025 Japan AWS Top Engineers (Services) 2024 Japan AWS Jr. Champions åèè³æã»åºå
ž Cloudflare One ããã¥ã¡ã³ã https://developers.cloudflare.com/cloudflare-one/ Okta OpenID Connect æŠèŠ https://developer.okta.com/docs/concepts/oauth-openid/ åæš ãCloudflareããCloudflare Oneãã¯ãCloudflare, Inc. ã®åæšãŸãã¯ç»é²åæšã§ãã ãOktaãã¯ãOkta, Inc. ã®åæšãŸãã¯ç»é²åæšã§ãã å
責äºé
æ¬èšäºã¯æ
å ±æäŸãç®çãšãããã®ã§ããã èšèŒå
å®¹ã®æ£ç¢ºæ§ãå®å
šæ§ãå°æ¥çãªåäœãä¿èšŒãããã®ã§ã¯ãããŸããã
























