
EC2ãDockerãäžèŠã§Next.jsãåºãããLambda Web Functionsã®æ¢å®URLã¯èª°ã§ãéãã
AWS ã10æã«çºè¡šãããAWS Lambda Web Functionsãã䜿ããšãEC2 ã Docker ã䜿ããã«ãzip ãæž¡ãã ãã§ Next.js ã®ãµã€ãã HTTPS ã® URL ã§åãããŸãããã ãããã® URL ã¯ã€ã³ã¿ãŒãããã®ã©ãããã§ãå±ãã®ã§ããã®ãŸãŸã§ã¯ç€Ÿå ã ãã®å ¬éã«ãªããŸããã
ãããã€ã¯ã³ãã³ã1ã€ãã³ãŒãã眮ã S3 ãã±ãããå®è¡ããŒã«ãã³ãã³ããäœããHTTPS ã® URL ãè¿ã
Next.js 㯠standalone ã§åºåããåŸ ã¡åãå ãåããã index.js ã1æè¶³ã
æ¢å®ã®ãšã³ããã€ã³ãã¯èªèšŒãªããURL ãç¥ã£ãŠããã°ç€Ÿå€ãããéãã
瀟å ã ãã«ããã«ã¯ãCloudFront ãåã«çœ®ã㊠IP ã§çµãããã¢ããªã«ãã°ã€ã³ãä»ãã
æ±äº¬ãªãŒãžã§ã³ã®å䟡ãšãNext.js ã®ç»åæé©åãªã©ãã©ããŸã§åããã¯ããŸã åãããªã
å 容ã¯2026幎10æ20æ¥æç¹ã§ããææã¯ AWS ã®çºè¡šããã°ãLambda Web Functions ã®éçºè ã¬ã€ããLambda ã®æéããŒãžãšããã®çºè¡šãåãäžãã Publickey ã®èšäºã§ãã
Lambda ã®äžã§æ®éã® Web ãµãŒããŒãåã
çºè¡šã¯2026幎10æ12æ¥ã§ããLambda Web Functions ã¯ãããŒãã§åŸ ã¡åããæ®éã® HTTP ãµãŒããŒããã¢ããã¿ãŒãªãã§ Lambda ã§åããä»çµã¿ã§ãã察å¿ããäŸãšããŠãExpressãHonoãFastifyãNext.js ãæãã£ãŠããŸãã
ãããŸã§ã® Lambda ã¯ãã€ãã³ããåãåã颿°ïŒãã³ãã©ãŒïŒãæžã圢ã§ãããNext.js ã®ããã«ããµãŒããŒãšããŠèµ·åããã¢ããªããèŒããã«ã¯ãHTTP ã®ãªã¯ãšã¹ããã€ãã³ãã«å€æããã¢ããã¿ãŒãéã«æãå¿ èŠããããŸãããWeb Functions ã§ã¯ããã®ã¢ããã¿ãŒã¯å¿ èŠãããŸããã
EC2 ã Docker ã䜿ããªããzip ãæž¡ããš URL ãè¿ã
éçºè ã¬ã€ãã§ã¯ãã³ãŒã㯠zip ã§æž¡ããŸãããµãŒããŒãçšæããæé ããã³ã³ããã€ã¡ãŒãžãäœãæé ããããŸããã
AWS CLI ã§ã¯ã次ã®ã³ãã³ãã§ãããã€ããŸãã
aws lambda-web deploy --name my-web-app --code ./my-web-appååã¯ãã³ãŒãã眮ã S3 ãã±ãããšããã°ãæžãããã® IAM ã®å®è¡ããŒã«ããã®ã³ãã³ããäœããŸãïŒæ¢ã«ããã°äœ¿ãåããŸãïŒãç¶ããŠé¢æ°ã»ãªããžã§ã³ïŒã³ãŒããšèšå®ã®çïŒã»dev ãšããååã®ãšã³ããã€ã³ããäœããHTTPS ã® URL ãè¿ããŸããçºè¡šããã°ã¯ãURL ãè¿ããŸã§ã1å以å ãšããŠããŸãã
2åç®ããã¯åãã³ãã³ãã§æ°ãããªããžã§ã³ãäœãããURL ã¯å€ãããŸãããã³ã³ãœãŒã«ãããäœããŸãã
åæãšããŠå¿ èŠãªã®ã¯ãAWS ã®ã¢ã«ãŠã³ããaws lambda-web ã³ãã³ããå ¥ã£ã AWS CLI v2ãS3 ãã±ãããš IAM ããŒã«ãäœãæš©éïŒiam:PassRole ãå«ãïŒã§ãã
Next.js 㯠standalone ãš index.js 1æ
Web Functions ã¯ãzip ã®çŽäžã«ãã index.js ãèµ·åããŸãããµãŒããŒã¯ãLambda ãç°å¢å€æ° AWS_LAMBDA_HTTP_ENDPOINT ã§æž¡ããã¹ããšããŒãã§åŸ ã¡åããæ±ºãŸãã§ãã
Next.js ã® standalone åºåã¯ãåŸ ã¡åãå ã HOSTNAME ãš PORT ããèªã¿ãŸããããã§éçºè ã¬ã€ãã¯ããã®2ã€ã AWS_LAMBDA_HTTP_ENDPOINT ããèšå®ãã index.js ãå ¥å£ã«ããæ¹æ³ã瀺ããŠããŸãã説æã«æ²¿ã£ãŠæžããšã次ã®åœ¢ã§ãã
// index.jsïŒ.next/standalone ã®çŽäžã«çœ®ãïŒ
const [host, port] = (process.env.AWS_LAMBDA_HTTP_ENDPOINT || 'localhost:3000').split(':');
process.env.HOSTNAME = host;
process.env.PORT = port;
require('./server.js');ããäžã€ãstandalone ã®åºåã«ã¯ public/ ãš .next/static/ ãå ¥ããŸããïŒNext.js åŽã®ä»æ§ïŒããã®2ã€ãã³ããŒããªããšãCSS ãç»åã衚瀺ãããŸããã
æé ã«ãããšæ¬¡ã®4ã€ã§ãã
next.config ã« output: 'standalone' ãæžã㊠next build
public/ ã .next/standalone/public/ ã«ã.next/static/ ã .next/standalone/.next/static/ ã«ã³ããŒ
äžã® index.js ã .next/standalone/ ã«çœ®ã
aws lambda-web deploy --name <åå> --code .next/standalone
ãã®ã³ãŒããšæé ã¯ãããã¥ã¡ã³ãã®èª¬æããçµã¿ç«ãŠããã®ã§ãåäœã¯æªæ€èšŒã§ãããµãŒããŒãåŸ ã¡åããŠããªããŠããªããžã§ã³ã¯ Active ãšè¡šç€ºãããããšãããã®ã§ãåºããã URL ãéããŠç¢ºãããŸãã
ã©ã³ã¿ã€ã 㯠Node.js 24 ã ãã§ãèµ·åãã10ç§ä»¥å ã«åŸ ã¡åããå§ããªããšå€±æããŸãã
ã瀟å ã ããã¯ãããã¯ãŒã¯ã§ã¯éããããªã
以äžã¯ãéçºè ã¬ã€ãã®ãããã¯ãŒã¯ã®ããŒãžãšã¢ã¯ã»ã¹å¶åŸ¡ã®ããŒãžã®å 容ã§ãã
ãšã³ããã€ã³ãã® URL ã¯ãã€ã³ã¿ãŒãããããå±ãå Žæã«ãããŸããVPC ã®äžã«çœ®ãèšå®ããPrivateLink ã§ç€Ÿå ãããã¯ãŒã¯ããã ãåŒãæ¹æ³ããããŸããã
VPC ã«ã€ãªãèšå®ïŒegress network connectorïŒã¯ãããŸããã颿°ãã瀟å ã® DB ãªã©ãžåºãŠããåãã ãã§ãã
誰ãéãããã¯ããšã³ããã€ã³ãããšã®èªèšŒã®çš®é¡ïŒAuthTypeïŒã§æ±ºãŸããŸãã

aws lambda-web deploy ã®æ¢å®ã¯ ApplicationManaged ã§ããäœãæå®ããã«åºããšãURL ãç¥ã£ãŠãã人ãªã瀟å€ããã§ãéããŸããURL ãæšæž¬ããã«ãããŠããã¢ã¯ã»ã¹å¶åŸ¡ã«ã¯ãªããŸããã
éã« IamAuth ã«ãããšããã©ãŠã¶ããã¯éããªããªããŸãããã©ãŠã¶ã¯ AWS ã®çœ²åãä»ããããªãããã§ããAuthType ãéžã¶ã ãã§ã¯ã瀟å ã®äººããã©ãŠã¶ã§èŠããµã€ãã«ã¯ãªããŸããã
瀟å åãã«åºããªã CloudFront ãåã«çœ®ã
éçºè ã¬ã€ãã瀺ããŠããã®ã¯ããšã³ããã€ã³ãã®åã« Amazon CloudFront ã眮ã圢ã§ãã

ãšã³ããã€ã³ãã IamAuth ã«ãã
CloudFront ã®ãªãªãžã³ã¢ã¯ã»ã¹ã³ã³ãããŒã«ïŒOACïŒãèšå®ãã眲åã CloudFront ã«ä»»ãã
颿°ã®ãªãœãŒã¹ããªã·ãŒã§ããã® CloudFront ã®é ä¿¡ããã®åŒã³åºããèš±å¯ãã
CloudFront ã« AWS WAF ãä»ããäŒç€Ÿã® IP ã¢ãã¬ã¹ããã ãéã
ãã©ãŠã¶ã® Host ããããŒã¯è»¢éããªãïŒè»¢éãããš 404 ã«ãªããAllViewerExceptHostHeader ãéžã¶ïŒ
ãã©ãŠã¶ã¯ CloudFront ã®ãã¡ã€ã³ãéãã ãã§ã眲å㯠CloudFront ãä»ããŸããLambda ã® URL ãçŽæ¥éããšã眲åãç¡ãã®ã§æåŠãããŸãïŒIAM ã§èš±å¯ãã AWS ã®å©çšè ã¯ã眲åããã°çŽæ¥åŒã¹ãŸãïŒã
ç¬èªãã¡ã€ã³ã CloudFront åŽã§èšå®ããŸãïŒãšã³ããã€ã³ãã«ã¯çŽæ¥ä»ããããŸããïŒã
åšå® å€åãªã©ã§ IP ã§ã¯çµããªããšãã¯ãã¢ããªåŽã§ãã°ã€ã³ãæ±ããŸããã¬ã€ãã¯ãApplicationManaged ã®ãŸãŸ OAuth 2.0 ã OpenID Connect ã§èªèšŒããäœ¿ãæ¹ãæããŠããŸãããã°ã€ã³ã®ä»çµã¿ã¯ãã¢ããªã«èªåã§çµã¿èŸŒã¿ãŸãã
ãªããApplicationManaged ã®ãŸãŸ CloudFront ãš WAF ãåã«çœ®ããŠããLambda ã® URL ãçŽæ¥éãã° WAF ãéããã«å±ããŸããIP ã§çµããªããIamAuth ãš OAC ã®çµã¿åããã«ããŸãã
AWS Organizations ã§è€æ°ã®ã¢ã«ãŠã³ãã管çããŠããå Žåã¯ããµãŒãã¹ã³ã³ãããŒã«ããªã·ãŒïŒSCPïŒã§ ApplicationManaged ã®ãšã³ããã€ã³ããäœãããªãèšå®ãã§ããŸãããã®èšå®ã®äžã§ã¯ã--auth-type IamAuth ãä»ããªã deploy ã¯å€±æããŸãã
å¶éãšæé

æéããŒãžã®èšç®äŸã§ã¯ãæ1,500äžãªã¯ãšã¹ãã® SSR ã¢ããªïŒ1åããã CPU 40ããªç§ãã¡ã¢ãªçŽ0.49GBïŒãæ25.78ãã«ã§ãïŒç±³åœæ±éšãç¡ææ ãšããŒã¿è»¢éæã¯é€ãïŒã
CPU ã¯åŠçããŠããæéã ããã¡ã¢ãªã¯ãªã¯ãšã¹ãã®åéãå«ããŠå®è¡ç°å¢ãããéãã£ãšèª²éãããŸããã¢ã¯ã»ã¹ãç¡ãæéã¯å®è¡ç°å¢ããŒããŸã§æžãããã®éã¯æããŸããã代ããã«ã次ã®ã¢ã¯ã»ã¹ã§èµ·åãåŸ ã€ããšããããŸãã
æéãš Next.js ã®çްéšã¯ããŸã 確ãããããªã
å ¬åŒã®æ å ±ã§ç¢ºãããããªãã£ãã®ã¯ã次ã®3ã€ã§ãã
æ±äº¬ãªãŒãžã§ã³ã®å䟡ãšãç¡ææ ãä»ããã©ãããæéããŒãžã«åºãŠããã®ã¯ç±³åœæ±éšã®å䟡ã ã
Next.js ã®ç»åæé©åïŒnext/imageïŒã ISR ããWeb Functions äžã§ã©ããŸã§åãããããã¥ã¡ã³ã㯠Next.js ã察å¿ãã¬ãŒã ã¯ãŒã¯ã«æããŠããããæ©èœããšã®èª¬æã¯ç¡ã
ã³ã³ããã€ã¡ãŒãžã§åºãæ¹æ³ãããã¥ã¡ã³ãã«åºãŠãã圢åŒã¯ zip ã ã
瀟å åãã«è©Šãå Žåãæåãã --auth-type IamAuth ãä»ããŠåºãã°ãCloudFront ãš WAF ãã€ãªãåã« URL ãå€ããéãããããšã¯ãããŸãããæ±äº¬ã®å䟡ã¯ãæéããŒãžã«åºãã確ãããããŸãã