ã¯ãããŸããŠã2026幎床æ°åãšããŠå
¥ç€Ÿãããã®å€ããITãã£ããããã¡ã³ã1éš éçºããŒã éçº2課ã«é
å±ãããŸãF.Tã§ãã 4æã«å
¥ç€ŸããŠããçŽ4ãæéãã¿ã£ã¡ããšç ä¿®ãåããŠããŸãããæ¯ãè¿ããšæ¬åœã«ãã£ãšããéã§ãããã§ããŠæ¿å¯ãªæéã§ããã ããã§ãã®èšäºã§ã¯ãåè¬ããæ°åã®äžäººãšããŠããã®4ãæã§äœãçµéšããäœãåŸãã®ããççŽã«ãäŒãããŸãã ç ä¿®ã®é°å²æ°ãå°ãã§ãäŒããã°å¹žãã§ãã ç ä¿®å
šäœã®æµã ç ä¿®ã¯å€§ããæ¬¡ã®ã¹ãããã§é²ãã§ãããŸããã ææ ç ä¿®å
容 ïœ4æäžæ¬ 人äºç ä¿®ã»ããžæŠç ä¿® ïœ5ææ« IT/Webç ä¿® ïœ6æäžæ¬ ããžæŠç ä¿® ïœ6æäžæ¬ è·çš®å¥ç ä¿® 6æäžæ¬ïœ7ææ« éçºæŒç¿ïŒ4ã¹ããªã³ãïŒææçºè¡šäŒïŒ â»ããžæŠÂ : ããžã¿ã«ãã¯ãããžãŒæŠç¥æ¬éš 人äºç ä¿®ã»ããžæŠç ä¿® æåã«åããã®ã¯ãè·çš®ãåããæ°åå
±éã®äººäºç ä¿®ã»ããžæŠç ä¿®ã§ãã 人äºç ä¿® 人äºç ä¿®ã§ã¯ãããžãã¹ãããŒãããžãã¹ãã€ã³ããææžäœæã®åºæ¬ãªã©ã瀟äŒäººãšããŠåœç¶èº«ã«ã€ããŠããã¹ãããšãåŠã³ãŸãããã°ã«ãŒãã¯ãŒã¯ãå€ããå
¥ç€ŸãããŠã§ç·åŒµããŠããŸããããåæãšè©±ããã¡ã«èªç¶ãšæã¡è§£ããŠãã£ãã®ãèŠããŠããŸãã ãªãã§ããçžè«ãªã©ã®æéãåã£ãŠããããããšãã«äœ¿çšããããæéããããã§ããããããšããã¯ãã·ã§ã³èšèã¯ä»ãšãªã£ãŠã¯èªç¶ãšå£ããåºãã»ã©èº«ã«ä»ããŸããã ããžæŠç ä¿® ç¶ãããžæŠç ä¿®ã§ã¯ãè¬çŸ©ãããã«ãã£ã¹ã«ãã·ã§ã³ã座è«äŒãªã©ãéããŠããžæŠã®çµç¹æ§é ãåè·çš®ã«ã€ããŠèª¬æãåããçµç¹ãšæ¥åãžã®çè§£ãæ·±ããŸããã ãŸããçžæã«äŒããã¹ã©ã€ããäœæããããã®ãã¶ã€ã³ç ä¿®ãã顧客ã®ããŒãºãæããŠäŸ¡å€ãå±ããããŒã±ãã£ã³ã°ã®ç ä¿®ãéããŠãå®è·µçãªç¥èãèãæ¹ãåŠã³ãŸããã ããã«ãæ¥ã
売äžãçã¿åºããŠããå¶æ¥ç€Ÿå¡ããåè«ã«ãããŠäœãèããã©ã®ããã«ã客ããŸãšåãåã£ãŠããã®ããåŠã¶æ©äŒããããŸãããå®éã®åè«åç»ãèŠèŽããã»ããå¶æ¥ç€Ÿå¡ãšã®åº§è«äŒãéå¬ããŠããã ããå¶æ¥ãšããä»äºãžã®çè§£ãæ·±ããããšãã§ããŸããã ããžæŠç ä¿®ã®äžã§ç¹ã«å°è±¡ã«æ®ã£ãŠããã®ãããã«ãã£ã¹ã«ãã·ã§ã³ãš2幎ç®ç€Ÿå¡ãšã®åº§è«äŒã§ãããããã®ç ä¿®ãéããŠãé
å±åŸã«èªåãã©ããªä»äºãããã®ããã®è§£å床ããã£ãšäžãããŸããã ãŸããæ¥åå
容ã ãã§ãªãç§ãã¡æ°åãžã®ã¡ãã»ãŒãžãããããããã ããŸããã ãªãã§ãããã©ããªä»äºãäŒãããªããšæå³ããªãããšããã¡ãã»ãŒãžã¯ãšã³ãžãã¢è·ã®ç§ã«ã¯åŒ·ãå°è±¡ã«æ®ããŸããã ã©ããªã«ããããã³ãŒããæžãããšããããæ©èœãå®è£
ããããšäœ¿ã人ã«ãšã£ãŠã®äœ¿ãæ¹ãã¡ãªãããäŒãããªããšæå³ããããŸããã çæAIãæ®åãã¢ãŠãããããç°¡åã«åŸãããæä»£ã«ãäŒãããšããä»äºã¯ããäžå±€å€§åã«ãªã£ãŠãããšæããŸããã IT/Webç ä¿® ããããã¯ãšã³ãžãã¢ãšããŠã®åå°ã¥ããã§ãããšèšãã€ã€ããããžæŠã§ã¯ãšã³ãžãã¢è·ã§ãããã«é¢ãããå
šå¡ããã®ç ä¿®ãåè¬ããŸããå
šç€Ÿæšªæã®ITéšéãšããç¹åŸŽã衚ããç ä¿®ã ãšããé¢šã«æããŠããŸãã ç ä¿®ã§ã¯ãã»ãã¥ãªãã£ãããŒã¿ããŒã¹ããããã¯ãŒã¯ãšãã£ãåºç€ç¥èãããPythonãSQLãHTML/CSSãJavaScriptããããŠããã¯ãšã³ãéçºïŒPython / DjangoïŒãŸã§ãå¹
åºãåŠã³ãŸããã ãã®ç ä¿®ã®ç¹åŸŽã¯ããŸã£ããã®åå¿è
ããããšããããšã ãšæããŸããçµéšè
ã¯åå¿è
ã®æ¹ã«æããäžã§èªåã®ç解床ãåèªèã埩ç¿ãããšããå
æ¯ãåšå²ã§ããããèŠãããŸãããäžæ¹åå¿è
ã®æ¹ã¯ãã¯ãããŠè§ŠããæŠå¿µã«èŠæŠãã€ã€ãããããªãããšã¯åšå²ã«è³ªåãããããŸããã¹ããŒãã§ç¥èã身ã«ä»ããŠããå§¿ãå°è±¡çã§ããã è·çš®å¥ç ä¿® è·çš®å¥ç ä¿®ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã»ããŒã¿ãµã€ãšã³ãã£ã¹ãã»ããŒã±ã¿ãŒã»ã¬ããã³ã¹ã®5è·çš®ã«åããã5æ¥éã®ç ä¿®ãåããŸããã ç§ãåãããšã³ãžãã¢è·ç ä¿®ã§ã¯ããŠã©ãŒã¿ãŒãã©ãŒã«éçºãèŠä»¶å®çŸ©ããç·åãã¹ããŸã§äžéãäœéšããŸãããã¯ã©ã¹ããªããžã§ã¯ãã®æŠå¿µãUMLã®äœæã«ã¯èŠæŠããå Žé¢ããããŸããããããŒã ã§ååãäžé£ã®ææç©ãäœãäžããããšãã§ãããšãã¯éææããããŸããã çæéã§äžæµããäžæµãŸã§é§ãæããã®ã¯å€§å€ã§ããããéçºå
šäœã®æµããèã§çè§£ã§ãã貎éãªæ©äŒã§ããã éçºæŒç¿ ãããŠãç ä¿®ã®æåŸã¯çŽ1ãæã«ãããéçºæŒç¿ãè¡ããŸãããéçºæŒç¿ã§ã¯ããã€ãã転è·ã»ãã€ããã¯ãªããã¯ããã®2ã€ã®ãµãŒãã¹ã§å2ããŒã ã®èš4ããŒã ã«åããéçºãè¡ããŸããã ã©ã®ããŒã ã«ãåçã«åè·çš®ã®ã¡ã³ããŒãå²ãæ¯ããåè·çš®ã®åŒ·ã¿ãçºæ®ããååããªããããŒã éçºãé²ããŸããã ãŸããä»å¹ŽåºŠã¯ããžæŠå
茩瀟å¡ã®ãã£ãŒãããã¯ã«å ããåãµãŒãã¹ãéå¶ããäºæ¥éšã®æ¹ã
ããã宿çã«ãã£ãŒãããã¯ãããã ãæ©äŒãçšæããŠããã ããŸããã åããŒã ããã£ãŒãããã¯ã®æ©äŒãæå¹ã«æŽ»çšããæçµææçºè¡šæã«ã¯åæã®ãã®ãšæ¯ã¹ç©ã«ãªããªããµãŒãã¹ãéçºããŠããŸããã ãªããéçºæŒç¿ã®å
·äœçãªåãçµã¿å
容ã«ã€ããŠã¯ã ãã¡ãã®èšäº ã§è©³ããã玹ä»ããŠããŸãã æ¯ãè¿ã çŽ4ãæã®ç ä¿®ãéããŠç§ãåŸããã®ã¯ã倧ãã3ã€ãããŸãã 1ã€ç®ã¯ç§ã¯äŒããã§ã¯ãªããäŒãã£ããšçžæã«èšã£ãŠãããããšã®å€§åãã2ã€ç®ã¯ãšã³ãžãã¢ãšããŠã®åºç€ç¥èããããŠæåŸãããŒã ã§éçºãããæããçµéšã§ãã ç¹ã«éçºæŒç¿ã§ã¯ãæè¡åã ãã§ãªããããŒã ã§è°è«ãããã£ãŒãããã¯ãåãæ¢ããæ¬¡ã«æŽ»ãããšããäžé£ã®æµããå®äœéšãããšã«èŠããããšãã§ããŸãããåæãšã®ä»²ããã£ãšæ·±ãŸããé
å±åŸãçžè«ãåããå¿åŒ·ã仲éãã§ããããšã¯ãäœãã倧ããªè²¡ç£ã§ãã ããã§ãäŒãããã®ã¯ãããŸã§ç§èªèº«ã®èŠç¹ã§ãããæ°åäžäººã²ãšããããããç°ãªãåŠã³ãåŸãŠããŸããé
å±åŸã¯ç ä¿®ã§åŸãåŠã³ãçãããäžæ¥ã§ãæ©ãäžäººåã«ãªãããã粟é²ããŸãã æåŸã«ãæ°åç ä¿®ã«é¢ãã£ãŠãã ãã£ãçããŸãç ä¿®æ
åœã®æ¹ã
ããããŠäºæ¥éšã»å
茩瀟å¡ã®çããŸã«ãå¿ãã埡瀌ç³ãäžããŸããç ä¿®ã§åŸããã¹ãŠãç³§ã«ãé
å±åŸãææŠãç¶ããŠãããŸãã
æ¬èšäºã¯ 2026 幎 7 æ 20 æ¥ ã«å
¬éãããã Connection pooling strategies in Amazon Aurora DSQL ãã翻蚳ãããã®ã§ãã æ¬èšäºã§ã¯ãAurora DSQL ã®æ¥ç¶è² è·ãæžããã1 ç§ããã 100 æ¥ç¶ã®ã¬ãŒãå¶éãè¶
ããã忥ç¶ãäžæã«éäžãã thundering herd ãé¿ããããã®ãå
·äœç㪠4 ã€ã®æŠç¥ã解説ããŸããèªã¿çµããé ã«ã¯ãå€§èŠæš¡ã§ãå®å®ããæ§èœãçºæ®ããæ¥ç¶ããŒã«ãæ§æããããã®ãæ¬çªéçšã«äœ¿ãããã§ãã¯ãªã¹ããæã«å
¥ããŸãã æ¥ç¶ããŒãªã³ã°ã®æŠç¥æ¬¡ç¬¬ã§ã Amazon Aurora DSQL ã¢ããªã±ãŒã·ã§ã³ãå®å®ããŠã¹ã±ãŒã«ããããè² è·ã§ç Žç¶»ããããæ±ºãŸããŸããAmazon Aurora DSQL ç¬èªã®ã¢ãŒããã¯ãã£ã¯ãæ¥ç¶ããŒãªã³ã°ã®å¹æãããã«å€§ããããŸãããã©ã³ã¶ã¯ã·ã§ã³åäœã®å€éåãš AWS Identity and Access Management (IAM) ã«ããèªèšŒã«ãããAurora DSQL ã§ã¯é©åãªããŒãªã³ã°æŠç¥ããåŸæ¥ã® PostgreSQL ã®æ¥ç¶ç®¡çã§ã¯å®çŸã§ããªãåœ¢ã§æ§èœãé«ããŸãã æ³š: æ¬èšäºã¯ãPostgreSQL ã®æ¥ç¶ç®¡çã®æŠå¿µãšåºæ¬ç㪠IAM èªèšŒãçè§£ããŠããããšãåæãšããŠããŸããAmazon Aurora DSQL ãåããŠäœ¿ãå Žåã¯ããããã®æŠç¥ãé©çšããåã«ããŸã Getting Started ã¬ã€ã ããå§ããŠãã ããã ãµãŒããŒã¬ã¹ç°å¢ã§ã®æ¥ç¶ããŒãªã³ã° Amazon Aurora DSQL ã¯éçšã®è€éããèªåçã«åŠçããŸãããããã§ãæ¥ç¶ããŒãªã³ã°ã¯æ¬ ãããŸãããæ°ããæ¥ç¶ã®ãã³ã«ãã³ã¹ãã®é«ã TLS ãã³ãã·ã§ã€ã¯ãšèªèšŒæ
å ±ã®äº€æãçºçããŸããããŒãªã³ã°ã¯ç¢ºç«æžã¿ã®æ¥ç¶ãåå©çšãããã®è² è·ãæããŠã¬ã€ãã³ã·ãŒãåæžããŸãããŸãããã©ãã£ãã¯ãæ¥å¢ãããšã1 ç§ããã 100 æ¥ç¶ (ããŒã¹ãæ 1,000) ã®ã¬ãŒãå¶éã«éããããšããããæ¢åã®æ¥ç¶ãåå©çšããã°ãµãŒãã¹ã®å¶éå
ã«å®å
šã«åãŸããŸããããã«ãAmazon Aurora DSQL ã«ã¯æ¥ç¶ã®æå€§æå¹æéããããã¯ã©ã€ã¢ã³ã㯠1 æéã§åæãããŸããé©åã«æ§æããããŒã«ã¯ãã®å¶éã«éããåã«æ¥ç¶ããªãµã€ã¯ã«ããã»ãã·ã§ã³ãééçã«ç¶æããŸãã ãã©ã³ã¶ã¯ã·ã§ã³åäœã®ããŒãªã³ã°: ã¢ãŒããã¯ãã£ã«çµã¿èŸŒã¿æžã¿ Amazon Aurora DSQL ã¯ãã©ã³ã¶ã¯ã·ã§ã³ããŒãªã³ã°ã¢ãã«ãæ¡çšããŠããŸããæ¥ç¶ã Query Processor ã«å²ãåœãŠãã®ã¯ãã»ãã·ã§ã³å
šäœã§ã¯ãªããã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡äžã ãã§ããæšæºç㪠PostgreSQL ã§ã¯ãæ¥ç¶ã¯ããã¯ãšã³ãã®ãµãŒããŒããã»ã¹ãš 1:1 ã®ã»ãã·ã§ã³é¢ä¿ãæç¶çã«ç¶æããŸããäžæ¹ Amazon Aurora DSQL ã¯ãã®å¯Ÿå¿é¢ä¿ãåãé¢ããããå°æ°ã® Query Processor ã§ã¯ããã«å€ãã®æ¥ç¶ãåŠçã§ããŸãã ãã®èšèšã¯ãæ¥ç¶ã®äœ¿çšçãäœãããšãã€ãŸãã»ãšãã©ã®æ¥ç¶ã倧åã®æéã¢ã€ãã«ç¶æ
ã§ããããšãåæãšããŠããŸãã䜿çšçãäœãã»ã©ãæ¥ç¶ããŒã«ã«å¿
èŠãª Query Processor ã¯å°ãªããŠæžã¿ãŸãããã®ãããPgBouncer ã pgpool-II ã®ãããªããŒã¿ããŒã¹åŽã®ãããã·ã¯äœ¿ãã¹ãã§ã¯ãããŸããããã©ã³ã¶ã¯ã·ã§ã³åäœã®æ¥ç¶å€éåãããã©ã«ãã§çµã¿èŸŒãŸããŠããããããããã®ããŒã«ã¯ãµãŒãã¹ã®æ¥ç¶ã¢ãŒããã¯ãã£ãšéè€ããŸãã ããã«ãäžéšã® PostgreSQL æ©èœã¯ãµããŒããããŠããŸãããSQL ã¬ãã«ã® PREPARE/DEALLOCATE ã¹ããŒãã¡ã³ã (ãã ãæ¡åŒµã¯ãšãªãããã³ã«çµç±ã®ããªãã¢ãã¹ããŒãã¡ã³ãã¯æ£åžžã«åäœããŸã)ãWITH HOLD ã«ãŒãœã«ãã»ãã·ã§ã³ã¬ãã«ã®ã¢ããã€ã¶ãªãŒããã¯ã§ãã Amazon Aurora DSQL ã® 4 ã€ã®æ¥ç¶ããŒãªã³ã°æŠç¥ 以äžã® 4 ã€ã®æŠç¥ã¯ããããã Amazon Aurora DSQL ã®æ¥ç¶ç®¡çã®ç¹å®ã®åŽé¢ã«å¯Ÿå¿ããŸããçµã¿åãããŠé©çšããã°ãã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ã®å¶éå
ã«åãŸããè² è·ãããã£ãŠãå®å®ããæ§èœãä¿ãŠãŸããæ°ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå Žåã¯æŠç¥ 1 ããå§ããæ¢åã® PostgreSQL ã¢ããªã±ãŒã·ã§ã³ãç§»è¡ããå Žåã¯ãã§ãã¯ãªã¹ããšããŠæŽ»çšããŠãã ããã æŠç¥ 1: å
¬åŒã® AWS ã³ãã¯ã¿ã䜿ã å
¬åŒã® Amazon Aurora DSQL ã³ãã¯ã¿ ã®å©çšããå§ãããŸããããŒã¯ã³ã®çæãæå¹æéã® 80% ã§ã®ãã£ãã·ã¥ãééçãªæŽæ°ãªã©ãIAM ããŒã¯ã³ã®ã©ã€ããµã€ã¯ã«å
šäœãèªåçã«åŠçããŸãã 衚 1: ããã°ã©ãã³ã°èšèªå¥ã®æšå¥šæ¥ç¶ããŒã«ã©ã€ãã©ãªãšäž»èŠãªèšå®ãã©ã¡ãŒã¿ èšèª ããŒãªã³ã°ã©ã€ãã©ãª äž»èŠãªèšå® Java HikariCP maximumPoolSize Python psycopg ConnectionPool min_size Node.js node-postgres (pg.Pool) max Go pgxpool MaxConns Java (HikariCP) â Spring BootãQuarkusãMicronaut ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ HikariCP ã䜿ããŸãã HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:postgresql://<cluster-endpoint>:5432/<db>?ssl=true&sslmode=verify-full&sslrootcert=<path>"); config.setMaximumPoolSize(20); config.setMaxLifetime(55 * 60 * 1000); // 55 minutes config.setIdleTimeout(10 * 60 * 1000); // 10 minutes config.setConnectionTimeout(30 * 1000); // 30 seconds config.setKeepaliveTime(5 * 60 * 1000); // 5 minutes HikariDataSource ds = new HikariDataSource(config); Python (psycopg ConnectionPool) â DjangoãFlaskãFastAPI ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ psycopg ConnectionPool ã䜿ããŸãã from psycopg_pool import ConnectionPool pool = ConnectionPool( conninfo="host=<endpoint> dbname=<db> sslmode=verify-full", min_size=2, max_size=20, max_lifetime=55 * 60, # 55 minutes in seconds max_idle=10 * 60, # 10 minutes idle timeout reconnect_timeout=30, # 30 seconds to reconnect ) Node.js (node-postgres) â Express.jsãNestJSããµãŒããŒã¬ã¹ã® Node.js 颿°ã§ã¯ node-postgres ã® Pool ã䜿ããŸãã const { Pool } = require("pg"); const pool = new Pool({ host: "<cluster-endpoint>", database: "<db>", ssl: { rejectUnauthorized: true }, max: 20, idleTimeoutMillis: 10 * 60 * 1000, // 10 minutes connectionTimeoutMillis: 30 * 1000, // 30 seconds }); Go (pgxpool) â GinãEchoãAWS Lambda Go ã©ã³ã¿ã€ã ã§æ§ç¯ãã Go ã¢ããªã±ãŒã·ã§ã³ã§ã¯ pgxpool ã䜿ããŸãã connStr := "host=<cluster-endpoint> dbname=<db> sslmode=verify-full" config, _ := pgxpool.ParseConfig(connStr) config.MaxConns = 20 config.MinConns = 2 config.MaxConnLifetime = 55 * time.Minute // 55 minutes config.MaxConnIdleTime = 10 * time.Minute // 10 minutes idle pool, _ := pgxpool.NewWithConfig(ctx, config) AWS Lambda: ããŒã«ã¯ãã³ãã©ãŒã®å€ã§ã€ã³ã¹ã¿ã³ã¹åãã AWS Lambda 㯠Aurora DSQL ã®ã¯ãŒã¯ããŒãã§ãã䜿ãããã³ã³ãã¥ãŒãã£ã³ã°ãµãŒãã¹ã§ããLambda ã®å®è¡ã¢ãã«ã«ã¯ç¹æã®ããŒãªã³ã°ãã¿ãŒã³ãå¿
èŠã§ããæ¥ç¶ããŒã«ãã¢ãžã¥ãŒã«ã¹ã³ãŒã (ãã³ãã©ãŒé¢æ°ã®å€) ã§äœæããåãå®è¡ç°å¢ã®ãŠã©ãŒã åŒã³åºãéã§ä¿æãããããã«ããŸãã Lambda ãå®è¡ç°å¢ãåå©çšãããšãã¢ãžã¥ãŒã«ã¹ã³ãŒãã§äœæããããŒã«ã¯ã¢ã¯ãã£ããªãŸãŸæ®ããŸãã以éã®åŒã³åºãã§ã¯ TLS ãã³ãã·ã§ã€ã¯ãš IAM ããŒã¯ã³ã®äº€æãå®å
šã«ã¹ãããã§ããŸããã³ãŒã«ãã¹ã¿ãŒãæã«ã¯ããŒã«ãäžåºŠã ãåæåããããã®ç°å¢ãåç¶ããéã¯åå©çšãããŸãã åæã«å®è¡ãããå Lambda åŒã³åºãã¯ããããç¬ç«ããå®è¡ç°å¢ã§åããããããŒã«ãåå¥ã«æã¡ãŸãã倿°ã®åæå®è¡ã«ããã£ãŠæ¥ç¶ãéå°ã«ç¢ºä¿ããªããããããŒã«ãµã€ãºã¯å°ãã (Lambda ã€ã³ã¹ã¿ã³ã¹ããã 1ã3 æ¥ç¶) ä¿ã£ãŠãã ããã Lambda ã®äž»ãªã¬ã€ãã©ã€ã³: ããŒã«ã¯ãã³ãã©ãŒã®å€ã§ã€ã³ã¹ã¿ã³ã¹åããããããæãéèŠãªã«ãŒã«ã§ãã æå€§ããŒã«ãµã€ãºã 1ã3 ã«èšå®ãããå Lambda ã€ã³ã¹ã¿ã³ã¹ã¯ (ãããã¡åŒã³åºãã䜿ããªãéã) äžåºŠã« 1 ãªã¯ãšã¹ãããåŠçããªãããã倧ããªããŒã«ã¯ç¡é§ã«ãªããŸãã ã¢ã€ãã«ã¿ã€ã ã¢ãŠããèšå®ããªããæ¥ç¶ã¯å®è¡ç°å¢ãåç¶ããéãã£ãšç¶æãããŸãã Lambda 以å€ã®ã¯ãŒã¯ããŒããšåæ§ã«ã1 æéã®ããŒãå¶éã«éããªããããæå€§æå¹æéã 55 åã«ããŠãžãã¿ãŒãå ããã ã³ãŒã«ãã¹ã¿ãŒãã®ã¬ã€ãã³ã·ãŒãèæ
®ãããæåã®åŒã³åºãã§ã¯ TLS ãš IAM èªèšŒã®è² è·ãçºçããŸãã以éã®ãŠã©ãŒã åŒã³åºãã§ã¯ããŒã«ãããæ¥ç¶ãåå©çšããŸãã Python (psycopg ConnectionPool) â Lambda # pool is created ONCE at module scope, reused across warm invocations from psycopg_pool import ConnectionPool import boto3 pool = ConnectionPool( conninfo="host=<cluster-endpoint> dbname=<db> sslmode=verify-full", min_size=1, max_size=2, max_lifetime=55 * 60, # 55 minutes reconnect_timeout=30, ) def handler(event, context): """Lambda handler â pool is already initialized.""" with pool.connection() as conn: result = conn.execute("SELECT * FROM orders WHERE id = %s", [event["order_id"]]) return result.fetchone() Node.js (node-postgres) â Lambda // Pool is created ONCE at module scope, reused across warm invocations const { Pool } = require("pg"); const pool = new Pool({ host: "<cluster-endpoint>", database: "<db>", ssl: { rejectUnauthorized: true }, max: 2, // small pool per Lambda instance idleTimeoutMillis: 0, // don't close idle connections connectionTimeoutMillis: 30 * 1000, // 30 seconds }); exports.handler = async (event) => { // Pool is already warm on subsequent invocations const client = await pool.connect(); try { const result = await client.query("SELECT * FROM orders WHERE id = $1", [event.orderId]); return result.rows[0]; } finally { client.release(); } }; Go (pgxpool) â Lambda package main import ( "context" "time" "github.com/aws/aws-lambda-go/lambda" "github.com/jackc/pgx/v5/pgxpool" ) // Pool created at package scope â initialized once per execution environment var pool *pgxpool.Pool func init() { connStr := "host=<cluster-endpoint> dbname=<db> sslmode=verify-full" config, _ := pgxpool.ParseConfig(connStr) config.MaxConns = 2 config.MinConns = 1 config.MaxConnLifetime = 55 * time.Minute config.MaxConnLifetimeJitter = 5 * time.Minute pool, _ = pgxpool.NewWithConfig(context.Background(), config) } func handler(ctx context.Context, event map[string]string) (string, error) { row := pool.QueryRow(ctx, "SELECT name FROM orders WHERE id = $1", event["order_id"]) var name string err := row.Scan(&name) return name, err } func main() { lambda.Start(handler) } ãã³ã: Lambda 颿°ã®åæå®è¡æ°ãå€ãå Žå (æ°çŸã®åæå®è¡)ãåå®è¡ç°å¢ãããããããŒã«ãäœæããŸããæå€§ããŒã«ãµã€ãº 2 ã§ 500 ã® Lambda ãåæå®è¡ããããšãAurora DSQL ãžã®æ¥ç¶ã¯æå€§ 1,000 ã«ãªãåŸãŸããæ¥ç¶ã®ç·æ°ãç£èŠããã¯ã©ã¹ã¿ãŒããã 10,000 åææ¥ç¶ã®ã¯ã©ãŒã¿å
ã«åããŠãã ããã éèŠ: ã¯ã©ã€ã¢ã³ãæ¥ç¶ã«ã¯ sslmode=verify-full ãèšå®ããèšŒææžãå®å
šã«æ€èšŒããŠçµè·¯äžã®æ»æ (on-path attack) ãé²ããŸããAurora DSQL 㯠verify-ca ã require ãšãã£ã匱ãã¢ãŒãã§ãæ¥ç¶ãåãä»ããŸããããããã¯ãµãŒããŒã®æ£åœæ§ãæ€èšŒããŸããã å®å®ããæ¥ç¶ããŒã«ãç¶æããã«ã¯ãIAM ããŒã¯ã³ã®ã©ã€ããµã€ã¯ã«ã®çè§£ãéèŠã§ãã æ°ããæ¥ç¶ããšã«ãæ°ãã IAM èªèšŒããŒã¯ã³ãçæããŸããããŒã¯ã³ã®çæã¯ããŒã«ã«ã§ã®çœ²åæäœã§ãè² è·ã¯ãããããã§ããå
¬åŒã® AWS ã³ãã¯ã¿ã¯ãããèªåçã«åŠçããŸããç¬èªã®ããŒã«ã䜿ãå Žåã¯ãããŒã¯ã³ãæåã§ãã£ãã·ã¥ããã®ã§ã¯ãªããæ¥ç¶ãã¡ã¯ããªã® beforeConnect ããã¯ã§ generate-db-connect-auth-token ã³ãã³ããåŒã³åºããŠãã ããã ããŒã¯ã³ã¯ãåºãšãªã IAM èªèšŒæ
å ±ããé·ãã¯æå¹ã«ãªããŸããã1 æéã®ã»ãã·ã§ã³ã§ããŒã«ãåŒãåããå Žåã --expires-in ã®å€ã«é¢ä¿ãªããããŒã¯ã³ã¯æå€§ã§ã 1 æéã§å€±å¹ããŸãã ããŒã¿ããŒã¹ããŒã«ã¯æå°æš©éã«çµãã IAM èªèšŒã¯èª°ãæ¥ç¶ã§ããããå¶åŸ¡ããŸãããæ¥ç¶åŸã«ãã®ã»ãã·ã§ã³ãäœãã§ãããã¯å¶éããŸãããåã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ããŒã¹ããŒã«ã«ã¯ãå¿
èŠãªæå°éã®æš©éã ããä»äžããŸããããšãã°ãèªã¿åãå°çšã®ãµãŒãã¹ã«ã¯ SELECT ãä»äžããæžã蟌ã¿ã¢ã¯ã»ã¹ã¯ç¹å®ã®ã¹ããŒããããŒãã«ã«éå®ããŸããã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ããŒã«ã§ç®¡çè
ããŒã«ã䜿ãã®ã¯é¿ããŠãã ããã æé ã®è©³çްã¯ã Authorizing database roles to use SQL in your database ãåç
§ããŠãã ããã æŠç¥ 2: æå€§æ¥ç¶æå¹æéã«ãžãã¿ãŒãèšå®ããŠæ¥ç¶ã®å€±å¹ãé²ã Amazon Aurora DSQL ã«ã¯ã1 æéãšããæ¥ç¶ã®æå€§æå¹æéã®ããŒãå¶éããããŸããæ¥ç¶ããã®æéã«éãããšãã¢ã€ãã«äžã§ããã©ã³ã¶ã¯ã·ã§ã³ã®éäžã§ãããµãŒãã¹ã¯ãã®æ¥ç¶ãéããŸããããŒã«ã¯ãããªãåã«æ¥ç¶ããªãµã€ã¯ã«ããå¿
èŠããããŸãã ãžãã¿ãŒãéèŠãªçç±: ããŒã«å
ã®ã»ãšãã©ã®æ¥ç¶ãã»ãŒåãã¿ã€ãã³ã° (ããšãã°ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæ) ã«äœæãããå Žåããããã¯ã»ãŒåæã«å€±å¹ããŸãããããšæ°ããæ¥ç¶ãªã¯ãšã¹ããäžæã«éäžãããthundering herdããçºçãã1 ç§ããã 100 æ¥ç¶ã®ã¬ãŒãå¶éãè¶
ããããšããããŸããæå€§æå¹æéã«ã©ã³ãã ãªãžãã¿ãŒãå ãããšãæ¥ç¶ã®ãªãµã€ã¯ã«ãæéçã«åæ£ãããŸãã // Go (pgxpool) â Use native per-connection jitter config.MaxConnLifetime = 55 * time.Minute config.MaxConnLifetimeJitter = 5 * time.Minute // Each connection independently gets a lifetime between 55-60 minutes // Java (HikariCP): maxLifetime already applies per-connection jitter automatically // Python: use max_lifetime with a randomized offset in your pool factory æåŸ
ãããçµæ: æ¥ç¶ã®ãªãµã€ã¯ã«ãåã
ã®æ¥ç¶ã«ããã£ãŠæéçã«åçã«åæ£ããæ°ããæ¥ç¶ãªã¯ãšã¹ãã 1 ç§ããã 100 ã®ã¬ãŒãã¯ã©ãŒã¿ãååã«äžåã£ãç¶æ
ãä¿ãŠãŸãã æŠç¥ 3: ããŒã«ãµã€ãºãæé©åãã Amazon Aurora DSQL ã¯å€æ°ã®åææ¥ç¶ã§ãé«ãæ§èœãçºæ®ããŸãããã¹ã«ãŒããããã¬ã€ãã³ã·ãŒããªãœãŒã¹æ¶è²»ã®ãã©ã³ã¹ããšããããã«ããŒã«ãµã€ãºãèšå®ããå¿
èŠããããŸãã 衚 3: æ¥ç¶ããŒã«ã®ãµã€ãºèšå®ãã©ã¡ãŒã¿ã®æšå¥šåæå€ ãã©ã¡ãŒã¿ æšå¥šåæå€ çç± æå°ããŒã«ãµã€ãº 2ã5 æ¥ç¶ äœè² è·æã«ãªãœãŒã¹ãç¡é§ã«ãããããŒã«ããŠã©ãŒã ã«ä¿ã€ æå€§ããŒã«ãµã€ãº ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ããã 10ã20 æ§ããã«å§ãããã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ã远å ããŠã¹ã±ãŒã«ã¢ãŠããã æ¥ç¶ã¿ã€ã ã¢ãŠã 30 ç§ ãã©ãã£ãã¯ãå€ãã€ãã³ãäžã«ãDSQL ã®æ¥ç¶ããŒã¹ããã¥ãŒ (100/ç§) ãæ¶åã§ããããã«ãã ã¢ã€ãã«ã¿ã€ã ã¢ãŠã ç¡å¹ (ãŸã㯠MaxConnLifetime ã«åããã) ã¢ã€ãã«æ¥ç¶ã«ã³ã¹ãã¯ããããªããéãããŸãŸã«ããŠããã°ãåæ¥ç¶æã®äžèŠãª TLS/èªèšŒã®è² è·ãé¿ãããã Amazon CloudWatch ã§ DPU (Distributed Processing Unit) ã®æ¶è²»ãç£èŠãã容éã®è¿œå ãå¿
èŠãªã¿ã€ãã³ã°ãææ¡ããŸãããã©ãã£ãã¯ã®æ¥å¢ãäºæ³ãããå Žå (ã¹ã±ãžã¥ãŒã«ãããããããžã§ããããŒã±ãã£ã³ã°ãã£ã³ããŒã³ãªã©) ã¯ãäºåã«ããŒã«ããŠã©ãŒã ã¢ããããŠãããŸããã€ã³ã¹ã¿ã³ã¹ãããã®æ¥ç¶æ°ãå¢ããã®ã§ã¯ãªããå°ããã®ããŒã«ãæã€ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ãå¢ãããŠæ°Žå¹³æ¹åã«ã¹ã±ãŒã«ã¢ãŠãããŸããAmazon Aurora DSQL ã¯ãçæçãªè² è·å¢å ã«ã¯åçŽã¹ã±ãŒãªã³ã°ã§ãé·æçãªå€åã«ã¯ããªãŒãå
šäœã®æ°Žå¹³ã¹ã±ãŒãªã³ã°ã§å¯Ÿå¿ããŸããã¯ã©ã¹ã¿ãŒããã 10,000 åææ¥ç¶ã®ã¯ã©ãŒã¿ã掻çšããå¿
èŠã§ããã° AWS Support ã«é£çµ¡ããŠäžéãåŒãäžããŠãã ããã æåŸ
ãããçµæ: ã¯ãŒã¯ããŒãã«åãããŠããŒã«ãé©åã«ãµã€ãºèšå®ãããæ¥ç¶ã®è² è·ãšããŒã«æ¯æžãšã©ãŒã®äž¡æ¹ãæå°éã«æããããŸãã æŠç¥ 4: ãã«ããªãŒãžã§ã³ã§ã®ããŒãªã³ã°ã®èæ
®äºé
Amazon Aurora DSQL ã®ãã«ããªãŒãžã§ã³ active-active ãããã€ã䜿ãã°ããŒãã«åæ£ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæ¥ç¶ããŒãªã³ã°ã«ããäžæ®µã®æ€èšãå¿
èŠã§ãã ãã®ãµãŒãã¹ã®ãã«ããªãŒãžã§ã³ã¢ãŒããã¯ãã£ã§ã¯ãSQL ã®å®è¡ãèªã¿åããæžã蟌ã¿ã®ã¹ããŒãªã³ã°ãã¯ã©ã€ã¢ã³ãã®ãªãŒãžã§ã³å
ã§ããŒã«ã«ã«åŠçããŸãããªãŒãžã§ã³éã®éä¿¡ã¯ãã³ãããæã« Adjudicator ãš Journal ã®ã¬ããªã±ãŒã·ã§ã³ãããã³ã«ãéããŠã®ã¿çºçããŸãããã«ããªãŒãžã§ã³ã¢ãŒãã§ãèªã¿åãã¯ããŒã«ã«ãªã®ã§ãèªã¿åãå°çšãã©ã³ã¶ã¯ã·ã§ã³ã¯ãªãŒãžã§ã³éã®ã¬ã€ãã³ã·ãŒãªãã§å®äºããŸããèªã¿æžããã©ã³ã¶ã¯ã·ã§ã³ã§ãªãŒãžã§ã³éã¬ã€ãã³ã·ãŒãçºçããã®ã¯ COMMIT æã®ã¿ã§ãå®è¡ãã SQL ã¹ããŒãã¡ã³ãã®æ°ã«é¢ä¿ãªãããªãŒãžã§ã³éã®ã©ãŠã³ãããªããçŽ 1ã1.5 ååã§ããåã¹ããŒãã¡ã³ãããšã«ã©ãŠã³ãããªãããçºçãã転éããŒã¹ã®èšèšãšæ¯ã¹ãã¬ã€ãã³ã·ãŒãåæžã§ããŸãããªãŒãžã§ã³ã®éžæãéèŠã§ããæ¥ç¶æ§ã®è¯ããªãŒãžã§ã³ã®çµã¿åããã»ã©ã³ãããã¬ã€ãã³ã·ãŒãäœããå°ççã«é¢ããçµã¿åããã»ã©ããã«æ¯äŸããŠå€§ãããªããŸãã ãã«ããªãŒãžã§ã³ã§ã®ããŒãªã³ã°ã§ã¯ããªãŒãžã§ã³ããšã«åå¥ã®æ¥ç¶ããŒã«ãäœæããããããããŒã«ã«ã® Amazon Aurora DSQL ãšã³ããã€ã³ããæãããã«ããŸããããŒã¯ã³æŽæ°ã®ããžãã¯ããªãŒãžã§ã³ããšã® IAM ãšã³ããã€ã³ããèæ
®ããŠããããšã確èªããŠãã ãããã¢ããªã±ãŒã·ã§ã³ã¯ active-active ã¢ã¯ã»ã¹ãåæã«èšèšããŸãããã®ãµãŒãã¹ã«ã¯ãã©ã€ããªãªãŒãžã§ã³ãšããæŠå¿µããªããåãªãŒãžã§ã³ã¯å¯Ÿç§°çã«åäœããŸãã æåŸ
ãããçµæ: ãªãŒãžã§ã³éã¬ã€ãã³ã·ãŒã¯ã³ãããæã«ã®ã¿çºçããèªã¿åãã¯ããŒã«ã«ãªãŒãžã§ã³ã®é床ã§å®äºããŸãã ãªãã¶ãŒãããªãã£: ããŒã¿ããŒã¹ã ãã§ãªãæ¥ç¶ããŒã«ãç£èŠãã Aurora DSQL ã® CloudWatch ã¡ããªã¯ã¹ (TotalTransactions ã CommitLatency ãªã©) ã¯ããŒã¿ããŒã¹ã¬ãã«ã®æåã瀺ããŸãããæ¥ç¶ããŒã«ãããã«ããã¯ãã©ãããŸã§ã¯ããããŸãããããŒã«ã®å¥å
šæ§ãææ¡ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³åŽã«èšæž¬ãçµã¿èŸŒãå¿
èŠããããŸããæ¬¡ã«æããã¯ã©ã€ã¢ã³ãåŽã®ã¡ããªã¯ã¹ããæ¥ç¶ããŒãªã³ã°ã®åé¡ãæããéèŠãªã·ã°ãã«ã§ãã ã¢ããªã±ãŒã·ã§ã³ã«çµã¿èŸŒãã¹ãã¡ããªã¯ã¹ ã¡ããªã¯ã¹ 瀺ãå
容 ã¢ã©ãŒãã®ãããå€ çºçæã®ã¢ã¯ã·ã§ã³ ããŒã«ååŸã¬ã€ãã³ã·ãŒ (.get() ã®æèŠæé) ããŒã«ããæ¥ç¶ãååŸãããŸã§ã¢ããªã±ãŒã·ã§ã³ãåŸ
ã€æé P95 > 500 ms ããŒã«ã飜åããŠãããæå€§ããŒã«ãµã€ãºãå¢ããããã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ãã¹ã±ãŒã«ã¢ãŠããã ã¢ã¯ãã£ãæ¥ç¶æ° çŸåšãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡äžã®æ¥ç¶æ° æå€§ããŒã«ãµã€ãºã«åŒµãä»ããŠãã ãã¹ãŠã®æ¥ç¶ã䜿çšäžãããŒã«ãµã€ãºãå¢ãããããã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡æéãçããã ã¢ã€ãã«æ¥ç¶æ° ããŒã«å
ã§äœ¿ãããŠããªãæ¥ç¶ã®æ° 0 ã®ãŸãŸåŒµãä»ããŠãã ãã©ãã£ãã¯ã®ããŒã¹ãã«å¯Ÿããäœè£ããªããæå°ããŒã«ãµã€ãºãå¢ããããæ¥å¢ãäºæ³ãããåã«ãŠã©ãŒã ã¢ãããã ãªã¯ãšã¹ãã®åæå®è¡æ° 察 ããŒã«ãµã€ãº åŠçäžã®åæãªã¯ãšã¹ãæ°ãšæå€§ããŒã«ãµã€ãºã®æ¯ç åæå®è¡æ°ãæå€§ããŒã«ãµã€ãºã® 80% ãè¶
ãã ããŒã«æ¯æžã«è¿ã¥ããŠãããã¹ã±ãŒã«ã¢ãŠãããããããŒã«ãµã€ãºãå¢ãã ããŒã«æ¯æžã€ãã³ã å©çšå¯èœãªæ¥ç¶ãåŸ
ã£ãŠæ¥ç¶ãªã¯ãšã¹ããã¿ã€ã ã¢ãŠãããåæ° > 0 çŽã¡ã«å¯Ÿå¿ãå¿
èŠãããŒã«ãµã€ãºãå¢ããããã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡æéãçãããããŸãã¯ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ã远å ãã æ¥ç¶äœæã¬ãŒã ããŒã«ã 1 ç§ãããã«éãæ°èŠæ¥ç¶ã®æ° 100/ç§ ã«è¿ã¥ã Aurora DSQL ã®ã¬ãŒãå¶éã«éãããªã¹ã¯ãããããžãã¿ãŒãå ãããã€ã³ã¹ã¿ã³ã¹ã®èµ·åããããããŸãã¯æå°ããŒã«ãµã€ãºãå¢ãããŠæ¥ç¶ã®å
¥ãæ¿ãããæžãã ã»ãšãã©ã®æ¥ç¶ããŒã«ã©ã€ãã©ãªã¯ããããã®çµ±èšããã€ãã£ãã«å
¬éããŠããŸãã Java (HikariCP): HikariPoolMXBean ã䜿ã£ãŠ getActiveConnections() ã getIdleConnections() ã getThreadsAwaitingConnection() ã getTotalConnections() ã«ã¢ã¯ã»ã¹ããŸããMicrometer çµç±ã§ CloudWatch ãã¢ããªã±ãŒã·ã§ã³ããã©ãŒãã³ã¹ã¢ãã¿ãªã³ã° (APM) ããŒã«ã«ãšã¯ã¹ããŒãããŸãã Python (psycopg ConnectionPool): pool.get_stats() ã䜿ããŸãã pool_min ã pool_max ã pool_size ã pool_available ã requests_waiting ã requests_num ãè¿ããŸãã Node.js (node-postgres): pool.totalCount ã pool.idleCount ã pool.waitingCount ã«çŽæ¥ã¢ã¯ã»ã¹ããŸããäžå®ééã§ããŸãã¯ãªã¯ãšã¹ãããšã«åºåããŸãã Go (pgxpool): pool.Stat() ã䜿ããŸãã AcquireCount() ã AcquiredConns() ã IdleConns() ã TotalConns() ã AcquireDuration() ãæäŸããŸãã ãããã¯ã«ã¹ã¿ã CloudWatch ã¡ããªã¯ã¹ãšããŠçºè¡ããã ( PutMetricData API ãŸãã¯ãã°å
ã® CloudWatch Embedded Metric Format ã䜿çš)ãæ¢åã® APM ããŒã« (AWS X-RayãDatadogãPrometheus/Grafana ãªã©) ã«éä¿¡ããŸãã è£è¶³: Aurora DSQL ã® CloudWatch ã¡ããªã¯ã¹ äž»èŠãªã·ã°ãã«ã¯ã¯ã©ã€ã¢ã³ãåŽã®ã¡ããªã¯ã¹ã§ããã¹ãã§ãããããŒã«ãµã€ãºã決ããããã§åœ¹ç«ã€ Aurora DSQL ã®ã¡ããªã¯ã¹ã 1 ã€ãããŸãã ã¡ããªã¯ã¹ ããŒãªã³ã°ã«åœ¹ç«ã€çç± TotalTransactions ããŒã«ååŸã¬ã€ãã³ã·ãŒãšé¢é£ä»ããŠèŠãŸãããã©ã³ã¶ã¯ã·ã§ã³ãå¢ããŠããã®ã«ååŸã¬ã€ãã³ã·ãŒã暪ã°ããªããããŒã«ãµã€ãºã¯é©åã§ããäž¡æ¹ãå¢ããŠãããªãã容éã®è¿œå ãå¿
èŠã§ãã ããããæ¥ç¶ããŒã«ã®åé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã° ã¢ã©ãŒããçºçãããããã®è¡šã䜿ã£ãŠæãããããé害ã·ããªãªã蚺æãã察åŠããŠãã ããã 衚 5: ãããã Amazon Aurora DSQL æ¥ç¶ããŒã«åé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã¬ã€ã çç¶ èããããåå 蚺æã¹ããã å¯ŸåŠ ããŒã«æ¯æž (æ¥ç¶ã¿ã€ã ã¢ãŠããšã©ãŒ) ãã©ãã£ãã¯ã«å¯Ÿã㊠maxPoolSize ãäœããã ã¢ã¯ãã£ãæ¥ç¶ãšã¢ã€ãã«æ¥ç¶ãæ¯èŒããŠç£èŠãã æå€§ããŒã«ãµã€ãºãå¢ããããã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ã远å ãã çŽ 55 ååŸã®èªèšŒå€±æ ããŒã¯ã³ã®å€±å¹ãåŠçãããŠããªã ããŒã¯ã³æŽæ°ã®ãã°ã確èªãã å
¬åŒã³ãã¯ã¿ã䜿ã£ãŠããã確èªãããMaxConnLifetime ã®èšå®ã確èªãã æ°èŠæ¥ç¶ã¬ãŒãã®ãšã©ãŒ èµ·åæã® thundering herd æ¥ç¶äœæã®ã¿ã€ã ã¹ã¿ã³ãã確èªãã MaxConnLifetime ã«ãžãã¿ãŒãå ãããã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ã®èµ·åãããã ã¯ã€ãã¯ãªãã¡ã¬ã³ã¹: äž»èŠãªå¶éãšèšå® æ¥ç¶ã®æå¹æéããã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ã ã¢ãŠããæ¥ç¶ã¬ãŒããåæå®è¡æ°ãªã©ã®ææ°ã®å¶éã«ã€ããŠã¯ã Cluster quotas and database limits ãåç
§ããŠãã ããã ãŸãšã æ¬èšäºã§ã¯ãAmazon Aurora DSQL ã®ãã©ã³ã¶ã¯ã·ã§ã³åäœã®ããŒãªã³ã°ã¢ãã«ãåŸæ¥ã® PostgreSQL ãšã©ãéããã解説ããŸããããŸããã³ãã¯ã¿ã®éžæãããã«ããªãŒãžã§ã³ã§ã®ããŒãªã³ã°ãŸã§ãã¢ããªã±ãŒã·ã§ã³ã®æ§èœãšå埩åãä¿ã€ããã®å
·äœç㪠4 ã€ã®æŠç¥ã玹ä»ããŸãããPgBouncer ã pgpool-II ã®ãããªããŒã¿ããŒã¹åŽã®ãããã·ã¯äœ¿ããªãã§ãã ããããã®ãµãŒãã¹ã¯ãã©ã³ã¶ã¯ã·ã§ã³åäœã®å€éåããã€ãã£ãã«åŠçããŸãããã«ããªãŒãžã§ã³ã®ãããã€ã§ã¯ããªãŒãžã§ã³éã¬ã€ãã³ã·ãŒãã³ãããæã«ã®ã¿çºçããããšãèŠããŠãããŠãã ããããã©ã³ã¶ã¯ã·ã§ã³ã¯ããŒã«ã«ã®èªã¿æžããæŽ»ãããããã«èšèšããŸãããã ãããã®æŠç¥ã«åŸãã°ãã¢ããªã±ãŒã·ã§ã³ã¯ Amazon Aurora DSQL ã®èªåã¹ã±ãŒãªã³ã°ã匷æŽåæ§ãé«å¯çšæ§ãæå€§éã«æŽ»çšã§ããŸããæ¥ç¶ã®è² è·ãæå°éã«æããå€§èŠæš¡ã§ãã¬ã€ãã³ã·ãŒãäºæž¬å¯èœã«ä¿ãŠãŸãã èè
ã«ã€ã㊠Tejas Dubey Tejas ã¯ã Tejas 㯠AWS ã®ãã¯ãã«ã«ã¢ã«ãŠã³ããããŒãžã£ãŒã§ããšã³ã¿ãŒãã©ã€ãºã®ã客æ§ãå埩åãšã»ãã¥ãªãã£ã«åªããAI 察å¿ã®ã¯ã©ãŠãã¢ãŒããã¯ãã£ãæ§ç¯ã§ããããæ¯æŽããŠããŸããæ°ãããã¯ãããžãŒãå®éã®ããžãã¹äŸ¡å€ã«å€ããããšã«æ
ç±ã泚ãã§ããŸããä»äºãé¢ããŠãããšãã¯ãæ¯åã远ããããããããã¯ã«ããŒã«ãããããææ°ã®ãã¯ãããžãŒãããã£ããããŠããŸãã Dhvani Shah Dhvani ã¯ã Dhvani ã¯ãã¯ãã«ã«ã¢ã«ãŠã³ããããŒãžã£ãŒã§ãã¯ã©ãŠãã®å埩åãã»ãã¥ãªãã£ãçæ AI ã®å°å
¥ã«é¢ããæŠç¥çãªã¬ã€ãã³ã¹ã§ãšã³ã¿ãŒãã©ã€ãºã®ã客æ§ãæ¯æŽããŠããŸããããžã¿ã«ãã©ã³ã¹ãã©ãŒã¡ãŒã·ã§ã³ãå éãããã¹ã±ãŒã©ãã«ã§å®å
šãªãœãªã¥ãŒã·ã§ã³ã®èšèšãæ¯æŽããŠããŸããä»äºä»¥å€ã§ã¯ãæ
è¡ããããã³ãã³ãå®¶æãšéããæéãæ¥œããã§ããŸãã ãã®èšäºã¯ Kiro ã翻蚳ãæ
åœããSolutions Architect ã® Arisa Izuno ãã¬ãã¥ãŒããŸããã
PSSLã®äœã
æšã§ã Claude Codeã»Copilotã»Codex ãšãã£ã AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã¯ãã³ãã³ããå®è¡ã§ããæš©éãæã£ããŸãŸæå
ã®ãªããžããªã®äžã§åããŸãã䟿å©ã§ããã secret (API tokenãDB æ¥ç¶æååãæ¬çª AWS ããŒ) ãšã®åå±
ããŠããããšã§ã·ãŒã¯ã¬ãããæŒæŽ©ããªããå¿é
ã«ãªã£ãã®ã§å¯Ÿå¿çã調æ»ããŠã¿ãŸããã ãã®èšäºã§ã¯ã ã«ãŒã«ã§çžã£ãŠã AI Agent ã« .env ãèªãŸããŠããŸãæ
å ±æŒæŽ©ãªã¹ã¯ ãã®ç·©åçãšã㊠Infisical ãéžãã çç± Infisical ã®ä»çµã¿ (= ãªã AI ã«ãèŠããªããã®ã) å人 AWS ã¢ã«ãŠã³ãã䜿ã£ãæ€èšŒã§ã®å°å
¥æé ã«ã€ããŠãŸãšããŸããã 1. ã«ãŒã«ã§çžã£ãŠã AI Agent 㯠secret ãèªã¿ããå±éºããã Claude Code / Copilot çã®äž»èŠãª AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«ã¯ãéçšã«ãŒã«ãæžããå ŽæãçšæãããŠããŸããClaude Code ãªã CLAUDE.md ã¿ãããªãã€ã§ãã æ€èšŒçšã«ç«ãŠããããžã§ã¯ãã® CLAUDE.md ã«ãããããªã«ãŒã«ãæžããŠã¿ãŸãã: - `.env`, `.env.prod`, `.env.*`, `*.pem`, `client_secret.json` ãªã©ã® secret å®äœãèªãŸãªãã§ãã ãã - secret ãã¡ã€ã«ã«å¯Ÿã㊠`cat`, `grep`, `sed`, `awk`, `head`, `tail`, `less`, `python` ãªã©ã§ å
容ãè¡šç€ºã»æœåºããªãã§ãã ãã - secret å€ãDATABASE_URLãSECRET_KEYãSMTP passwordãRDS passwordãprivate key ã ãã£ãããdocsãissueãPRããã°ãžæžããªãã§ãã ãã ãããããã«ã«ãŒã«ãèšèŒããŠãäœåºŠãè£åãããçµéšããããæå³ããAgnetãã«ãŒã«ãç¡èŠããŠã·ãŒã¯ã¬ããæ
å ±ãèŠã«è¡ãå¯èœæ§ãåŠå®ããããªããªãšéçºãããªããæã£ãŠããŸããã äŸãã°ä»¥äžã®ãããªå Žåã«Agentãã«ãŒã«ãç¡èŠããŠã·ãŒã¯ã¬ãããèªã¿ã«è¡ãå¯èœæ§ããããŸã ãnode dev server ãç«ã¡äžãããªããâ ãããã°ã®ãã DATABASE_URL ã®æ§é ã確èªããå¿
èŠãåºã ãECR push ã倱æããŠãããâ AWS profile / credential ã®ç¶æ
ãèŠãå¿
èŠãåºã ã make ã§ env ãèªãŸããŠããªãã£ãœããâ ã·ã§ã«ãã env | grep XXX ãã ã€ãŸãã CLAUDE.md ã ãã«é Œã£ã secret 管ç㯠ãäºæ
ãèµ·ããªãããšãç¥ãéçšã ã ãšæããŠããŠåçšè£œåã®éçºãããéã«ããªãã®ãªã¹ã¯ã«ãªããããšæã£ãŠããŸãã 2. Infisical ãšã¯ Infisical 㯠OSS ã® secret 管çãã©ãããã©ãŒã ã§ããAWS Secrets Manager ã HashiCorp Vault ãšåããsecret ãéäžç®¡çãããã«ããŽãªã«å±ããŸãããéçºè
äœéšãæçŸ€ã«è¯ããšæããŸãã Web UI ã§èŠãŠç·šéã§ãã (json ã§ãªã key-value ã®ããŒãã«) CLI ã direnv / dotenv-cli ã®äžäœäºæ ãšããŠäœ¿ãã ç°å¢å¥ ( dev / staging / prod ) + ãã¹å¥ ã§åé¢å¯èœ ã¡ã³ããŒåäœã® RBAC ã誰ããã€äœãèŠããã® audit log Cloud (SaaS) ã Self-host (Docker compose) ãéžã¹ã ç¡ææ ãå人éçºã§åå䜿ãã å
¬åŒã« GitHub Star çŽ 2 äž ãã£ãŠãHashiCorp Vault ããã¯å°èŠæš¡ãAWS Secrets Manager ããã¯éçºè
å¯ããšããç«ã¡äœçœ®ã§ãã 3. ä»çµã¿ â ãªã AI Agent ãããèŠããªããã®ã Infisical CLI ã®äžæ žæ©èœã¯ infisical run ã§ã: infisical run --env=dev --path=/aws/sandbox -- aws sts get-caller-identity ãã®ã³ãã³ãã®è£ã§ã¯ãããããæµããèµ·ããŸã: infisical CLI (芪) â ââ 1. ããŒã«ã«ã«ä¿åããã JWT ã§ Infisical API ãžèªèšŒ ââ 2. /aws/sandbox ãã¹ã® secret äžèЧã HTTPS ã§ååŸ (in-memory) ââ 3. fork ããŠåããã»ã¹ãäœã â ââ åããã»ã¹ã® environ ã« AWS_ACCESS_KEY_ID çã export ââ 4. åããã»ã¹ (= `aws sts get-caller-identity`) å®è¡ ââ åããã»ã¹çµäºã§ memory ãè§£æŸãsecret ã¯ã©ãã«ãæ®ããªã Infisicalã䜿ã£ãŠããŠãããããã€ã³ã ãã£ã¹ã¯ã« .env ãã¡ã€ã«ãäžåäœããªã â AI ã cat .env ããŠã “ãããªãã¡ã€ã«ãªã” 芪 shell ã® env ã« export ããªã â AI ã env ã printenv ãæã£ãŠãèŠããªã (= ããã©ã«ãã® shell ã«ã¯èŒã£ãŠããªã) shell history ã«å€ãæ®ããªã â infisical run -- foo ãšããåŒã³åºãå±¥æŽã¯æ®ãããsecret å€ã¯å±¥æŽã«åºãªã åããã»ã¹ãçµãã£ãã secret çè·¡ãŒã â RAM äžããæ¶ãã ã€ãŸããAI ãšãŒãžã§ã³ãããç°å¢å€æ°çµç±ã§ secret ãçããæãã«ãžã¥ã¢ã«ãªçµè·¯ (= cat .env ãš env ) ã äž¡æ¹ãšãæ§é çã«å¡ãã§ããŸã ã 4. å°å
¥æé (å人 AWS ã¢ã«ãŠã³ãã§æ€èšŒ) ããããã¯ãèªåã®å人 AWS ã¢ã«ãŠã³ãäžã«æ€èšŒçšã® IAM user ãäœãããã® credential ã Infisical ã«ç»é²ã㊠AI ãšãŒãžã§ã³ããã AWS ãªãœãŒã¹ãæäœãããããšããæµãã§æãåãããŠã¿ãæé ã§ããããããŠãæ€èšŒçšã«ç«ãŠã Django ãããã¯ãã® .env çžåœã®å€ (DB æ¥ç¶æååãSECRET_KEYãSMTP password ãªã©) ã Infisical ã«å¯ããŠãããŒã«ã«ã® .env ãæ¶ãå»ããšãããŸã§ãããŸããã 4.1 ã¢ã«ãŠã³ãäœæ infisical.com/cloud ã§ãµã€ã³ã¢ãããOrg â Project ãäœæã 4.2 CLI ã®ã€ã³ã¹ããŒã« # macOS brew install infisical/get-cli/infisical # Linux curl -1sLf '<https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh>' | sudo -E bash sudo apt update && sudo apt install -y infisical 4.3 ãã°ã€ã³ãšãªããžããªã®çŽä»ã infisical login # ãã©ãŠã¶ãéã㊠OAuth cd path/to/repo infisical init # ãã® repo ã Infisical project ã«çŽä»ã (.infisical.json çæ) .infisical.json 㯠project ID ãšç°å¢åã®å¯Ÿå¿ã ã ãå
¥ã£ãŠã㊠secret å€ã¯ç¡ãã®ã§ãgit ã« commit ããŠãåé¡ãªãã 4.4 secret ãç»é² Web UI ããç»é²ããã®ã楜ã§ããè€æ°ç°å¢ ( dev / staging / prod ) ãšä»»æã®ãã¹ ( /aws/sandbox /django/app ç) ã§åããããŸãã æ€èšŒã§ã¯ãå人 AWS ã¢ã«ãŠã³ãã«äœã£ã IAM user ã® credential ãšãæ€èšŒçš Django ãããã¯ãã® env ããããªæãã§åããŸãã: Infisical path env vars çšé dev / /aws/sandbox AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY (å人æ€èšŒçš IAM user) AI ãšãŒãžã§ã³ããã S3 / EC2 / SSM ãªã©ãå©ãæ€èšŒ dev / /django/app DATABASE_URL / SECRET_KEY / SMTP_PASSWORD ç æ€èšŒçš Django ã¢ããªã®å®è¡æ env ããã§æå
ã® .env ã¯å®å
šã«åé€ãå€ã¯å
šéš Infisical åŽã«ã ãååšããç¶æ
ã«ããŸããã 4.5 å®è¡ # AWS æäœ infisical run --env=dev --path=/aws/sandbox -- aws sts get-caller-identity # â arn:aws:iam::xxxxxxxx:user/sandbox-user # Django èµ·å infisical run --env=dev --path=/django/app -- python manage.py runserver ããã§ OKã .env ãã¡ã€ã«ãã·ã§ã«ãžã® export ãäžåç¡ãã 5. æ€èšŒããŠããã£ãæ©æµ 5.1 AI ãšãŒãžã§ã³ããæ§é çã« secret ã«è§Šããªããªã£ã æ€èšŒã§ã¯ Claude Code ã«ãå人 AWS ã¢ã«ãŠã³ãã® S3 ãã±ãããäžèЧããŠãäžèŠãªãã®ãåé€ããŠãã¿ãããªã¿ã¹ã¯ãæããŠã¿ãŸããã infisical run çµç±ã§ AWS æäœãå§ä»»ããŠããClaude 㯠ãããã secret å€ããç¥ããè¡ããªã ãäŸãã°: infisical run --env=dev --path=/aws/sandbox --silent -- \\ aws s3 ls ããã Claude ã«å®è¡ãããŠããClaude ãèŠãããã®ã¯: ã³ãã³ãã®åŒæ° (= å
¬éæ
å ±) ã³ãã³ãã®åºå (= ç§ãèš±å¯ããæ
å ±) ã ãã AWS ããŒæ¬äœã¯ Claude ã®ããã»ã¹ç©ºéã«ãäŒè©±å±¥æŽã«ãå
¥ããŸããã æ€èšŒçš Django ã¢ããªåŽã§ãåæ§ã§ã .env ãæ¶ããç¶æ
ã§ Claude ã«ãdev server ãç«ã¡äžããŠåäœç¢ºèªããŠããšé Œããšã infisical run çµç±ã§ããèµ·åã§ããªãããšãŒãžã§ã³ãã奜å¥å¿ã§ cat .env ããŠã ãã¡ã€ã«ãååšããªã ã®ã§ç©ºæ¯ãã«çµãããŸããå®éã«ããããŠã¿ãŠãã DATABASE_URL ã SECRET_KEY ã®å€ãäŒè©±å±¥æŽã«åºãŠããããšã¯äžåºŠããããŸããã§ããã 5.2 æ€èšŒçš IAM user ãåãããã å人 AWS ã¢ã«ãŠã³ãã§éãã§ãããšããã㯠AI ã«æž¡ããŠããæš©éããããã¯èªåãæã§ãããããªãæš©éããåããããªããŸããInfisical ã®ãã¹ã§åããšããã綺éº: # AI ã«æž¡ããŠããæš©é (read äžå¿ãéå®ãªãœãŒã¹) infisical run --env=dev --path=/aws/sandbox -- <command> # èªåãã䜿ããªãæš©é (IAM ç·šéãbilling ç³») infisical run --env=dev --path=/aws/admin -- <command> IAM user èªäœã¯å¥ã
ã«äœã£ãŠãInfisical åŽã§ãã¹æš©éãåããã ãããšãŒãžã§ã³ãã«ã¯ /aws/sandbox ã ãã¢ã¯ã»ã¹ã§ããããŒã¯ã³ãæž¡ããã¿ãããªéçšãçŸå®çã«ã§ããŸãã 5.3 æ€èšŒãçµãã£ããå¥å¥ªãäžç¬ å人æ€èšŒããããã§ãæ€èšŒçµãã£ããã© IAM key æ¶ãå¿ããŠæŸçœ®ããèµ·ãããã¡ã§ãããInfisical ã«éçŽããŠããã° Web UI ã§å€ãæ¶ãã ãã .env ãè€æ°ã®ãªããžããªã«æ£ãã°ã£ãŠãç¶æ
ããå§åçã«ç®¡çãæ¥œã§ããã 6. ãŸãšã AI Agent ãšäžç·ã«éçºããæä»£ã .env ãããŒã«ã«ã«è»¢ãããŠããéçšã¯ ãã«ãŒã«ã§çžã£ãŠãããã€ãã¯äºæ
ãã å¯èœæ§ããããŸãã æç« ã«ãŒã« ( CLAUDE.md ) ã¯ããé¡ããã¬ãã« AI Agent ã¯ã¿ã¹ã¯éè¡ã®ããã« env ãèŠãããšããã (æªæãªãã§ã) äžåºŠå±¥æŽã«å
¥ã£ã secret 㯠AI ãã³ããŒåŽã«æ°žç¶åããã Infisical ã® infisical run -- <command> æ¹åŒã«åãæ¿ãããšã .env ãã¡ã€ã«ãããããååšããªã â cat ã§åºãªã shell env ã«ã default ã§ä¹ããªã â env / printenv ã§åºãªã åããã»ã¹ã®ã©ã€ããµã€ã¯ã«å
ã ãã§ secret ãçãã ããã§ã㊠direnv åçã®æè»œãã§éçºãåã å®å
šé²åŸ¡ã§ã¯ãªããã ã«ãžã¥ã¢ã«ãªæŒæŽ©çµè·¯ãæ§é çã«å¡ãã äžã§ãAI ãšãŒãžã§ã³ããšã®å
±åãæç«ããã ããã®æå°ã³ã¹ãã®äžæãšããŠã匷ãããããã§ããŸãã å人 AWS ã¢ã«ãŠã³ãã§ã®æ€èšŒã¬ãã«ã§ãã .env ãæ¶ã㊠Infisical ã«å¯ããããšã§ããšãŒãžã§ã³ãã«äœãåãããŠã secret ãæ··å
¥ããªãããšããå®å¿æã¯æ®µéãã§ãããæ¬çªæå
¥åã®ãµã³ãããã¯ã¹ãšããŠæãåãããŠã¿ã䟡å€ã¯ååãããšæããŸãã åèãªã³ã¯ Infisical å
¬åŒ Infisical CLI ããã¥ã¡ã³ã Anthropic Claude Code å
¬åŒ GitHub: Infisical/infisical ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post AI ãšãŒãžã§ã³ãã«.envãèªãŸããããªãã£ãããInfisicalãå°å
¥ãŠã¿ã first appeared on SIOS Tech Lab .