ðïž Day 3: ããŒã¿ããŒã¹æŒç¿
ð¯ ãã®ãã³ãºãªã³ã§åŠã¶ããš
- RDS: ãããŒãžãããŒã¿ããŒã¹ãµãŒãã¹
- EC2ãšRDSã®é£æº: Webã¢ããªã±ãŒã·ã§ã³ãšããŒã¿ããŒã¹ã®æ¥ç¶
- ã»ãã¥ãªãã£èšèš: ãã©ã€ããŒããµããããã§ã®DBé 眮
- ããŒã¿æ°žç¶å: Webã¢ããªã±ãŒã·ã§ã³ã§ã®ããŒã¿ä¿åã»ååŸ
ðïž æ§ç¯ããã·ã¹ãã
ð ã€ã³ã¿ãŒããã â ð» EC2(Webã¢ããª) â ðïž RDS(MySQL)
â
ð ããŒã¿æ°žç¶å
åäœ: Node.js補ã®ç€Ÿå¡ç®¡çã·ã¹ãã ã§ãç€Ÿå¡æ å ±ãããŒã¿ããŒã¹ã«ä¿åã»è¡šç€ºã»ç·šéã»åé€ïŒå®å šCRUD察å¿ïŒ
Webã¢ããªã®æŠèŠ
Node.js瀟å¡ç®¡çã·ã¹ãã - ã¢ããªã±ãŒã·ã§ã³æŠèŠ
ã¯ãªãã¯ãããšãå¥ã¿ãã§éããŸã
â° æèŠæé
çŽ50å
ð åææ¡ä»¶
- AWS Academy Sandboxç°å¢ãžã®ã¢ã¯ã»ã¹
- Day2ã§åŠãã VPCã»EC2ã®ç¥è
ð Phase 1: VPCã»ãããã¯ãŒã¯æ§ç¯
Step 1: ã«ã¹ã¿ã VPCäœæ
â ïž éèŠ: AWS Academy Sandboxã§ã¯Default VPCã«ãã©ã€ããŒããµããããããªããããã«ã¹ã¿ã VPCãäœæããŸãã
- VPCã³ã³ãœãŒã«ã«ã¢ã¯ã»ã¹
- ãVPCãäœæããã¯ãªãã¯
VPCèšå®
- äœæãããªãœãŒã¹: VPCãªã©
- ååã¿ã°ã®èªåçæ: â ïž ãã§ã㯠ON
- ååã¿ã°:
ãããžã§ã¯ã=>employee-appã«å€æŽ - IPv4 CIDR:
10.0.0.0/16
ãµããããèšå®
- ã¢ãã€ã©ããªãã£ãŒãŸãŒã³æ°: 2 (AZã®ã«ã¹ã¿ãã€ãºã§ã
us-east-1aãšus-east-1bã確èª) - ãããªãã¯ãµããããæ°: 2
- ãã©ã€ããŒããµããããæ°: 2
ãµãããã CIDR ãããã¯ãã«ã¹ã¿ãã€ãº
| ãµãããã | CIDRããã㯠|
|---|---|
| us-east-1a ã®ãããªãã¯ãµãããã | 10.0.0.0/24 |
| us-east-1b ã®ãããªãã¯ãµãããã | 10.0.1.0/24 |
| us-east-1a ã®ãã©ã€ããŒããµãããã | 10.0.2.0/24 |
| us-east-1b ã®ãã©ã€ããŒããµãããã | 10.0.3.0/24 |

ãã®ä»èšå®
- NATã²ãŒããŠã§ã€: ãªãïŒã³ã¹ãç¯çŽã®ããïŒ
- VPCãšã³ããã€ã³ã: ãªã
- ãVPCãäœæããã¯ãªãã¯
- äœæå®äºãŸã§çŽ2-3ååŸ æ©
Step 2: ãµãããã確èª
- äœæãã
employee-app-vpcã®è©³çްç»é¢ãéã
ð¡ 確èªãã€ã³ã: ãããªãã¯ãµããããã«ã¯ã«ãŒãããŒãã«ã§ã€ã³ã¿ãŒãããã²ãŒããŠã§ã€ãžã®ã«ãŒããããã®ã«å¯ŸããŠããã©ã€ããŒããµããããã«ã¯ã«ãŒãããŒãã«ã§ã€ã³ã¿ãŒãããã²ãŒããŠã§ã€ãžã®ã«ãŒãããªãããšã確èª
VPCã衚瀺
泚ç®ãã¹ãã¯ããªãœãŒã¹ããããã¿ã

Publicãµããããã«ããŠã¹ããããã
泚ç®ãã¹ãã¯IGW(ã€ã³ã¿ãŒãããã²ãŒããŠã§ã€)ãžã®ã«ãŒããããããš
ããã«ãããã€ã³ã¿ãŒããããšã®éåä¿¡(ã€ã³ããŠã³ããã¢ãŠãããŠã³ã)ãå¯èœ

Privateãµããããã«ããŠã¹ããããã
泚ç®ãã¹ãã¯IGW(ã€ã³ã¿ãŒãããã²ãŒããŠã§ã€)ãžã®ã«ãŒãããªãããš
ããã«ãããã€ã³ã¿ãŒããããšã®éåä¿¡(ã€ã³ããŠã³ããã¢ãŠãããŠã³ã)ã¯äžå¯èœ
ãããé©çšãªã©ã§éä¿¡(ã¢ãŠãããŠã³ã)ãå¿
èŠãªå Žåã¯ãPublicãµããããã«NATã²ãŒããŠã§ã€ãé
眮ããã«ãŒãããŒãã«ã«NATã²ãŒããŠã§ã€ãžã®ã«ãŒãã远å ãã

ð Phase 2: RDSããŒã¿ããŒã¹äœæ
Step 1: ããŒã¿ããŒã¹ãµããããã°ã«ãŒãäœæ
- RDSã³ã³ãœãŒã«ã«ã¢ã¯ã»ã¹ ïŒAurora and RDSïŒ
- ããµããããã°ã«ãŒããâãDBãµããããã°ã«ãŒããäœæã
åºæ¬èšå®
- åå:
employee-db-subnet-group - 説æ:
Employee management database subnet group - VPC:
employee-app-vpcãéžæ
ãµããããèšå®
- ã¢ãã€ã©ããªãã£ãŒãŸãŒã³: 2ã€ä»¥äžéžæ(
1aãš1b) - ãµãããã: åAZã®ãã©ã€ããŒããµãããããéžæ
employee-app-vpc-subnet-private1-us-east-1aemployee-app-vpc-subnet-private2-us-east-1b

Step 2: Webçšã»ãã¥ãªãã£ã°ã«ãŒãäœæ
- EC2ã³ã³ãœãŒã«âãã»ãã¥ãªãã£ã°ã«ãŒãã
- ãã»ãã¥ãªãã£ã°ã«ãŒããäœæã
åºæ¬èšå®
- ã»ãã¥ãªãã£ã°ã«ãŒãå:
web-server-sg - 説æ:
web-server-sg - VPC:
employee-app-vpc
ã€ã³ããŠã³ãã«ãŒã«
- ã«ã¹ã¿ã TCP (ããŒã3000): ãœãŒã¹ Anywhere-IPv4ïŒ0.0.0.0/0ïŒ ã远å
ã¢ãŠãããŠã³ãã«ãŒã«
- 倿Žããªãããš
Step 3: DBçšã»ãã¥ãªãã£ã°ã«ãŒãäœæ
- EC2ã³ã³ãœãŒã«âãã»ãã¥ãªãã£ã°ã«ãŒãã
- ãã»ãã¥ãªãã£ã°ã«ãŒããäœæã
åºæ¬èšå®
- ã»ãã¥ãªãã£ã°ã«ãŒãå:
database-sg - 説æ:
Security group for RDS database - VPC:
employee-app-vpc
ã€ã³ããŠã³ãã«ãŒã«
- ã«ãŒã«ã远å
- ã¿ã€ã:
MySQL/Aurora - ãœãŒã¹:
web-server-sgïŒðïžã«web-server-sgãšå ¥åããŠéžæïŒ
- ã¿ã€ã:
ã¢ãŠãããŠã³ãã«ãŒã«
- 倿Žããªãããš
Step 4: RDSã€ã³ã¹ã¿ã³ã¹äœæ
- RDSã³ã³ãœãŒã«âããã«èšå®ã§äœæãâãäœæã

ãšã³ãžã³èšå®
- ãšã³ãžã³ã¿ã€ã: MySQL
- ãã³ãã¬ãŒã: ç¡æå©çšæ
- ããŒãžã§ã³: MySQL 8.4.9
èšå®
- DBã€ã³ã¹ã¿ã³ã¹èå¥å:
employee-database - ãã¹ã¿ãŒãŠãŒã¶ãŒå:
admin - èªèšŒæ
å ±ç®¡ç:
ã»ã«ããããŒãžã - ãã¹ã¿ãŒãã¹ã¯ãŒã:
password123ïŒæ¬çªã§ã¯åŒ·åãªãã¹ã¯ãŒãã䜿çšãã¹ããâ ïžä»åã¯æŒç¿ã§ãããã¢ããªã±ãŒã·ã§ã³ããã®å€ãããŒãã³ãŒãã£ã³ã°ããŠããã®ã§ãpassword123ã䜿ã£ãŠãã ãããïŒ
ã€ã³ã¹ã¿ã³ã¹èšå®
- DBã€ã³ã¹ã¿ã³ã¹ã¯ã©ã¹: db.t3.micro
- ã¹ãã¬ãŒãžã¿ã€ã: æ±çšSSD(gp2)
- å²ãåœãŠã¹ãã¬ãŒãž: 20 GiB
æ¥ç¶èšå®
- VPC:
employee-app-vpc - DBãµããããã°ã«ãŒã:
employee-db-subnet-group - ãããªãã¯ã¢ã¯ã»ã¹: ãªã
- VPCã»ãã¥ãªãã£ã°ã«ãŒã:
database-sgïŒdefaultã¯æ¶ãïŒ
远å èšå®(æãäžã«ããæ¹ã®ã远å èšå®ã)
- ðš åæããŒã¿ããŒã¹å:
employeedbâ ïž å¿ é ïŒå¿ããã«å ¥å - åé€ä¿è·ã®æå¹å: ç¡å¹ïŒã®ãŸãŸïŒ
- ãã®ä»ã®èšå®å€ã¯ããã©ã«ãã®ãŸãŸ
ð¡ éèŠ: åæããŒã¿ããŒã¹åãèšå®ããªããšãåŸã§ã¢ããªã±ãŒã·ã§ã³ãæ¥ç¶ã§ããŸããïŒ
employee-database ã®æšå¥šã¢ããªã³ ãšãããããã¢ããã衚瀺ããããããéãããã§ããŸããŸããã
â» ããŒã¿ããŒã¹ã®äœæãå®äºããã¹ããŒã¿ã¹ããå©çšå¯èœããšãªããŸã§ã5åã10åçšåºŠããããŸãã
ããã§åŸ
ã€å¿
èŠã¯ãªãã®ã§æ¬¡ãžé²ãã§ããŸããŸãããæäœããŠãããã©ãŠã¶ã¿ããéããããå¥ã®ããŒãžãžç§»åãããããŠããè£ã§äœæã¯ç¶ããŠãããã®ã§åé¡ãããŸããã
ð Day 4ã®ãã³ãºãªã³ããé·ç§»ããŠããæ¹ãž: ãã®Phase 2ãŸã§å®äºããããDay 4ã®æé ãžæ»ã£ãŠãã ããã
ð Phase 3: Webã¢ããªã±ãŒã·ã§ã³æ§ç¯
Step 1: EC2ã€ã³ã¹ã¿ã³ã¹èµ·å
- EC2ã³ã³ãœãŒã«âãã€ã³ã¹ã¿ã³ã¹ãèµ·åã
åºæ¬èšå®
- åå:
employee-web-server - AMI: Amazon Linux 2023 AMI
- ã€ã³ã¹ã¿ã³ã¹ã¿ã€ã: t3.micro
ããŒãã¢ïŒãã°ã€ã³ïŒ
- ããŒãã¢ãªãã§ç¶è¡ïŒæšå¥šãããŸããïŒ ïŒSession Manager ã§æ¥ç¶ãããããããŒãã¢ã¯äžèŠã§ãïŒ
ãããã¯ãŒã¯èšå®
ãç·šéããã¿ã³ãæŒã
- VPC:
employee-app-vpc - ãµãããã: ãããªãã¯ãµããããïŒ
employee-app-vpc-subnet-public1-[AZ]ïŒ - ãããªãã¯IPã®èªåå²ãåœãŠ: æå¹å
ã»ãã¥ãªãã£ã°ã«ãŒã
- æ¢åéžæ:
web-server-sg
é«åºŠãªè©³çް
-
IAMã€ã³ã¹ã¿ã³ã¹ãããã¡ã€ã«:
LabInstanceProfileAWS Academyç°å¢ã§ã¯ãªãæ¹ã¯: ã»ãã·ã§ã³ãããŒãžã£ãŒã䜿çšããããã
AmazonSSMManagedInstanceCoreããªã·ãŒãã¢ã¿ãããããIAMããŒã«ãäœæããã€ã³ã¹ã¿ã³ã¹ãããã¡ã€ã«ãšããŠèšå®ããŠãã ããã -
ãŠãŒã¶ãŒããŒã¿: user-data-webapp.txt ã®å 容ãã³ã㌠& ããŒã¹ã
YOUR_RDS_ENDPOINT_HEREã[RDSãšã³ããã€ã³ã](â»æ¬¡åç §)ã§æžãæããïŒå é ã®æ¹ã«1ç®æïŒ[RDSãšã³ããã€ã³ã]= RDSã³ã³ãœãŒã«âããŒã¿ããŒã¹âemployee-databaseâæ¥ç¶ãšã»ãã¥ãªãã£âãšã³ããã€ã³ãã®å€ (RDSã®ã³ã³ãœãŒã«ã«æ»ã£ãŠã衚瀺ãããªãå Žåã¯åŸ ã€ãã¹ããŒã¿ã¹ããå©çšå¯èœããšãªãã®ãåŸ ã€ããåŸ ã€ãã®ãä»äºã®ãã¡!)


ã€ã³ã¹ã¿ã³ã¹ãèµ·å

Step 2: ã¢ããªã±ãŒã·ã§ã³èšå®
- EC2ã€ã³ã¹ã¿ã³ã¹ã«Session Managerã§æ¥ç¶
- ãŠãŒã¶ã®åãæ¿ã
sudo su - ec2-user - ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã確èª
- æ£åžžã«èµ·åããŠããã°ãuser-data å ã§ããŒã¿ããŒã¹åæåãæžãã§ãããããPhase 4ãžé²ã
- 倱æããŠããå Žåããåæåã確èªã§ããªãå Žåã¯ã以äžã®æé 4ã6 ã§å¿æ¥åŠçœ®ãã
sudo systemctl status employee-app以äžã®ãããªãã°ãã§ãŠããã°æå => ãð Phase 4: åäœç¢ºèªãšãã¹ãããžé²ã

倱æããŠããå Žåã¯ããããŠã以äžã®ã©ã¡ããã«åé¡ããã
- ã»ãã¥ãªãã£ã°ã«ãŒãïŒ
database-sgïŒã®èšå®èª€ã â Phase 2ã®Step 3 ãåèã«èšå®ããªãã - ãŠãŒã¶ãŒããŒã¿å
ã®RDSãšã³ããã€ã³ãïŒ
YOUR_RDS_ENDPOINT_HEREïŒ ãæžãæããªãã£ãããããã¯ãæ£ããèšå®ãããªãã£ã â 以éã®æé 4ã6ãè¡ããå¿æ¥åŠçœ®ããã
-
ããŒã¿ããŒã¹åæåã¹ã¯ãªããå®è¡
RDSã³ã³ãœãŒã«ã«ãŠãäœæããããŒã¿ããŒã¹ã®ç¶æ ããå©çšå¯èœããšãªã£ãŠããããšã確èªããã
ãå©çšå¯èœããšãªããŸã§åŸ ã€ãcd /var/www/html node init_db.jsããã
node init_db.jsãã倱æããå Žåã¯YOUR_RDS_ENDPOINT_HEREã®æžãæããã§ããŠããªãããšãèããããã
nanoã³ãã³ãã§ãconfig.jsãã¡ã€ã«ãæžãæããã
nanoã³ãã³ãã®äœ¿ãæ¹ã¯æ¬¡ã®éãã§ãããnano config.js- ã«ãŒãœã«ã®ç§»åã¯ç¢å°ããŒ
- ä¿åã¯ãCtl + O ã®ã®ã¡ããšã³ã¿ãŒ
- çµäºã¯ãCtl + X
- Node.jsã¢ããªã±ãŒã·ã§ã³åèµ·åïŒèšå®åæ ã®ããïŒ
sudo systemctl restart employee-app - èµ·å確èª
sudo systemctl status employee-app
äžèšã§ã解決ããªãå Žåã¯ã以äžã®ã³ãã³ãã§ãšã©ãŒåå ãã€ããšããŠä¿®æ£ããå¿ èŠãããã
sudo cloud-init status
sudo cat /var/log/cloud-init-output.log
sudo tail -f /var/log/cloud-init-output.log
sudo cat /var/log/cloud-init.log
sudo systemctl status employee-app
åå ãã¯ã£ããããªãå Žåã¯ãEC2ã€ã³ã¹ã¿ã³ã¹ãçµäºããããäžåºŠEC2ã€ã³ã¹ã¿ã³ã¹ãäœãçŽãã»ããæ©ããããããªãã
ð Phase 4: åäœç¢ºèªãšãã¹ã
Step 1: Webã¢ããªã±ãŒã·ã§ã³ã¢ã¯ã»ã¹
- EC2ã€ã³ã¹ã¿ã³ã¹ã®ãããªãã¯IPãã³ããŒ
- ãã©ãŠã¶ã§
http://[ãããªãã¯IP]:3000ã«ã¢ã¯ã»ã¹ (â ïžhttpã§ãã3000çªããŒãã§ãã) - Node.js補瀟å¡ç®¡çã·ã¹ãã ã衚瀺ãããããšã確èª

Step 2: ããŒã¿ããŒã¹æ©èœãã¹ã
- 瀟å¡è¿œå : æ°ããç€Ÿå¡æ å ±ãå ¥åã»ä¿å
- ããŒã¿è¡šç€º: ä¿åããç€Ÿå¡æ å ±ãäžèЧã«è¡šç€ºãããããšã確èª
- 瀟å¡ç·šé: æ¢å瀟å¡ã®ãç·šéããã¿ã³ã§æ å ±æŽæ°
- 瀟å¡åé€: æ¢å瀟å¡ã®ãåé€ããã¿ã³ã§æ å ±åé€
- ããŒã¿æ°žç¶å: ããŒãžãåèªã¿èŸŒã¿ããŠãããŒã¿ãæ®ãããšã確èª
ð¯ åŠç¿ãã€ã³ã
RDSã®å©ç¹
- ãããŒãžã: OSã»DB管çãäžèŠ
- èªåããã¯ã¢ãã: ããŒã¿ä¿è·ãèªåå
- é«å¯çšæ§: ãã«ãAZé 眮ã§é害察å¿(ãã ããµã³ãããã¯ã¹ç°å¢ã®å¶éã§ãæŒç¿ã¯ã·ã³ã°ã«AZæ§æ)
- ã¹ã±ãŒã©ããªãã£: å¿ èŠã«å¿ããŠã¹ããã¯å€æŽå¯èœ
ã»ãã¥ãªãã£èšèš
- ãã©ã€ããŒãé 眮: ããŒã¿ããŒã¹ã¯å€éšããçŽæ¥ã¢ã¯ã»ã¹äžå¯
- ã»ãã¥ãªãã£ã°ã«ãŒã: WebãµãŒãããã®ã¿ã¢ã¯ã»ã¹èš±å¯
- æå°æš©éã®åå: å¿ èŠæå°éã®éä¿¡ã®ã¿èš±å¯
3å±€ã¢ãŒããã¯ãã£ã®å®çŸ
- ãã¬ãŒã³ããŒã·ã§ã³å±€: Webãã©ãŠã¶ïŒEJSãã³ãã¬ãŒãïŒ
- ã¢ããªã±ãŒã·ã§ã³å±€: EC2äžã®Node.js + Expressã¢ããªã±ãŒã·ã§ã³
- ããŒã¿å±€: RDS MySQL
ðš ãã©ãã«ã·ã¥ãŒãã£ã³ã°
Webã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããªã
- EC2ã€ã³ã¹ã¿ã³ã¹ããrunningãç¶æ ã確èª
- ã»ãã¥ãªãã£ã°ã«ãŒãã§ããŒã3000ãéããŠããã確èª
- ãŠãŒã¶ãŒããŒã¿ã¹ã¯ãªãããæ£åžžå®è¡ãããã確èª
ããŒã¿ããŒã¹ã«æ¥ç¶ã§ããªã
- RDSã€ã³ã¹ã¿ã³ã¹ããavailableãç¶æ ã確èª
- ããŒã¿ããŒã¹ã»ãã¥ãªãã£ã°ã«ãŒãã®èšå®ç¢ºèª
- æ¥ç¶æååïŒãšã³ããã€ã³ãããŠãŒã¶ãŒåããã¹ã¯ãŒãïŒã®ç¢ºèª
ããŒã¿ãä¿åãããªã
- ããŒã¿ããŒã¹åæåã¹ã¯ãªãããå®è¡ãããã確èª
- Node.jsã¢ããªã±ãŒã·ã§ã³ã®ãã°ã確èª
sudo journalctl -u employee-app.service -f
ã¢ããªã±ãŒã·ã§ã³ããUnknown databaseããšã©ãŒ
ðš åå : RDSäœææã«åæããŒã¿ããŒã¹å employeedb ãå
¥åãå¿ãã
ð§ 解決ç: RDSãåé€ããŠåäœæããŸãã¯MySQLã¯ã©ã€ã¢ã³ãã§æåäœæ
ããŒã3000ã«ã¢ã¯ã»ã¹ã§ããªã
ðš åå : ã»ãã¥ãªãã£ã°ã«ãŒãã§ããŒã3000ãéæŸãããŠããªã
ð§ 解決ç: web-server-sgã®ã€ã³ããŠã³ãã«ãŒã«ã§ã«ã¹ã¿ã TCPïŒããŒã3000ïŒã远å
ãCanât add new command when connection is in closed stateããšã©ãŒ
ðš åå : server.jsãæŽæ°åŸãNode.jsã¢ããªã±ãŒã·ã§ã³ã®åèµ·åãå¿
èŠ
ð§ 解決ç:
sudo systemctl restart employee-app
sudo systemctl status employee-app # ç¶æ
確èª
ð å®äºïŒ
ããã§ãšãããããŸãïŒããªãã¯ä»ã以äžãéæããŸããïŒ
â
ãããŒãžãããŒã¿ããŒã¹: RDSã§MySQLæ§ç¯
â
Webã¢ããªã±ãŒã·ã§ã³: EC2ã§Node.js + Expressã¢ããªã±ãŒã·ã§ã³å®è¡
â
å®å
šCRUDæäœ: ããŒã¿ããŒã¹ã§ã®æ
å ±äœæã»èªåã»æŽæ°ã»åé€
â
ã»ãã¥ãªãã£èšèš: ãã©ã€ããŒãDBé
眮ãšã¢ã¯ã»ã¹å¶åŸ¡
â
ã¢ãã³Webæè¡: EJSãã³ãã¬ãŒã + ã¬ã¹ãã³ã·ãUI
ð æ¬¡ã®ã¹ããã
ææ¥ïŒDay4ïŒã¯ãé«å¯çšæ§ã·ã¹ãã ãæ§ç¯ããŸãã仿¥äœã£ãã·ã¹ãã ãè€æ°å°æ§æã«ããŠãå¯çšæ§ãé«ããŸãããïŒ
ð¡ 仿¥ã®æ°ã¥ããèšé²ããã
- RDSãšEC2äžã®ããŒã¿ããŒã¹ã®éãã¯ïŒ
- ã»ãã¥ãªãã£ã°ã«ãŒãã§ã®éä¿¡å¶åŸ¡ã®éèŠæ§ã¯ïŒ
- 3å±€ã¢ãŒããã¯ãã£ã®åå±€ã®åœ¹å²ã¯ïŒ
仿¥ããç²ãããŸã§ããïŒ ð¥