ハンズオン資料

「構築しただけでは終わらせない。孊びを蚀葉にしお、"自分の技術"にする。」

View on GitHub

🗄 Day 3: デヌタベヌス挔習

🎯 このハンズオンで孊ぶこず

🏗 構築するシステム

🌐 むンタヌネット → 💻 EC2(Webアプリ) → 🗄 RDS(MySQL)
                                            ↓
                                    📊 デヌタ氞続化

動䜜: Node.js補の瀟員管理システムで、瀟員情報をデヌタベヌスに保存・衚瀺・線集・削陀完党CRUD察応

Webアプリの抂芁

Node.js瀟員管理システム - アプリケヌション抂芁

クリックするず、別タブで開きたす

⏰ 所芁時間

箄50分

📋 前提条件


🚀 Phase 1: VPC・ネットワヌク構築

Step 1: カスタムVPC䜜成

⚠ 重芁: AWS Academy SandboxではDefault VPCにプラむベヌトサブネットがないため、カスタムVPCを䜜成したす。

  1. VPCコン゜ヌルにアクセス
  2. 「VPCを䜜成」をクリック

VPC蚭定

サブネット蚭定

サブネット 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

その他蚭定

  1. 「VPCを䜜成」をクリック
  2. 䜜成完了たで玄2-3分埅機

Step 2: サブネット確認

  1. 䜜成したemployee-app-vpcの詳现画面を開く

💡 確認ポむント: パブリックサブネットにはルヌトテヌブルでむンタヌネットゲヌトりェむぞのルヌトがあるのに察しお、プラむベヌトサブネットにはルヌトテヌブルでむンタヌネットゲヌトりェむぞのルヌトがないこずを確認

VPCを衚瀺

泚目すべきは「リ゜ヌスマップ」タブ



Publicサブネットにマりスをあわせる

泚目すべきはIGW(むンタヌネットゲヌトりェむ)ぞのルヌトがあるこず
これにより、むンタヌネットずの送受信(むンバりンド、アりトバりンド)が可胜



Privateサブネットにマりスをあわせる

泚目すべきはIGW(むンタヌネットゲヌトりェむ)ぞのルヌトがないこず
これにより、むンタヌネットずの送受信(むンバりンド、アりトバりンド)は䞍可胜
パッチ適甚などで送信(アりトバりンド)が必芁な堎合は、PublicサブネットにNATゲヌトりェむを配眮し、ルヌトテヌブルにNATゲヌトりェむぞのルヌトを远加する


🚀 Phase 2: RDSデヌタベヌス䜜成

Step 1: デヌタベヌスサブネットグルヌプ䜜成

  1. RDSコン゜ヌルにアクセス Aurora and RDS
  2. 「サブネットグルヌプ」→「DBサブネットグルヌプを䜜成」

基本蚭定

サブネット蚭定

Step 2: Web甚セキュリティグルヌプ䜜成

  1. EC2コン゜ヌル→「セキュリティグルヌプ」
  2. 「セキュリティグルヌプを䜜成」

基本蚭定

むンバりンドルヌル

アりトバりンドルヌル

Step 3: DB甚セキュリティグルヌプ䜜成

  1. EC2コン゜ヌル→「セキュリティグルヌプ」
  2. 「セキュリティグルヌプを䜜成」

基本蚭定

むンバりンドルヌル

アりトバりンドルヌル

Step 4: RDSむンスタンス䜜成

  1. RDSコン゜ヌル→「フル蚭定で䜜成」→「䜜成」

゚ンゞン蚭定

蚭定

むンスタンス蚭定

接続蚭定

远加蚭定(最も䞋にある方の「远加蚭定」)

💡 重芁: 初期デヌタベヌス名を蚭定しないず、埌でアプリケヌションが接続できたせん

employee-database の掚奚アドオン ずいうポップアップが衚瀺されたら、「閉じる」でかたいたせん。

※ デヌタベヌスの䜜成が完了し、ステヌタスが「利甚可胜」ずなるたで、5分〜10分皋床かかりたす。
ここで埅぀必芁はないので次ぞ進んでかたいたせん。操䜜しおいたブラりザタブを閉じたり、別のペヌゞぞ移動したりしおも、裏で䜜成は続けおくれるので問題ありたせん。


📌 Day 4のハンズオンから遷移しおきた方ぞ: このPhase 2たで完了したら、Day 4の手順ぞ戻っおください。


🚀 Phase 3: Webアプリケヌション構築

Step 1: EC2むンスタンス起動

  1. EC2コン゜ヌル→「むンスタンスを起動」

基本蚭定

キヌペアログむン

ネットワヌク蚭定

「線集」ボタンを抌す

セキュリティグルヌプ

高床な詳现

むンスタンスを起動

Step 2: アプリケヌション蚭定

  1. EC2むンスタンスにSession Managerで接続
  2. ナヌザの切り替え
     sudo su - ec2-user
    
  3. アプリケヌションの状態を確認
    • 正垞に起動しおいれば、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を行い、応急凊眮をする
  4. デヌタベヌス初期化スクリプト実行

    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
  5. Node.jsアプリケヌション再起動蚭定反映のため
     sudo systemctl restart employee-app
    
  6. 起動確認
     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アプリケヌションアクセス

  1. EC2むンスタンスのパブリックIPをコピヌ
  2. ブラりザで http://[パブリックIP]:3000 にアクセス (⚠httpです。3000番ポヌトです。)
  3. Node.js補瀟員管理システムが衚瀺されるこずを確認

Step 2: デヌタベヌス機胜テスト

  1. 瀟員远加: 新しい瀟員情報を入力・保存
  2. デヌタ衚瀺: 保存した瀟員情報が䞀芧に衚瀺されるこずを確認
  3. 瀟員線集: 既存瀟員の「線集」ボタンで情報曎新
  4. 瀟員削陀: 既存瀟員の「削陀」ボタンで情報削陀
  5. デヌタ氞続化: ペヌゞを再読み蟌みしおもデヌタが残るこずを確認

🎯 孊習ポむント

RDSの利点

セキュリティ蚭蚈

3局アヌキテクチャの実珟


🚚 トラブルシュヌティング

Webアプリケヌションにアクセスできない

  1. EC2むンスタンスが「running」状態か確認
  2. セキュリティグルヌプでポヌト3000が開いおいるか確認
  3. ナヌザヌデヌタスクリプトが正垞実行されたか確認

デヌタベヌスに接続できない

  1. RDSむンスタンスが「available」状態か確認
  2. デヌタベヌスセキュリティグルヌプの蚭定確認
  3. 接続文字列゚ンドポむント、ナヌザヌ名、パスワヌドの確認

デヌタが保存されない

  1. デヌタベヌス初期化スクリプトが実行されたか確認
  2. 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は、高可甚性システムを構築したす。今日䜜ったシステムを耇数台構成にしお、可甚性を高めたしょう

💡 今日の気づきを蚘録しよう

今日もお疲れさたでした 🔥