ã¯ããã«
èªåŸãšãŒãžã§ã³ã管çã¬ã€ã€ãŒã® Kiro Crew ããAWS ã®ãã©ã€ããŒããµããããã«çœ®ãã EC2 ã«ãã€ã³ã¿ãŒãããã«çŽ ã§å ¬éããã»åºå®è²»ã極åãããªã圢ã§ç«ãŠãŠã¿ãŸãããä»åã¯å®éã«è©°ãŸã£ãç®æãè£ããªãããŸãšããŠãããŸãã
Kiro Crew 㯠kiro-cli ãå¯äžã® LLM çµè·¯ãšããŠäœ¿ãããšãŒãžã§ã³ããåžžé§ãããåºç€ãã§ãããã·ã¥ããŒãïŒGatewayïŒãããŒã 5476 ã§åŸ
ã¡åããŸããäŒè©±ã§ãšãŒãžã§ã³ãã«ä»äºãé Œããéçšã¢ã·ã¹ã¿ã³ãåã§ãã
ä»åã®ãŽãŒã«ã¯ããã®åºç€ã å ¥å£ãäœããïŒã€ã³ããŠã³ãã»ãŒãïŒã»äœ¿ããšãã ãèµ·åããçã³ã¹ãæ§æã§ EC2 ã«ç«ãŠãããšãALB ã NAT Gatewayãç¬èªãã¡ã€ã³ãšãã£ããåžžæèª²éããéãéšåããé¿ãã€ã€ãå€ããèªèšŒä»ã HTTPS ã§å°éã§ãããšãããŸã§ãäœããŸãã
ãŸãã¯çµè«ãã
- EC2 㯠Public IP ãªãã»SSH éå ¬éã«ãã管ç㯠SSM ã»ãã·ã§ã³ãããŒãžã£ãŒã«çµ±äž
- ã€ã³ããŠã³ãéä¿¡ã¯ALB ã§ã¯ãªã VPC origins ãæ¡çš
- ã¢ãŠãããŠã³ãéä¿¡ã¯NAT Gateway ã§ã¯ãªã NAT ã€ã³ã¹ã¿ã³ã¹ãæ¡çš
- èµ·åæéãåæžãããããEC2 ã®èµ·åã»åæ¢ãã¯ã³ã¯ãªãã¯ã§
Kiro Crew ããã·ã¥ããŒã
ä»åç«ãŠã Kiro Crew ã®ããã·ã¥ããŒãã¯ãããªç»é¢ã§ããããã«äŒè©±ã§ä»äºãé Œããšãåžžé§ãããšãŒãžã§ã³ãã調æ»ãå®åäœæ¥ãããªããŠãããŸãã
ããã§ã¯æ¬é¡ã«å ¥ã£ãŠãããŸãã
å šäœå
ãŸãã¯ä»åæ§æã®å šäœåãšããããæ¡çšããçããªã©ã«ã€ããŠè¿°ã¹ãŸãã
èšèšå€æãµããªãŒ
ä»åãKiro Crew ãã¯ã©ãŠãã«ç«ã¡äžããã«åœãããäžè²«ããŠãåžžæèª²éããéãéšåãé¿ããå ¥å£ãäœããã䜿ããšãã ãèµ·åãããæ¹éã§ãµãŒãã¹ãéžæããŠããŸããçŽ çŽãªæ§æïŒALBã»NAT GatewayïŒãšãä»åã®éžæã1æã§å¯Ÿæ¯ãããšæ¬¡ã®ãšããã§ãã
| è«ç¹ | çŽ çŽãªæ§æ | ä»åã®éžæ | çã |
|---|---|---|---|
| ã€ã³ããŠã³ã | ALB + authenticate-cognito
|
CloudFront VPC origins + Lambda@Edge ã® Cognito | ç¬èªãã¡ã€ã³ã»ACM èšŒææžãèŠãããALB ã®åºå®è²»ïŒæçŽ $18ïŒãæ¶ãã |
| ã¢ãŠãããŠã³ã | NAT Gateway | NAT ã€ã³ã¹ã¿ã³ã¹ïŒt4g.nanoïŒ |
NAT Gateway ã®åºå®è²»ïŒæçŽ $45ïŒãé¿ããèµ·åã»åæ¢ã ãã§çµè·¯ãæ»ã |
| 管ççµè·¯ | SSH / èžã¿å° | SSM ã»ãã·ã§ã³ãããŒãžã£ãŒïŒPublic IP ãªãã»SSH éå ¬éïŒ | å ¥å£ïŒã€ã³ããŠã³ãïŒãããããäœããªã |
| ã³ã¹ãéçš | åžžæèµ·å | /ops ããŒãžããèµ·åã»åæ¢ãã¯ã³ã¯ãªã㯠| ã䜿ããšãã ãèµ·åãã§æé課éã皌ååã ãã«ïŒå人å©çšã§æçŽ $35ïŒ |
ãçŽ çŽãªæ§æãã§ãåããŸãããALB ãš NAT Gateway ã ãã§æ $60 è¶ ã䜿ã£ãŠããªããŠãããããŸãïŒããããæé課éåãNAT Gateway ã¯ããã«å ããŠããŒã¿åŠçæ $0.062/GB ãå¥éããããŸãïŒãå人ãåžžçšããç°å¢ã§ã¯ããã®åºå®è²»ãåããã©ãããæé¡ã倧ããå·Šå³ããŸãã
ãªããã©ã€ããŒã EC2 ãªã®ã
ããããããªãããŒã«ã«ã§ã Web çã§ããªãããã©ã€ããŒã EC2 ã« Kiro Crew ãç«ãŠãããªã®ãããããå ã«æŽçããŸãã
Kiro ã«ã¯ããã€ãã®é¡ããããŸããKiro IDE ã¯äººãäž»å°ããŠéçºããå ŽæãKiro CLI ã¯ã³ãã³ããšããŠäœ¿ããã®ãKiro Web & Mobile 㯠Kiro 管çã®ã¯ã©ãŠãã«ä»äºãä»»ãã圢ããããŠä»åã®äž»åœ¹ Kiro Crew 㯠kiro-cli ãããŒã¹ã«ãèªåãã¡ã®ç°å¢ã«ãšãŒãžã§ã³ãããäœãŸãããããã«ããšãŒãžã§ã³ãã®éçšãã©ãããã©ãŒã ã§ãã
ãã®ããã§ãä»åã®çœ®ãå Žæãéžãã çç±ã3ã€ãããŸãã
- IDE ã§ã¯ãªã Crew: ããããã®ã¯åžžæã³ãŒããç·šéããéçºã§ã¯ãªãã調æ»ã»éèšã»å®åäœæ¥ãäŒè©±ã§é Œãããšããã®çšéã§ã¯åžžé§ãšãŒãžã§ã³ãåã® Crew ãåã
- Web çã§ã¯ãªãèªå: æ±ãããŒã¿ãããŒã¯ã³ããå€éš SaaS ã§ã¯ãªãèªåã®ç®¡çããç°å¢ã«çœ®ãããããã®çšéã§ã¯ Web çã¯é©ããªã
- ããŒã«ã«ã§ã¯ãªããµãŒã: PC ãéããŠãåŠçãç¶ããŠã»ãããã¹ããã¯ïŒäž»ã«ã¡ã¢ãªïŒã OSïŒLinux åæã®æåïŒã®å¶çŽãããããµãŒãåŽã«éçŽããã»ããçŽ çŽ
ãã®èšäºã¯ãŸãèªåã²ãšãããå ¬éããã»åºå®è²»ãæããŠäœ¿ããå人ç°å¢ãäœãããšããç¯å²ã«çµã£ãŠããŸããè€æ°äººãžã®å±éã¯ããã§ã¯æ±ããŸããã
AWSã¢ãŒããã¯ãã£å³
å°éç¹ã®æ§æã1æã«ãŸãšãããšæ¬¡ã®ãšããã§ããæ¥åžžå©çšã¯ CloudFront + Cognito èªèšŒãéã£ãŠ VPC origins çµç±ã§ Kiro Crew ã«å±ããEC2 ããã®å€åãéä¿¡ïŒã¢ãŠãããŠã³ãïŒã¯ NAT ã€ã³ã¹ã¿ã³ã¹ â IGW ãçµç±ããŸãã
ãªããæ§ç¯ã»ä¿å®ã®ç®¡ççµè·¯ã¯ãã®å³ã«ã¯æããŠããŸããããå¥é SSM ããŒããã©ã¯ãŒãïŒããŒã 5476ïŒ ã§æå ããçŽæ¥ã€ãªããŸãã
ãã€ã³ãã¯ãEC2 ã«å ¥å£ãäœããªãïŒã€ã³ããŠã³ãã»ãŒãïŒãå€ãžã®é信㯠NAT ã€ã³ã¹ã¿ã³ã¹ãæå ããã®ç®¡ç㯠SSM ã®ããŒããã©ã¯ãŒãããããŠæ¥åžžã®ã¢ã¯ã»ã¹ã¯ CloudFront + Cognito èªèšŒã§åããããšããåãåãã§ããããã·ã¥ããŒãããšãŒãžã§ã³ãããçŽ ã® EC2 ãšããŠã¯äžåã€ã³ã¿ãŒãããã«é²åºããŸããã
äž»èŠãªãœãŒã¹
| é ç® | å€ |
|---|---|
| VPC |
10.10.0.0/16ïŒ2 AZ æ§æãpublic/private ãå2ãµããããïŒ |
| Crew EC2 |
t3a.largeïŒ2 vCPU / 8 GiB / x86_64ïŒâ åŸã« r6a.largeïŒ16 GiBïŒãž |
| OS / ãã£ã¹ã¯ | Amazon Linux 2023 / EBS gp3 60 GBïŒæå·åïŒ+ swap 4 GB |
| NAT |
t4g.nano ã® NAT ã€ã³ã¹ã¿ã³ã¹ïŒNAT Gateway ããå®äŸ¡ïŒ |
| å ¥å£ | CloudFront VPC originsïŒALBã»ç¬èªãã¡ã€ã³ãªãïŒ+ Cognito èªèšŒ |
| 管ç | Public IP ãªãã»SSH éå ¬éã»SSM ã»ãã·ã§ã³ãããŒãžã£ãŒã®ã¿ |
EC2 ã¯æå³çã« x86_64 ãéžã³ãŸãããKiro Crew ã忢±ãã CPython ãªã©ã x86_64 åãã§ãGravitonïŒARMïŒã«ãããšåã€ã³ã¹ããŒã«ã®æéãå¢ããããã§ãã
æ§ç¯ã®å®é
æ§ç¯ã¯ããããã¯ãŒã¯ â NAT â EC2 â Kiro Crew ã€ã³ã¹ããŒã« â ãµãŒãã¹åãã®é ã§ããäŸåé¢ä¿ã®éœåã§ãIAM ããŒã«ã»ã»ãã¥ãªãã£ã°ã«ãŒãã»ãããªãã¯ã«ãŒãã¯æåã®ã€ã³ã¹ã¿ã³ã¹ãèµ·åããåã«çšæããŠããå¿ èŠããããŸããããããæã£ãŠããªããšãèµ·åããã€ã³ã¹ã¿ã³ã¹ã« SSM ã»ãã·ã§ã³ãããŒãžã£ãŒã§æ¥ç¶ã§ããªãããã§ãã
åç¯ã§ã¯ãèšèšã®èª¬æã«ç¶ããŠå®éã«äœ¿ã£ãèšå®å€ãèŒããŸããæé ãã®ãã®ã¯ AWS ã®åºæ¬æäœãªã®ã§çããŸãããå€ããã©ãã°åãæ§æãåçŸã§ããããã«ããŠãããŸãã
ãããã¯ãŒã¯
2 AZ æ§æã§ãpublic / private ãå2ãµããããäœããŸããæ¥åžžã¢ã¯ã»ã¹ã¯ãã¹ãŠ CloudFront çµç±ãªã®ã§ public ãµããããã«çœ®ãã®ã¯ NAT ã€ã³ã¹ã¿ã³ã¹ã ãã§ãCrew EC2 㯠private ãµããããã«éã蟌ããŸãã
ã«ãŒãããŒãã«ã¯ãpublic 㯠IGW ãžãprivate 㯠NAT ã€ã³ã¹ã¿ã³ã¹ã® ENI ãžåããŸãïŒ0.0.0.0/0 â eni-xxxxïŒãprivate åŽã ENI æå®ã«ããŠãããšãNAT ã忢ã»èµ·åããŠãã«ãŒããåŒµãæ¿ããã«æžã¿ãŸãã
| é ç® | èšå®å€ |
|---|---|
| VPC | 10.10.0.0/16 |
| public ãµãããã |
10.10.0.0/24ïŒ1aïŒã10.10.1.0/24ïŒ1cïŒ |
| private ãµãããã |
10.10.10.0/24ïŒ1aïŒã10.10.11.0/24ïŒ1cïŒ |
| ã«ãŒãããŒãã«ïŒpublicïŒ | 0.0.0.0/0 â IGW |
| ã«ãŒãããŒãã«ïŒprivateïŒ | 0.0.0.0/0 â NAT ã€ã³ã¹ã¿ã³ã¹ã® ENI |
ã»ãã¥ãªãã£ã°ã«ãŒãã¯2ã€ã§ããCrew EC2 çšã¯ã€ã³ããŠã³ããäžåéããªãã®ãèŠç¹ã§ãSSM ã¯ã¢ãŠãããŠã³ãã§æç«ãããã 22 çªããäžèŠã§ãïŒCloudFront ããã®å信㯠VPC origin äœæåŸã«è¿œå ïŒã
| SG | ã€ã³ããŠã³ã | çšé |
|---|---|---|
| Crew EC2 çš | ãªãïŒVPC origin äœæåŸã« TCP 5476 â CloudFront ãµãŒãã¹ç®¡ç SG ã远å ïŒ | Crew æ¬äœ |
| NAT çš | å
šãããã³ã« â 10.10.10.0/24ã10.10.11.0/24ïŒprivate ãµããããïŒ |
private ããã®äžç¶ãåãã |
NAT çš SG ã®ã€ã³ããŠã³ãããprivate ãµããããããå šãããã³ã«èš±å¯ããšåºãã«ããŠããã®ã¯ã443/80 ã ãã«çµããš DNS over TCP ã NTP ãæããŠåãåãã¥ããäžå ·åã«ãªãããã§ããéä¿¡å ã private ãµããããã® CIDR ã«éã£ãŠããã®ã§ãå€éšã«ã¯éããŠããŸããã
SSM ããŒã«èšèš
EC2 ã®ç®¡ç㯠SSM ã»ãã·ã§ã³ãããŒãžã£ãŒã«çµ±äžããŸããSSH ãèžã¿å°ã䜿ãããPublic IP ãä»ããªãã®ã§ãã€ã³ã¹ã¿ã³ã¹ãæäœããå¯äžã®çµè·¯ã SSM ã§ãããããæç«ããããããEC2 ã«ã¯ SSM æ¥ç¶ã«å¿
èŠãª AmazonSSMManagedInstanceCore ãå«ã IAM ããŒã«ãäžããŸãã管çã®çåœç·ãªã®ã§ããã®ããŒã«ã¯å€ããŸããã
- AWS 管çããªã·ãŒ
AmazonSSMManagedInstanceCoreïŒã¢ã¿ããããã ãïŒ
ãã®ãããŒãžãããªã·ãŒ1æã§ SSM ã»ãã·ã§ã³ãããŒãžã£ãŒã«æ¥ç¶ã§ããKiro Crew ã®åäœã«å¿ èŠãªæš©éãããã§è¶³ããŸããåºæ¬ã¯ããã ãã§åããŸããã1ç¹ã ãç· ããŠãããã穎ãããã®ã§ã次ã§ãããå¡ããŸãã
Deny èšèšã§ Parameter Store ãç· ãã
AmazonSSMManagedInstanceCore ã«ã¯ãæ¥ç¶çšã®æš©éïŒssmmessages:* ãªã©ïŒã ãã§ãªããssm:GetParameter ã Resource: "*" ã§èš±ãæš©éãå«ãŸããŠããŸããSSM ã¯ãã€ã³ã¹ã¿ã³ã¹æ¥ç¶ããšãParameter Store èªã¿åãããåããµãŒãã¹ã«åå±
ããŠãããããæ¥ç¶ã®ããã«ä»ããããŒã«ããã€ãã§ã«ã¢ã«ãŠã³ãå
ã®ãã¹ãŠã® Parameter Store ãèªããç¶æ
ã«ãªã£ãŠããŸããŸããKiro Crew ã¯ãã® EC2 äžã§èªåŸçã«ã·ã§ã«ã AWS CLI ãå®è¡ãããããå€éšå
¥åïŒããã³ããïŒã§é§åããããããä»ãããžã§ã¯ãã®ç§å¯ãŸã§èªã¿åããç¶æ
ã¯ç¡èŠã§ããŸããã
ããã§ããããŒãžãããªã·ãŒãå€ãã®ã§ã¯ãªããæç€ºç㪠Deny ãã€ã³ã©ã€ã³ããªã·ãŒã§éããŸãïŒDeny 㯠Allow ã«åªå ããAWS åŽã®ããªã·ãŒæŽæ°ãåãç¶ããããŸãïŒã
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyParameterStoreOutsideOwnPath",
"Effect": "Deny",
"Action": ["ssm:GetParameter", "ssm:GetParameters", "ssm:GetParametersByPath", "ssm:GetParameterHistory"],
"NotResource": [
"arn:aws:ssm:ap-northeast-1:<ACCOUNT_ID>:parameter/kiro-crew/*",
"arn:aws:ssm:ap-northeast-1::parameter/aws/service/*"
]
}]
}
SSM æ¥ç¶çšã®æš©éïŒssmmessages:* ãªã©ïŒã¯ Deny ã«å«ããŠããªãã®ã§ãã»ãã·ã§ã³ãããŒãžã£ãŒã¯åŒãç¶ã䜿ããŸãã
ãã®ããŒã«ã EC2 ã«ä»ããŠããã°ãSSH ã Public IP ã䜿ããã« SSM ã»ãã·ã§ã³ãããŒãžã£ãŒã§äžã«å ¥ããŸããããããå ã¯ãNAT ã€ã³ã¹ã¿ã³ã¹ã Crew æ¬äœãããã®ããŒã«ãä»ããåã€ã³ã¹ã¿ã³ã¹ã« SSM ã§æ¥ç¶ããŠäœæ¥ããŠãããŸããã·ã§ã«ã§äžã«å ¥ãã³ãã³ãã¯ããã§ãã
aws ssm start-session --region ap-northeast-1 --target <INSTANCE_ID>
æ¥ç¶ãããšæ¢å®ã§ ssm-user ã«ãªããŸãïŒåŸè¿°ã®ã€ã³ã¹ããŒã«æé ã§ã¯ ec2-user ã«åãæ¿ããŸãïŒã
NAT ã€ã³ã¹ã¿ã³ã¹
ãŸããNAT ãšã¯äœããããæŽçããŸãããã©ã€ããŒããµããããã® EC2 㯠Public IP ãæãããå€ïŒã€ã³ã¿ãŒãããïŒããçŽæ¥ã¯å°éã§ããŸãããã§ãããOS ã¢ããããŒãã curlãåçš® API åŒã³åºããªã© EC2 åŽããå€ã«åºãŠããéä¿¡ïŒã¢ãŠãããŠã³ãïŒ ã¯å¿
èŠã§ãããã®ãäžããã¯åºãããããå€ããã¯å
¥ããªãããå®çŸããä»çµã¿ã NATïŒNetwork Address TranslationïŒ ã§ãããã©ã€ããŒãåŽã®éä¿¡ã NAT ãåãåããèªåã®ãããªã㯠IP ã«çœ®ãæããŠå€ãžäžç¶ããŸããæ»ãã®å¿ç㯠NAT ãèšæ¶ããŠããŠãå
ã® EC2 ã«è¿ããŸãã
AWS ã§ NAT ãçšæããæ¹æ³ã¯2ã€ãããŸãã
| æ¹åŒ | äžèº« | 課é | ç¹åŸŽ |
|---|---|---|---|
| NAT Gateway | AWS ãããŒãžãã® NAT ãµãŒãã¹ | æé課éïŒæçŽ $45ïŒ+ ããŒã¿åŠçæã忢ã§ããåé€ã®ã¿ | åé·ã»é«ã¹ã«ãŒããããæéã¯ããããªããåºå®è²»ãé«ã |
| NAT ã€ã³ã¹ã¿ã³ã¹ | èªåã® EC2 ã NAT ãšããŠåãã | EC2 ã®æé課éã®ã¿ïŒt4g.nano ãªãæ°çŸå/æã忢ããã°ãŒãïŒ |
èªåã§èšå®ãèŠãåå®ããèµ·åã»åæ¢ã§ãã |
ä»åã¯ã䜿ããšãã ãèµ·åããçã³ã¹ãæ§æããç®çãªã®ã§ã忢ã§ããŠå®ã NAT ã€ã³ã¹ã¿ã³ã¹ãéžã³ãŸãããNAT ã€ã³ã¹ã¿ã³ã¹ã¯ãNAT ã®åœ¹å²ãæãããæ®éã® EC2ãã§ããæ®éã® EC2 ãšéãèšå®ã2ã€ã ããããããããã®ãŸãŸæ¬¡ã®ãããã©ããã«ãªããŸãã
éä¿¡ã®åããäžæ®µæœè±¡åãããšãããããé察称ãªé¢ä¿ã«ãªããŸããã¢ãŠãããŠã³ãïŒäžããå€ïŒã¯ NAT ãäžç¶ããŠéããã€ã³ããŠã³ãïŒå€ããäžãžã®æ¥ç¶ïŒã¯éããŸãããå€ãšã®ãããšã㯠NAT ã€ã³ã¹ã¿ã³ã¹ãäžæã«åŒãåããŸãã
æ»ãã®å¿çã EC2 ãŸã§è¿ãã®ã¯ãNAT ããã©ã®éä¿¡ãäžç¶ãããããèŠããŠããããã§ãããããŸã§äžããå§ããéä¿¡ã®å¿çã ããæ»ããå€ããæ°èŠã«æ¥ç¶ã匵ãããšã¯ã§ããŸããã
NAT ã€ã³ã¹ã¿ã³ã¹ã¯ SSM ã§æ¥ç¶ã§ããã®ã§ããŒãã¢ãªãã§èµ·åã§ããŸããããæ®éã® EC2ããšéãèšå®ã2ã€å¿ èŠã§ãã©ã¡ãããããããããã€ã³ãã§ãã
1. éä¿¡å /éä¿¡å ãã§ãã¯ãç¡å¹åãã
NAT ã¯ä»äººïŒprivate åŽã® EC2ïŒã®ãã±ãããäžç¶ããã®ãä»äºã§ãããšããã EC2 ã¯æ¢å®ã§ãèªåå®ãŠïŒèªåçºã§ãªããã±ããã¯ç Žæ£ãããå®å šãã§ãã¯ãæå¹ã§ããã®ãŸãŸã ãšäžç¶ãã±ãããæšãŠãããå€ã«åºãããŸãããããã§ãã®ãã§ãã¯ãç¡å¹åããŸãã
èšå®æã®æ³šæã2ã€ãããŸããèµ·åãã³ãã¬ãŒãã RunInstances ã«ã¯é
ç®ããªããModifyInstanceAttributeïŒã³ã³ãœãŒã«ãªãäœæåŸã®æäœïŒã§ããèšå®ã§ããŸããããããã³ã³ãœãŒã«ã®ãã§ãã¯ããã¯ã¹ã¯è¡šèšãéã§ããéä¿¡å
/éä¿¡å
ãã§ãã¯: 忢ãã«ãã§ãã¯ãå
¥ãããšç¡å¹åã«ãªããŸãã
2. OS åŽã§ IP 転éãš NAT ãèšå®ãã
Linux ã NAT ãšããŠåããã«ã¯ãIP ãã©ã¯ãŒãã£ã³ã°ïŒåãåã£ããã±ãããå¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ãžè»¢éããïŒãš NATïŒéä¿¡å IP ãèªåã® IP ã«æžãæãã ãã¹ã«ã¬ãŒãïŒã OS åŽã§æå¹ã«ããŸããä»å㯠nftables ã§èšå®ããŸããã
ããã§ OS ç¹æã®ãããã©ããããããŸããä»åã® OS 㯠Amazon Linux 2023 ã§ãnftables ãæåããèµ·åæžã¿ã§ãããã®ãããŠãŒã¶ãŒããŒã¿ã§ systemctl enable --now nftables ãšããŠãããã§ã«èµ·åããŠããã®ã§èšå®ãã¡ã€ã«ãèªã¿èŸŒãŸããŸãããenableïŒèªåèµ·åã®æå¹åïŒãš restartïŒèšå®ã®èªã¿çŽãïŒãåããŠæžããŸãã
systemctl enable nftables
systemctl restart nftables # çŽåã«æžããèšå®ãèªã¿èŸŒãŸãã
NAT çµç±ã§å€ã«åºãããŠãããã¯ãCrew EC2 ããæ¬¡ã®ããã«ç¢ºèªã§ããŸããè¿ã IP ã NAT ã®ãããªã㯠IP ãªãæåã§ãã
curl https://checkip.amazonaws.com
Kiro Crew ã®ã€ã³ã¹ããŒã«ãšãµãŒãã¹å
CLI ãš Crew ã®ã€ã³ã¹ããŒã«
EC2 ã« SSM ã§æ¥ç¶ããec2-user ã«åãæ¿ããŠããã€ã³ã¹ããŒã«ããŸãïŒSSM ã¯æ¢å®ã§ ssm-user ãšããŠãã°ã€ã³ããããïŒã
sudo su - ec2-user # -ïŒãã€ãã³ïŒã§ HOME/PATH ãæ£ããèšå®ãã
curl -fsSL https://cli.kiro.dev/install | bash # Kiro CLI ãå
ã«å
¥ãã
curl -fsSL https://download.crew.kiro.dev/cli.sh | sh # Kiro Crew
EC2 ã«ã¯ç»é¢ããã©ãŠã¶ããªãã®ã§ããã°ã€ã³ç»é¢ãéããŸãããããã§ãèªèšŒçšã® URL ãšã³ãŒãã端æ«ã«è¡šç€ºãããããæå
ã® PC ãã¹ããã®ãã©ãŠã¶ã§æ¿èªããæ¹åŒïŒããã€ã¹ãããŒïŒã䜿ããŸããçŽ ã® kiro-cli login 㯠EC2 äžã§ãã©ãŠã¶ãéãããšããŠå€±æããããã--use-device-flow ãä»ããŸãã
kiro-cli login --use-device-flow
衚瀺ããã URL ãšã¯ã³ã¿ã€ã ã³ãŒãããæå ã® PC ãã¹ããã®ãã©ãŠã¶ã§æ¿èªããã°ãã°ã€ã³å®äºã§ãã
ãã°ã€ã³ã«äœ¿ã IAM Identity Center ãªã©ã®ããŒã¯ã³ã«ã¯æå¹æéããããåãããš Crew ã LLM ãåŒã¹ãªããªããŸãããã®å Žå㯠kiro-cli login --use-device-flow ãåå®è¡ããŸãã
setup ãš cgroup
kirocrew setup ã§ã¯ãŒã¯ã¹ããŒã¹ãã¿ã€ã ãŸãŒã³ãèšå®ããŸããããã§ãAWS äžã« Kiro Crew ãèµ·åããŸããïŒããšèãããŸãããNïŒãããïŒ ã«ããŸãïŒ2å°ç®ã® EC2 ãç«ã£ãŠããŸãããïŒã
kirocrew doctor ãåºãèŠåã®ãã¡æãéèŠãªã®ã cgroup ã®èšå®ã§ãã
Kiro Crew ã¯ä»äºãåæ
ããããã«åããã»ã¹ïŒãµããšãŒãžã§ã³ãïŒã次ã
ãšç«ã¡äžããŸããæŸã£ãŠãããšã¡ã¢ãªãããã»ã¹æ°ãééãªã䜿ããããªãã®ã§ãCrew ã¯ãããã«ãã¡ã¢ãªã¯ãããŸã§ãããã»ã¹æ°ã¯ãããŸã§ããšããäžéããããŠæŽèµ°ãé²ããŸãããã®äžé㯠Linux ã® cgroupïŒããã»ã¹ããšã«è³æºã®äžéãèšããä»çµã¿ïŒã§å¹ãããã®ã§ãããcgroup ã䜿ãã«ã¯ããã®å©çšè
ïŒec2-userïŒå°çšã® systemd ã®ç®¡çæ ãç«ã¡äžãã£ãŠããå¿
èŠããããŸãã
ãšããããã®ç®¡çæ ã¯éåžžããŠãŒã¶ãŒããã°ã€ã³ããŠããéã ããååšããSSM æ¥ç¶ãæãããšæ¶ããŠããŸããŸããåžžé§ãµãŒãã¹ãšããŠåãã Crew ã§ã¯å°ãã®ã§ããã°ã€ã³ããŠããªããŠãç®¡çæ ãç«ãŠããŸãŸã«ããèšå®ïŒlingerïŒãå ¥ããŸãã
sudo loginctl enable-linger ec2-user
ls -la /run/user/1000/bus # srw-rw-rw-. ec2-user ãåºãã° OK
ãµãŒãã¹ç»é²
ãã®ããšã¯ã䜿ããšãã ã EC2 ãèµ·åããçµãã£ãã忢ãããéçšã«ããŸãããããšèµ·åã®ãã³ã« Crew ãç«ã¡äžãçŽãå¿ èŠãåºãŠããŸãããæ¯å SSM ã§å ¥ã£ãŠæã§èµ·åããã®ã¯é¢åã§ãããæ¢ãå¿ãã»ç«ãŠå¿ãã®å ã§ããããã§ Crew ã systemd ãµãŒãã¹ãšããŠåžžé§ãããOS ãèµ·åãããèªåã§ç«ã¡äžããããã«ããŸãã
kirocrew service install # /etc/systemd/system/kirocrew.service ãäœæãèµ·å
kirocrew service status
kirocrew logs -f
ããã§ Crew 㯠kirocrew gateway --no-open ã ec2-user ã§åããã127.0.0.1:5476 ã§åŸ
ã¡åããŸããåç¯ã® linger ãšçµã¿åãããããšã§ãEC2 ãèµ·åãããããã°ã誰ããã°ã€ã³ããŠããªããŠã Crew ãèªåã§ç«ã¡äžãã£ãŠåä»ç¶æ
ã«æ»ããŸããããŸãã«åæ¢ã»èµ·åããŠããèµ·åã®æäœã ãã§äœ¿ããç¶æ
ã«ãªãããã§ãïŒãã®èªå埩垰ã®å
šäœåã¯åŸè¿°ã® /ops ã®ç¯ã§ãŸãšããŸãïŒã
SSM ããŒããã©ã¯ãŒã
ãããŸã§åã€ã³ã¹ã¿ã³ã¹ã«ã¯ SSM ã§ãã·ã§ã«ãæäœãããæ¥ç¶ãããŠããŸããããSSM ã«ã¯ãã1ã€ãæå ã® PC ã®ããŒããã€ã³ã¹ã¿ã³ã¹ã®ããŒãã«è»¢éããäœ¿ãæ¹ïŒããŒããã©ã¯ãŒãïŒããããŸãã
ããã§ã¯ CloudFront ãäœã蟌ãåã«ãCrew ãã¡ãããšèµ·åããŠå¿çããããäžåºŠç¢ºèªããŠãããŸããæ¥åžžã¢ã¯ã»ã¹ã¯åŸè¿°ã® CloudFront çµç±ã«ããŸãããåäœç¢ºèªã®æ®µéã§ã¯ SSM ããŒããã©ã¯ãŒããæè»œã§ããPC åŽã§ãã³ãã«ã匵ããŸãã
aws ssm start-session \
--region ap-northeast-1 \
--target <INSTANCE_ID> \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["5476"],"localPortNumber":["5476"]}'
ããã§ãæå
ã®ãã©ãŠã¶ãã http://localhost:5476ïŒPC ã®ããŒãïŒã«åºããéä¿¡ãããã³ãã«ãéã£ãŠ EC2 ã® 5476ïŒCrew ãåŸ
ã¡åããããŒãïŒã«å±ããŸããããã·ã¥ããŒããéãã«ã¯ããŒã¯ã³ãèŠãã®ã§ãEC2 åŽã§çºè¡ããŸãã
kirocrew token --ttl 8h
ãã¡ãã®ã³ãã³ãã§åºåããã URL(ããŒã¯ã³ä»ã) ã«æå ã®ãã©ãŠã¶ããã¢ã¯ã»ã¹ããããšã§ãKiro Crew ãç«ã¡äžãããŸããïŒãã¡ãããããã§äŒè©±ãå§ããã° Kiro Crew ããã®ãŸãŸå©çšã§ããŸãïŒ
ãã«ãŒãããã¯ããã®ã¢ã¯ã»ã¹ã¯ããŒã¯ã³äžèŠããšèŠãã説æããããŸãããSSM ãã³ãã«çµç±ã§ã¯ã«ãŒãããã¯ã«èŠããŠãããŒã¯ã³ãå¿
é ã§ãããæå
ã®ãã©ãŠã¶ã¯ EC2 åŽã®ããŒã«ã«æ¡ä»¶ãæºãããªãããã§ããkirocrew token ã§çºè¡ããŠäœ¿ããŸãã
--region ãä»ãå¿ãããšãPC ã®æ¢å®ãªãŒãžã§ã³ãæ±äº¬ã§ãªãå Žåã« TargetNotConnected ãšããåããã«ãããšã©ãŒã«ãªããŸãã
CloudFront VPC origins ãš Cognito èªèšŒ
SSM ããŒããã©ã¯ãŒãã¯æå ããåäœç¢ºèªããçšéã«ã¯æè»œã§ããã䜿ããã³ã«ãã³ãã«ã匵ãçŽãã®ã¯æ¥åžžäœ¿ãã«ã¯éãã§ããããã§ãéåžžã¢ã¯ã»ã¹ã¯ CloudFront + Cognito èªèšŒã§åããŸããç¬èªãã¡ã€ã³ã ALB ã䜿ããããã©ãŠã¶ãããã®ãŸãŸèªèšŒä»ã HTTPS ã§å±ã圢ã«ããŸãã
å ¥å£ã EC2 ã«æãããªãæ§æ
ãã®æ§æã®èã¯ããã©ã€ããŒã㪠EC2 ã®æåã« èªåã§ç®¡çããå ¬éãªãœãŒã¹ïŒALB ãªã©ïŒã眮ããªãããšã§ããã€ã³ã¿ãŒãããã«é¢ããå ¥å£ã¯ AWS ãããŒãžãã® CloudFront 1æã«éçŽãããã®å ã® EC2 ã«ã¯å€ããè§Šããå£ãæãããŸãããèªåã§å®ãã¹ãå ¬éé¢ãå¢ãããªãã®ã§ãSGã»èšŒææžã»ãã¡ã€ã³ã»WAF ãšãã£ã管ç察象ããã®åæžããŸãã
EC2 ãžã®å€éšããã®çä¿¡ãæç«ããªãã®ã¯ã次ã®3ã€ãæã£ãŠããããã§ãã
- EC2 ã«å ¬é IP ã®çµè·¯ããªãã Public IP ãä»ããããã©ã€ããŒããµããããã«çœ®ããŠããŸããã€ã³ã¿ãŒããããã EC2 ã® IP ãžãã±ãããé£ã°ãçµè·¯ãããããååšããŸããã
-
EC2 ã®ã»ãã¥ãªãã£ã°ã«ãŒãã®ã€ã³ããŠã³ãããCloudFront ã®ãµãŒãã¹ç®¡ç SG ã ããã
0.0.0.0/0ã® 443 ã®ãããªãå€ããçŽæ¥å©ã穎ããäžåéããŠããŸãããèš±å¯ããŠããã®ã¯CloudFront-VPCOrigins-Service-SG...ãšãã CloudFront å°çšã®éä¿¡å ã ãã§ããã以å€ã¯ãã¹ãŠ SG ã§èœã¡ãŸãã - CloudFront ãã EC2 ãžã®çµè·¯ããã€ã³ã¿ãŒããããéããªã VPC å ã®å°çšç·ã åŸè¿°ã® VPC origins ã«ãããCloudFront ã¯ãµãŒãã¹ç®¡ç ENI ã䜿ã£ãŠ VPC å ã§ EC2 ã«çŽçµããŸããEC2 ãå ¬éãããã¯ãŒã¯ã«åºãå¿ èŠããããŸããã
ã€ã³ã¿ãŒãããã«é¢ããŠããã®ã¯ AWS ãããŒãžãã® CloudFront ã ãã§ãèªåã§ç®¡çããå ¬éãªãœãŒã¹ã¯ãããŸãããEC2 ã¯å ¬é IP ãå€åãã® SG 穎ãå ¬éçµè·¯ãæããªãââããããã€ã³ããŠã³ãã»ãŒããã®äžèº«ã§ãã
ALB ãšã®éã
çŽ çŽã«èãããšãALB + authenticate-cognitoãã§ãããããã«ã¯2ã€ã®å£ããããŸãã1ã€ã¯ authenticate-cognito ã HTTPS ãªã¹ããŒéå®ã§ãHTTPS ã«ã¯ ACM èšŒææžãACM ã«ã¯èªåã®ãã¡ã€ã³ãèŠãç¹ãç¬èªãã¡ã€ã³ãçšæããªãæ¹éã ãšãALB + Cognito ã¯æç«ããŸããããã1ã€ã¯ãALB èªäœã ã€ã³ã¿ãŒãããã«é¢ããå
¬éãªãœãŒã¹ã«ãªãç¹ã§ããEC2 ããã©ã€ããŒãã«çœ®ããŠããä»åºŠã¯ ALB ãšããå®ãã¹ãå
¬éé¢ã1æå¢ããŸãã
VPC origins æ§æãšã®éãã䞊ã¹ããšããå ¬éãªãœãŒã¹ããŒãã«ã§ãããããšãã¯ã£ããããŸãã
| ALB æ§æïŒçŽ çŽãªæ¡ïŒ | VPC origins æ§æïŒä»åïŒ | |
|---|---|---|
| å ¬é IP ãæã€æåã®éšå | ALBïŒã€ã³ã¿ãŒãããåãïŒ | ãªãïŒCloudFront ã®ã¿ãå ¬éé¢ïŒ |
| EC2 ã®ã€ã³ããŠã³ã | ALB ã® SG ããã® 443 | CloudFront ãµãŒãã¹ç®¡ç SG ã®ã¿ |
| EC2 â æåã®çµè·¯ | VPC å ïŒALB â EC2ïŒ | VPC å ïŒENI çŽçµïŒ |
| ã€ã³ã¿ãŒãããã«é¢ããèªåãªãœãŒã¹ | ALBïŒå®ã察象ãå¢ããïŒ | ãŒãïŒCloudFront 㯠AWS ãããŒãžãïŒ |
| ç¬èªãã¡ã€ã³ | å®è³ªå¿ é ïŒHTTPS / ACMïŒ | äžèŠ |
ALB æ§æã§ã EC2 èªäœã¯ãã©ã€ããŒãã«çœ®ããŸãããALB ãšããå ¬éãªãœãŒã¹ã1æå¢ããåãå®ãé¢ïŒWAFã»SGã»èšŒææžã»ãã¡ã€ã³ïŒãå¢ããŸããVPC origins ã¯å ¬éé¢ã CloudFront 1æã«å¯ããèªåã®å ¬éãªãœãŒã¹ããŒãã«ã§ããŸãããããåç¯ã®ãå ¥å£ã EC2 ã«æãããªãããæ¯ããŠããŸãã
VPC origins ã®èšå®
æ¬é¡ã«å ¥ãåã« VPC origins ãšã¯äœããæŽçããŸããCloudFront ã¯ããªãªãžã³ïŒé ä¿¡å ïŒãã®ã³ã³ãã³ããäžçäžã®ãšããžã«ãã£ãã·ã¥ã»äžç¶ãã CDN ã§ããåŸæ¥ããã®ãªãªãžã³ã«ãã©ã€ããŒããµããããã® EC2 ãçŽæ¥æå®ããããšã¯ã§ããŸããã§ãããéã« ALB ã NLB ã®ãããªãã€ã³ã¿ãŒãããåŽãã CloudFront ãå°éã§ããåãå£ãã眮ãå¿ èŠããã£ãã®ã§ãã
VPC originsïŒ2024幎11æã«ç»å ŽïŒã¯ããã®åãå£ãäžèŠã«ããæ©èœã§ããCloudFront ã VPC ã®äžã« ãµãŒãã¹ç®¡ç ENIïŒCloudFront å°çšã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ïŒ ãèªåã§äœãããããéããŠãã©ã€ããŒããµããããã® EC2 ãžçŽæ¥ã€ãªããŸããEC2 ã« Public IP ãä»ãããã€ã³ã¿ãŒãããã«ãé²åºããªããŸãŸãCloudFront çµç±ã§ã ãå°éã§ãã圢ã«ãªããŸãã
ãã£ããèšããšããALB ã眮ããã«ãCloudFront ãšãã©ã€ããŒã EC2 ã VPC å ã®å°çšç·ã§çŽçµãããã®ã VPC origins ã§ããä»åã®ããã« ALB ãé¿ãããïŒïŒåºå®è²»ãšç¬èªãã¡ã€ã³ãé¿ãããïŒæ§æãšçžæ§ãè¯ãæ©èœã§ãã
VPC origins ã䜿ããšããã©ã€ããŒããµããããã® EC2 ãçŽæ¥ãªãªãžã³ã«ã§ããŸããALB ãæãå¿ èŠããããŸãããèŠç¹ã¯æ¬¡ã®ãšããã§ãã
| é ç® | å 容 |
|---|---|
| 察å¿ãªãªãžã³ | ALB / NLB / ãã©ã€ããŒããµããããã® EC2 |
| æ±äº¬ãªãŒãžã§ã³ | 察å¿ããã ã apne1-az3 ãé€ã
|
| ãµããããèŠä»¶ | 空ã IPv4 ã1ã€ä»¥äžãCloudFront ããµãŒãã¹ç®¡ç ENI ãäœãïŒIP 远å è²»çšãªãïŒ |
| NACL | ã€ã³ããŠã³ãã¯è©äŸ¡ãããªããã¢ãŠãããŠã³ãã®ã¿ãšãã§ã¡ã©ã«ããŒãèš±å¯ãå¿ èŠ |
| 䜿ããªããã® | origin request / response ã® Lambda@Edge ããªã¬ãŒïŒèªèšŒã viewer-request ã«çœ®ãçç±ãåŸè¿°ïŒ |
2025幎11æã®æ°ããå®é¡ãã©ã³ã§ã¯ VPC origins ã Business($200/æ)以äžã§ããç¡æãã©ã³ã§ã¯ VPC origins ã䜿ããä»åã®æ§æãçµããªããããPay as you goïŒåŸé課éïŒ ãéžã³ãŸããPay as you go ã¯æé課éããªãã䜿ããªãæéã«ç¡å¹åããã°å®è³ªãŒãã§ãã
ãªãªãžã³åŽ EC2 ã®ã»ãã¥ãªãã£ã°ã«ãŒãã¯ãVPC origin äœææã«èªåçæããããµãŒãã¹ç®¡ç SGïŒCloudFront-VPCOrigins-Service-SG...ïŒããã®ã€ã³ããŠã³ãã ããèš±å¯ããŸããããã§ EC2 ã¯ãèªåã® CloudFront ããã®éä¿¡ã ããåãä»ãããã以å€ã¯ãã¹ãŠé®æãããŸãã
ãã£ãã·ã¥ããªã·ãŒã®èœãšã穎
CloudFront ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãäœæãããšãããŠã£ã¶ãŒãã VPC origin åãã®æ¢å®ãã£ãã·ã¥ããªã·ãŒãèªåã§åœãŠãŠãããŸãããšããããã®æ¢å®ããªã·ãŒã¯ãã¯ãšãªæååã転éããŸããããã°ã€ã³ããŒã¯ã³ã ?token=<JWT> ã§æž¡ãèšèšã ãšãããŒã¯ã³ãå±ããæ°žä¹
ã«ãã°ã€ã³ã§ããŸããã
Behaviors â Default (*) â Edit ã§ã次ã®ããã«å·®ãæ¿ããŸãã
| é ç® | ãŠã£ã¶ãŒãã®æ¢å® | 倿ŽåŸ |
|---|---|---|
| Cache policy | UseOriginCacheControlHeaders |
Managed-CachingDisabled |
| Origin request policy | ãªã | Managed-AllViewer |
Managed-AllViewer ã¯ãã¥ãŒã¯ãŒã®å
šããããŒã»å
š Cookieã»å
šã¯ãšãªæååã転éããã®ã§ãHost ããããŒãã¯ãšãªæååããªãªãžã³ã«å±ããŸãã
ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®èšå®å€ã¯ãã®éãã§ãã
| é ç® | èšå®å€ |
|---|---|
| æéãã©ã³ | Pay as you goïŒå®é¡ãã©ã³ã¯ VPC origins ã Business 以äžã®ããäžå¯ïŒ |
| ãã¡ã€ã³ | CloudFront æ¢å®ãã¡ã€ã³ïŒç¬èªãã¡ã€ã³ã»ACM ãªãïŒ |
| WAF | ãªã |
| ãªãªãžã³ | VPC originïŒprivate ã® Crew EC2ãHTTP 5476ïŒ |
ããã€ãã¢ïŒ/ïŒ |
Cache=Managed-CachingDisabledãOriginRequest=Managed-AllViewerãviewer-request=Lambda@Edge |
Lambda@Edge ãš Cognito
ãããŸã§ã§ CloudFront ãã EC2 ãŸã§éä¿¡ãå±ãããã«ãªããŸãããç¶ããŠããã®å ¥å£ã«èªèšŒãèŒããŠãããŸããä»åã®ããŒã«ãªãã®ã Lambda@Edge ã§ãã
ãŸã Lambda@Edge ãšã¯äœãããæŽçããŸããéåžžã® Lambda ã¯ç¹å®ã®ãªãŒãžã§ã³ã§åããŸãããLambda@Edge 㯠CloudFront ã®ãšããžïŒäžçäžã®é ä¿¡æ ç¹ïŒã§ãªã¯ãšã¹ãã«å²ã蟌ãã§å®è¡ããã Lambda ã§ããCloudFront ãéã1ãªã¯ãšã¹ãã®æµãã«ã¯4ã€ã®ã¿ã€ãã³ã°ããããã©ãã§å²ã蟌ãããéžã¹ãŸãã
| ããªã¬ãŒ | å®è¡ã¿ã€ãã³ã° |
|---|---|
| viewer-request | ãã©ãŠã¶ â CloudFront ã«å±ããçŽåŸïŒãªãªãžã³ã«è¡ãåïŒ |
| origin-request | CloudFront â ãªãªãžã³ã«åãã«è¡ãçŽå |
| origin-response | ãªãªãžã³ â CloudFront ã«è¿ã£ãŠããçŽåŸ |
| viewer-response | CloudFront â ãã©ãŠã¶ã«è¿ãçŽå |
ä»åã¯ããªãªãžã³ïŒEC2ïŒã«å±ãåã«èªèšŒãæã¿ãããã®ã§ãviewer-request ã䜿ããŸããããã§æªèªèšŒã匟ããŠããŸãã°ãèªèšŒãããŠããªããªã¯ãšã¹ãã¯ãããã EC2 ãŸã§å°éããŸããã
VPC origins ã§ã¯ origin-request / origin-response ããªã¬ãŒã¯äœ¿ããŸãããèªèšŒã viewer-request ã«çœ®ãã®ã¯ããã®å¶çŽãšãåã¿åã£ãéžã³æ¹ã§ãã
èªèšŒã¯ cognito-at-edge ã viewer-request ããªã¬ãŒã® Lambda@Edge ã«èŒããŸããæªèªèšŒã®ãªã¯ãšã¹ã㯠Cognito ã®ãããŒãžããã°ã€ã³ãž 302 ã§ãªãã€ã¬ã¯ããããèªèšŒæžã¿ã ãããªãªãžã³ã«å±ããŸãããŠãŒã¶ãŒç®¡ç㯠Cognito User Pool ã§è¡ããå人å©çšãªããŠãŒã¶ãŒã¯1人ã§ãã
Cognito åŽã®èšå®å€ã¯ãã®éãã§ããç¬èªãã¡ã€ã³ã¯äœ¿ããããããŒãžããã°ã€ã³çšã® prefix ãã¡ã€ã³ïŒxxxxx.auth.ap-northeast-1.amazoncognito.comãç¡æïŒã䜿ããŸãã
| é ç® | èšå®å€ |
|---|---|
| User Pool | ãµã€ã³ã€ã³ã¯ Emailãã»ã«ããµã€ã³ã¢ããç¡å¹ïŒç®¡çè ããŠãŒã¶ãŒãäœæïŒ |
| ã¢ããªã¯ã©ã€ã¢ã³ã |
ã·ãŒã¯ã¬ããããïŒcognito-at-edge ã confidential client ãšããŠäœ¿ãïŒãOAuth 㯠Authorization code grant |
| ã³ãŒã«ãã㯠URL | https://xxxxxxxx.cloudfront.net |
| ãã¡ã€ã³ | Cognito prefix ãã¡ã€ã³ïŒç¡æïŒ |
| ããŒã¯ã³æå¹æé | ID / Access 60åãRefresh 30æ¥ |
ãã®èªèšŒãããŒãå³ã«ãããšæ¬¡ã®ãšããã§ããåå㯠Cognito ãžã®åŸåŸ©ïŒ302ïŒãæãŸããèªèšŒåŸã¯ Cookie ãæã£ããªã¯ãšã¹ãã ãããªãªãžã³ã® EC2 ãŸã§å±ããŸãã
302 ã§é£ã°ãããå ãããã® Cognito ã®ãããŒãžããã°ã€ã³ç»é¢ã§ãããããééãããªã¯ãšã¹ãã ãããªãªãžã³ã® EC2 ã«å±ããŸãã
Lambda@Edge ã«ã¯éåžžã® Lambda ãšéãå¶çŽãå€ãããããäžçªããããããç®æã§ãã
- ç°å¢å€æ°ã䜿ããªãã User Pool ID ãªã©ã®èšå®ã¯ã³ãŒãã«çŒã蟌ã¿ãŸãïŒèšå®ãããš CloudFront ãžã®é¢é£ä»ãã倱æããïŒ
- å®è¡ããŒã«ã®ä¿¡é Œããªã·ãŒã«
lambda.amazonaws.comãšedgelambda.amazonaws.comã®äž¡æ¹ãå¿ èŠ - 颿°ã¯ us-east-1 ã«äœããé¢é£ä»ããããã®ã¯çºè¡æžã¿ããŒãžã§ã³ïŒ
$LATESTã¯äžå¯ïŒ
èªèšŒããžãã¯ã¯ awslabs ã® cognito-at-edge ã«ä»»ããã®ã§ãèªåã§æžãã®ã¯ãèšå®ãæž¡ããŠåŒã³åºãã ããã®ããçãã³ãŒãã§ããèšå®å€ïŒUser Pool ID ãªã©ãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããå«ãïŒã¯å¥ãã¡ã€ã«ã«åãåºããå®å€ã®ãã¡ã€ã«ã¯ git 管çããå€ããŸããã»ãŒãã®ãŸãŸäœ¿ãã圢ãªã®ã§ããµã³ãã«ãšããŠå
šæãèŒããŸãã
// config.jsïŒèšå®å€ã ãã眮ããå®å€ã®ãã¡ã€ã«ã¯ git é€å€ïŒ
module.exports = {
region: 'ap-northeast-1',
userPoolId: 'ap-northeast-1_xxxxxxxxx',
userPoolAppId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
userPoolAppSecret: 'xxxxxxxxxxxxxxxxxxxx', // ã¢ããªã¯ã©ã€ã¢ã³ãã®ã·ãŒã¯ã¬ãã
userPoolDomain: 'xxxxxxxx.auth.ap-northeast-1.amazoncognito.com',
};
// index.jsïŒLambda@Edge ã®ãã³ãã©æ¬äœïŒ
const { Authenticator } = require('cognito-at-edge');
const config = require('./config');
const authenticator = new Authenticator({
region: config.region,
userPoolId: config.userPoolId,
userPoolAppId: config.userPoolAppId,
userPoolAppSecret: config.userPoolAppSecret,
userPoolDomain: config.userPoolDomain,
cookieExpirationDays: 30, // ã¢ããªã¯ã©ã€ã¢ã³ãã® Refresh ããŒã¯ã³æå¹æéã«åããã
disableCookieDomain: true, // Cookie ããã® CloudFront ãã¹ãã ãã«çµãïŒãµããã¡ã€ã³ã«åºããªãïŒ
httpOnly: true, // ããã·ã¥ããŒã㯠JS ãã Cookie ãèªãŸãªãã®ã§ HttpOnly ã«ã§ãã
sameSite: 'Lax', // Cognito ãã°ã€ã³ããã®æ»ãïŒãããã¬ãã«é·ç§»ïŒã§ Cookie ãéãã
logLevel: 'silent', // åŸè¿°ã®çç±ã§ silent åºå®
});
// viewer-request ã§å
šãªã¯ãšã¹ããèªèšŒãæªèªèšŒã¯ Cognito ãã°ã€ã³ãž 302
exports.handler = async (event) => authenticator.handle(event);
ããã cognito-at-edge ãšäžç·ã« zip ã«åºããŠã¢ããããŒãããŸãïŒnpm install ãã node_modules ããšåºããããesbuild ãªã©ã§ãã³ãã«ããŸãïŒã
cognito-at-edge ã® logLevel ã error 以äžã«äžãããšã倱ææãã°ã« Authorization: Basic <base64(clientId:secret)> ãåºãŸããBase64 ã¯å¯éãªã®ã§å®è³ªã·ãŒã¯ã¬ããã®å¹³æåºåã§ããlogLevel: 'silent' ã«ããŠãããŸãã
ããã§ãç¬èªãã¡ã€ã³ã ALB ããªãã«ããã©ãŠã¶ãã https://xxxxxxxx.cloudfront.net ãéããš Cognito ãã°ã€ã³ãæãŸããèªèšŒåŸã« Kiro Crew ã®ããã·ã¥ããŒãã«å°éã§ããŸããPC ã§ãã¹ããã§ãã远å ã®ãã³ãã«ãªãã§å±ããŸãã
/ops èµ·å忢ãã¿ã³
å人å©çšãªã®ã§ãã³ã¹ãã¯ã䜿ããšãã ãèµ·åãã§æããŸããèµ·åã»åæ¢ãã®ãã®ã¯ãAWS CLI ãªã2ã€ã³ã¹ã¿ã³ã¹ïŒCrew ãš NATïŒããŸãšããŠ1ã³ãã³ãã§å©ããŸãã
# èµ·å
aws ec2 start-instances --region ap-northeast-1 --instance-ids <CREW_ID> <NAT_ID>
# 忢
aws ec2 stop-instances --region ap-northeast-1 --instance-ids <CREW_ID> <NAT_ID>
ãããæå ã§æã£ãŠãããã®ã§ãããPC ãéã㊠CLI ãå©ãã®ã¯å°å³ã«é¢åã§ãé¢åã ãšæ¢ãå¿ããŠèª²éãç¶ããŸããã¹ããããã ãšäžæéã§ããããŸãã
ããã§ãæ¢åã® CloudFront ãš Cognito ã« /ops ãšããããŒãžãçžä¹ããããŸããããã¿ã³ãæŒããš Lambda ã® Function URL çµç±ã§ EC2ïŒãš NAT ã€ã³ã¹ã¿ã³ã¹ïŒãèµ·åã»åæ¢ããŸããèªèšŒã¯æ¢åã® Cognito ã«ãã®ãŸãŸä¹ãã®ã§ãPC ã§ãã¹ããã§ãå®å
šã«ã¯ã³ã¯ãªãã¯ã§æäœã§ããã«ãŒãããŒãã«ã®æäœãäžèŠã§ããæ¢ãå¿ãã®ããŒãã«ãäžããããšãããã®ãŸãŸçã³ã¹ãã«å¹ããŸãã
å®éã® /ops ããŒãžããã¡ãã§ããã¹ããããã§ãããã®ãã¿ã³ã²ãšã€ã§ EC2 ãš NAT ãèµ·åã»åæ¢ã§ããŸãã
ã䜿ããšãã ã /ops ã§èµ·å â çšãæžãã ã忢ããç¿æ £ã«ãããšãEC2 ã®æé課éã¯çšŒåæéåã ãã«ãªããŸããåŸè¿°ã®ã³ã¹ã詊ç®ã§ãåžžæçšŒåãšå人å©çšã§æé¡ã倧ããå€ããã®ã¯ãã®éçšãå¹ãããã§ãã
èµ·åã»åæ¢ã ãã§æ»ãä»çµã¿
ããã¿ã³ã§èµ·åããã ãã§ããŸãå€ã«ãäžã«ãã€ãªãããã®ã¯åœããåã®ããã§ããããã㯠NAT Gateway ã§ã¯ãªã NAT ã€ã³ã¹ã¿ã³ã¹ãéžãã ããããæç«ããŠããŸãã
-
Crew ã¯èªåã§åŸ
ã¡åãã«æ»ã:
kirocrew service installã§ systemd ã«ç»é²æžã¿ã§ãloginctl enable-lingerãå¹ãããŠããã®ã§ãã€ã³ã¹ã¿ã³ã¹ãèµ·åããã° OS èµ·åæã«ãµãŒãã¹ãèªåã§ç«ã¡äžãã127.0.0.1:5476ã§åŸ ã¡åããŸãããã°ã€ã³ããŠããªããŠãèµ·åããã ãã§åä»ç¶æ ã§ã -
ã¢ãŠãããŠã³ã㯠NAT ã® IP ã«äŸåããªã: ãã©ã€ããŒããµããããã®ã«ãŒã㯠NAT ã®ãããªã㯠IP ã§ã¯ãªã ENIïŒ
0.0.0.0/0 â eni-xxxxïŒãæããŠããŸãã忢ã»èµ·åããŸããã§ ENI IDã»ãã©ã€ããŒã IPã»éä¿¡å /å®å ãã§ãã¯ç¡å¹åã»ã«ãŒãã¯ä¿æãããå€ããã®ã¯ãããªã㯠IP ã ããã«ãŒãã¯åæ¢äžblackholeãèµ·åã§èªåçã«activeãžæ»ãã®ã§ãIP ãå€ãã£ãŠãã«ãŒãããŒãã«ãè§Šãå¿ èŠããããŸãã - ã€ã³ããŠã³ãã¯ãããã NAT ã® IP ãçµç±ããªã: å€ããã®å°é㯠CloudFront ã® VPC originïŒãµãŒãã¹ç®¡ç ENI çµç±ïŒãš SSM ã§ããããã NAT ã®ãããªã㯠IP ãšã¯ç¡é¢ä¿ã§ã
å³ã«ãããšãèµ·åã®äžçºã§ãäžïŒCrew ã®åŸ ã¡åãïŒãããå€ïŒã¢ãŠãããŠã³ãïŒããèªåã§å ã«æ»ãæ§åã远ããŸããå€ããã®ã¯ NAT ã®ãããªã㯠IP ã ãã§ãã«ãŒããæãã®ã¯ ENI ãªã®ã§è§Šãå¿ èŠããããŸããã
ããã NAT Gateway ã ãšåœããåã§ã¯ãªããªããŸããNAT Gateway ã«ã¯ã忢ãããªãåé€ããã§ããªããããèµ·ãããã³ã«äœãçŽããŠã«ãŒãããŒãã«ã®åãå ãå·®ãæ¿ããææ°ãšäºæ ã®ãªã¹ã¯ãå¢ããŸãã
403 ã3ååºãã®ã¯æ£åžž
ãã® /ops ã¯äžçºã§éã£ãããã§ã¯ãªããåãããªããå±€ãç©ãã§èª¿æŽããŸãããå€å±€é²åŸ¡ïŒCognito ç¶æ¿ã»Function URL ã® AWS_IAM èªèšŒã»OAC ã®ãªãœãŒã¹ããªã·ãŒã»å®è¡ããŒã«ã®2å°éå®ïŒã1æãã€è¶³ããŠããéçšã§ã/ops/ ã¯3å 403 ãè¿ããŸãããããããããåå ãéããŸãã
| 段é | 403 ã®çç± |
|---|---|
| Function URL ãçŽæ¥éã | 眲åãªããªã¯ãšã¹ãã®ããïŒAWS_IAM èªèšŒïŒ |
| /ops* ããã€ãã¢ã远å ããçŽåŸ | Lambda ã®ãªãœãŒã¹ããªã·ãŒæªèšå®ã®ãã |
| ïŒãªãœãŒã¹ããªã·ãŒæå ¥åŸïŒ | éé |
å šå±€ãæã£ãŠåããŠéãã®ã§ãéäžã® 403 ã¯å€±æã§ã¯ãªãæ£åžžãªééç¹ã§ããããããå£ããããšèª€èªããŠèšå®ãæ»ããšãããã£ãŠé åãã«ãªããŸããåãããªãããã©ã® 403 ãããåãåããã®ãè¿éã§ããã
/ops ãæ§æããèŠçŽ ã®èšå®å€ã¯ãã®éãã§ãã
| èŠçŽ | èšå®å€ |
|---|---|
| ops Lambda | æ±äº¬ãPythonãEC2 ãš NAT ã®èµ·å/忢ãšç¶æ ååŸãåŠç |
| Function URL | èªèšŒã¿ã€ã AWS_IAMïŒçœ²åãªããªã¯ãšã¹ãã¯æåŠïŒ |
| OAC | CloudFront â Function URL ã SigV4 眲åãLambda ã®ãªãœãŒã¹ããªã·ãŒã§ãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ããã®ã¿èš±å¯ |
CloudFront ããã€ãã¢ïŒ/ops*ïŒ |
ãªãªãžã³=Function URLãviewer-request=Lambda@EdgeïŒCognito ãç¶æ¿ïŒãCache ç¡å¹ |
| å®è¡ããŒã« |
ec2:StartInstances / StopInstances ã察象2ã€ã³ã¹ã¿ã³ã¹ã® ARN ã«éå®ãDescribeInstances ã®ã¿å
šäœ |
ããã§ããœã³ã³ããã§ãã¹ããããã§ãã奜ããªãšãã«èµ·åã»åæ¢ã§ããæ§æãæŽããŸããã
ã€ã³ã¹ã¿ã³ã¹ãµã€ãžã³ã°ãšã³ã¹ã
ä»åã®æ§æã«ã€ããŠãã³ã¹ãã®è©Šç®ãããŠãããŸãã
ã¡ã¢ãªäžè¶³ãšã€ã³ã¹ã¿ã³ã¹å€æŽ
ãŸãã¯ã€ã³ã¹ã¿ã³ã¹ã®ãµã€ãºã確å®ãããŸãã
Kiro Crew ã®ç°å¢æ§ç¯åŸããã°ããéçšããŠã¿ããšããããµããšãŒãžã§ã³ãã®èµ·åããã¡ã¢ãªäžè¶³ãã§æåŠãããäºè±¡ãåºãŸãããå®éã«ã¯ãŸã£ãããã®æ§æãªãã§ã¯ã®èœãšã穎ã§ãã
åå 㯠Kiro Crew ã® spawn_min_memory_gb: 4.0 èšå®ã§ãç©ç空ãã¡ã¢ãªã 4 GB ãåããšãµããšãŒãžã§ã³ãã®èµ·åãæåŠããŸããt3a.largeïŒ8 GiBïŒã§ã¯ Crew èªèº«ã§ã»ãŒåãŸãã空ããçŽ 1.4 GiB ããæ®ããããµããšãŒãžã§ã³ãã®èµ·åããã®éŸå€ã§æ¢ãŸããŸããã
ã¹ã¯ãããè¶³ããŠã解決ããŸããã Crew ãèŠãŠããã®ã¯ç©ç空ã RAM ã§ãã£ãŠãã¹ã¯ããã§ã¯ãªãããã§ããRAM ãã®ãã®ãå¢ãããããããŸããã
察åŠãšã㊠16 GiB ã«å¢ãããŸããx86_64 ãç¶æãããã®ã§ïŒCPython ã MCP ãã€ããªã x86_64ïŒãr6a.largeïŒ2 vCPU / 16 GiBïŒãéžã³ãŸããã
ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã®å€æŽã«ã¯åæ¢ãå¿ èŠã§ãããããªã忢ããŠãããã®ã§ãããKiro Crew ã¯ç¶æ ã SQLite ã«æã€ã®ã§ãå ã« kirocrew ãµãŒãã¹ãæ¢ã㊠æžã蟌ã¿ã確å®ïŒWAL ããã§ãã¯ãã€ã³ãïŒãããŠãã忢ãããšå®å šã§ãã
# EC2 åŽ: ãµãŒãã¹ãæ¢ããŠãã OS ãã·ã£ããããŠã³
sudo systemctl stop kirocrew
sudo shutdown -h now
忢ããããã³ã³ãœãŒã«ãŸã㯠CLI ã§ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã r6a.large ã«å€æŽããŠèµ·åããŸãã
# æå
ïŒããœã³ã³ïŒåŽ: ã¿ã€ã倿ŽããŠèµ·å
aws ec2 modify-instance-attribute --region ap-northeast-1 \
--instance-id <CREW_ID> --instance-type r6a.large
aws ec2 start-instances --region ap-northeast-1 --instance-ids <CREW_ID>
èµ·ååŸã¯ systemd ã«ãã Crew ãèªåã§ç«ã¡äžãããŸããfree -h ã§ç©ºãã¡ã¢ãªã確èªããçŽ 11 GiB 確ä¿ã§ããŠããã°ãµããšãŒãžã§ã³ããåé¡ãªãèµ·åããŸãã
ã³ã¹ã詊ç®
確å®ããã€ã³ã¹ã¿ã³ã¹ïŒCrew = r6a.largeãNAT = t4g.nanoïŒãããšã«æé¡ã2ãã¿ãŒã³ã§æŠç®ããŸãããå人å©çšã¯ãå¹³æ¥ã®å€ãšé±æ«ãã£ã€ãå©çšã§çšŒåæéã¯æ200Hrãæ³å®ããŠããŸãã
| é ç® | æ§æ | åžžæçšŒå | å人å©çš |
|---|---|---|---|
| EC2 Kiro Crew |
r6a.largeïŒ2 vCPU / 16 GiBïŒ |
çŽ $100 | çŽ $27 |
| EBS | gp3 68 GB | $6.5 | $6.5 |
| EC2 NAT ã€ã³ã¹ã¿ã³ã¹ | t4g.nano |
çŽ $5 | çŽ $1 |
| ãã®ä» | CloudFront / Cognito / Lambda ç | ã»ãŒ $0 | ã»ãŒ $0 |
| åèšïŒæŠç®ïŒ | çŽ $110/æ | çŽ $35/æ |
ãã€ã³ãã¯2ã€ãããŸãã
ã²ãšã€ã¯ãEBS ã ãã¯çšŒåæéã«é¢ä¿ãªã課éãããããšãEC2 ãš NAT ã¯ãèµ·åããæé à å䟡ãã§ãããEBS ã¯åæ¢äžãããªã¥ãŒã ãååšããéã課éãããŸãã衚ã®å人å©çšã§ EC2 ãçŽ \$27ãNAT ãçŽ \$1 ãŸã§äžãã£ãŠã EBS ã® $6.5 ã¯æºé¡æ®ãã®ã¯ãã®ããã§ããã€ãŸãæ¢ããŠããéã®åŸ æ©ã³ã¹ã㯠EBS ã®çŽ $6.5/æã ãã«ãªããŸãã
ããã²ãšã€ã¯ãæé課éã®ã»ãšãã©ã EC2 Crew ã«éäžããããšãNAT 㯠$1ããã®ä»ïŒCloudFront / Cognito / LambdaïŒã¯ãªã¯ãšã¹ã課éã®ã¿ã§1ãŠãŒã¶ãŒãªãææ°ã»ã³ãçšåºŠã§ããçµå±ãã®æ§æã®æé¡ã¯ãr6a.large ãäœæéåããããã§ã»ãŒæ±ºãŸããŸãã
ãããçŽ çŽãªæ§æãã§ ALB ãš NAT Gateway ã䜿ããšãALB ã§æããã \$18ãNAT Gateway ã§æããã \$45 ãåžžæäžä¹ããããŸããããããæé課éåã§ããã©ãã£ãã¯ããŒãã§ãçºçãNAT Gateway ã¯ããã«ããŒã¿åŠçæ \$0.062/GB ãéä¿¡éã«å¿ããŠä¹ããŸãã
ãããã©ããäžèЧ
æåŸã«æ§ç¯äžã«å®éã«ã€ãŸãããããããã€ã³ããããããããŠãããŸããã©ããããšã©ãŒã¡ãã»ãŒãžããã¯åå ãèªã¿åãã«ããããã£ãããªã¿ã€ãã®ãã®ã§ãã
| äºè±¡ | äœãèµ·ããã | åé¿ç |
|---|---|---|
| NAT ã®éä¿¡å /éä¿¡å ãã§ã㯠| ç¡å¹åããªããš NAT çµç±ã§å€ã«åºãããªããã³ã³ãœãŒã«ã¯è¡šèšãéïŒãã§ãã¯ãå ¥ãããšç¡å¹åïŒ |
ModifyInstanceAttribute ã§èšå®ãèµ·åãã³ãã¬ãŒãã»RunInstances ã«ã¯é
ç®ããªã |
| Amazon Linux 2023 ã® nftables |
enable --now ã ãã§ã¯èšå®ãèªã¿èŸŒãŸãã NAT 転éãå¹ããªã |
enable ãš restart ãåããŠãèšå®ãèªã¿çŽããã |
| SSM ãã³ãã«ã®ããŒã¯ã³ | ãã«ãŒãããã¯ã¯ããŒã¯ã³äžèŠããšèª€è§£ããŠããã·ã¥ããŒãã«ã¢ã¯ã»ã¹ã§ããªã | ãªã¢ãŒãã®ãã©ãŠã¶ã¯ããŒã«ã«ã·ãŒã¯ã¬ãããæç€ºã§ããªãããããã³ãã«çµç±ã¯ããŒã¯ã³å¿ é |
--region æªæå® |
SSM æ¥ç¶ã TargetNotConnected ãšããåããã«ãããšã©ãŒã§å€±æ |
aws ssm start-session ã« --region ap-northeast-1 ãæç€º |
| VPC origin ã®ãã£ãã·ã¥ããªã·ãŒ | æ¢å®ã ãšã¯ãšãªæååãèœã¡ã?token=<JWT> ãå±ããæ°žä¹
ã«ãã°ã€ã³ã§ããªã |
Managed-CachingDisabled + Managed-AllViewer ã«å·®ãæ¿ã |
| Lambda@Edge ã®ç°å¢å€æ° | èšå®ãããš CloudFront ãžã®é¢é£ä»ãã倱æãã | User Pool ID ãªã©ã®èšå®ã¯ã³ãŒãã«çŒã蟌ã |
| Lambda@Edge ã®ãªãŒãžã§ã³ã»ããŒãžã§ã³ | é¢é£ä»ãã«å€±æãã | 颿°ã¯ us-east-1 ã«äœããçºè¡æžã¿ããŒãžã§ã³ãé¢é£ä»ããïŒ$LATEST äžå¯ïŒ |
/ops ã® 403 |
å€å±€é²åŸ¡ãç©ãéäžã§ 403 ã3ååºããåå ãããããéã | å šå±€ãæããŸã§ã¯æ£åžžãªééç¹ãæ»ããã«ãã©ã® 403 ãããåãåãã |
| ã¹ã¯ããã§ã¡ã¢ãªå¯Ÿç | Crew ã¯ç©ç空ã RAM ãèŠãããã¹ã¯ãããè¶³ããŠã解決ããªã | å®ã¡ã¢ãªãå¢ããïŒ16 GiB ã® r6a.large ãžïŒ |
ãŸãšã
Kiro Crew ããã©ã€ããŒããªã¯ã©ãŠãç°å¢ã«ç«ã¡äžããå®éã«äœ¿ãããšãããŸã§æ§ç¯ããŠã¿ãŸããã
ã€ã³ã¿ãŒãããã«çŽ ã® EC2 ãå ¬éããªããŸãŸãCloudFront ãš Cognito ã§èªèšŒä»ã HTTPS ãçšæããåºå®è²»ãæã㊠Kiro Crew ãåžžé§ãããããŸãããALB ã NAT Gateway ãç¬èªãã¡ã€ã³ã䜿ãããå ¥å£ã¯äœããã䜿ããšãã ãèµ·åããŠæ¢ããããçã³ã¹ããªç°å¢ã§ãã
å²ãšå¿çšãå¹ãæ§æã ãšæãã®ã§ãKiro Crew ã®ã¿ãªããããã©ã€ããŒã EC2 ã«äœããåžžé§ãããããå ¬éã¯ããããªããå Žé¢ãããã°ãCloudFront VPC origins + Lambda@Edge ãšããéžæè¢ãæãåºããŠããããã°å¹žãã§ãã
ãªããæ¬èšäºã®å 容㯠JAWS-UG AI/ML #43 ã® LT ã§ãçºè¡šããŸãããã¹ã©ã€ãã¯ä»¥äžã§ãã
åèãªã³ã¯
- Amazon CloudFront ã VPC ãªãªãžã³ãçºè¡š
- VPC ãªãªãžã³ã䜿çšããã¢ã¯ã»ã¹å¶éïŒCloudFront ããããããŒã¬ã€ãïŒ
- awslabs/cognito-at-edge
- Lambda@Edge ã«å¯Ÿããå¶éïŒCloudFront ããããããŒã¬ã€ãïŒ
- NAT ã€ã³ã¹ã¿ã³ã¹ã䜿çšããïŒVPC ãŠãŒã¶ãŒã¬ã€ãïŒ
- Session Manager ã§ã®ããŒã転éïŒSystems Manager ãŠãŒã¶ãŒã¬ã€ãïŒ
- Lambda 颿° URL ãšèªèšŒã¿ã€ãïŒLambda ããããããŒã¬ã€ãïŒ




