0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS 備忘録

0
Last updated at Posted at 2026-07-23

【注意】こちら備忘録です

「誰かの力になれたら」とかではなく備忘録として書いています。
そのため見辛かったり情報の新旧・過不足などがあります。きっと。

🚀 AWS EC2に「Spring Boot + MySQL (Docker) + Next.js」をフルデプロイするまでに直面したエラーと解決策の全記録

所有者エラー・Dockerの仕様・Next.jsの本番ビルド制限・無料枠EC2のメモリ不足(ハングアップ)といった「定番の壁」の乗り越え方とロードマップを、トラブルシューティングの記録としてまとめた。


1. 登場した重要キーワード(単語帳)

  • SCP (Secure Copy Protocol):ローカルPCからリモートサーバー(EC2)へ、SSHを利用して安全にファイルやフォルダを転送する仕組み。
  • chown (Change Owner):Linuxにおいて、ファイルやディレクトリの「所有ユーザー」や「所有グループ」を変更するコマンド。
  • Docker Entrypoint Initdb:MySQL公式コンテナの仕様。/docker-entrypoint-initdb.d に置かれたSQLファイルは、コンテナの初回起動時のみアルファベット(名前)順で自動実行される。
  • Docker Compose:複数のコンテナ(今回ならMySQLなど)の設定を docker-compose.yml にまとめ、コマンド一発で一括管理・起動するツール。
  • Suspense (React/Next.js):コンポーネントの読み込みが完了するまで、代わりにローディング画面(fallback)を表示して処理を待機させる仕組み。
  • CSR Bailout (Client-side Rendering Bailout):Next.jsの仕様。本番ビルド(サーバー側)時に、ブラウザ専用の機能(useSearchParams など)をそのまま使うと、ビルドエラー(Bailout)を起こす現象。
  • 仮想メモリ(スワップ領域):本物のメモリ(RAM)が不足した際、ハードディスク(SSD)の一部をメモリの代用として借用し、システムのフリーズ(ハングアップ)を防ぐ仕組み。

2. 多用したLinux・ネットワークコマンド一覧

📂 ファイル転送・確認

# ファイルをEC2のホームに送信(ローカルのPowershellで入力)
scp -i <鍵> <送りたいファイル> ec2-user@<IP>:~

# フォルダを中身ごと丸ごと(再帰的:-r)送信(ローカルのPowershellで入力)
scp -i <鍵> -r <送りたいフォルダ> ec2-user@<IP>:~

# ファイルの一覧を、権限、所有者、更新日時(タイムスタンプ)付きで詳細表示(SSH連携をしているターミナル上で入力)
ls -l

# ファイルの中身をターミナル画面上に展開して確認(SSH連携をしているターミナル上で入力)
cat <ファイル名>

👑 権限・所有者変更(王様コマンド)

# フォルダの所有者を root から一般ユーザー ec2-user に変更
sudo chown ec2-user:ec2-user <フォルダ名>

🐳 Docker・Docker Compose操作

# 設定ファイルを元に、バックグラウンド(裏側:-d)でコンテナを起動
docker compose up -d

# コンテナを停止し、同時にボリューム(データ:-v)も完全消去して初回状態にリセット
docker compose down -v

# 現在稼働しているコンテナの生存・起動ステータス(STATUS)を確認
docker compose ps

# コンテナの内部ログを表示し、エラーの原因を特定
docker logs <コンテナ名>

⚡ 仮想メモリ(スワップ)追加(EC2フリーズ強制突破)

# ① 2GB分の空っぽのファイルを生成
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

# ② 管理者以外触れないようにロック
sudo chmod 600 /swapfile

# ③ スワップ領域として初期化
sudo mkswap /swapfile

# ④ 仮想メモリを有効化し、メモリを 1GB ➔ 実質3GB へ増強
sudo swapon /swapfile

# 現在の本物メモリとスワップメモリの残量を人間が見やすい形式(-h)で表示
free -h

3. トラブルと解決の手順

データベース構築

① ディレクトリの権限エラー (Permission denied)

  • 現象mkdir で作った mysql-init フォルダにSQLが送信できない。
  • 原因:フォルダの所有者が root になっていたため、一般ユーザー ec2-user での書き込みが拒否された。
  • 解決sudo chown を行い、個人(ユーザー)もチーム(グループ)も ec2-user の所有に変更して解決。

② SQL自動実行順序の罠 (Table doesn't exist)

  • 現象docker logs を見ると、テーブル作成前にデータ挿入が走りエラーに。
  • 原因:Docker内のSQLはアルファベット順に動くため、data.sqlschema.sql より先に動いていた。
  • 解決mv コマンドで 01_schema.sql02_data.sql へ改名。一度作成されたコンテナは初期化が走らないため、docker compose down -v でボリュームを完全リセットして再起動し、解決。

フロントエンドビルド・送信

① Next.js本番ビルドのエラー (Missing Suspense with CSR Bailout)

  • 現象:ローカルでの npm run build/formation/support-cards で落ちる。
  • 原因:URLパラメータを扱う useSearchParams() が使われているパーツが <Suspense> で囲まれていなかった。
  • 解決
    • /formation ページ:親ファイル側で、該当コンポーネントを <Suspense> タグでサンドイッチした。
    • /support-cards ページ:ページ直下で使われていたため、メイン処理を丸ごと別関数(子コンポーネント)へ切り出し、最下部に作った新しい入り口から <Suspense> で包み込んで呼び出す構造へ変更し、ビルド成功。

② 無料枠EC2のハングアップ(恐怖のフリーズ)

  • 現象:EC2上で npm install を実行中、プロンプトが完全に無反応に。
  • 原因:無料枠EC2のメモリ(1GB)をNext.jsが使い切り、OSごとパンクした。料金的な課金ではなくハードウェアの限界。
  • 解決:一度Tera Termを強制終了してログインし直し、ハードディスク領域を借用する「スワップ領域(仮想メモリ)」を2GB追加して実質3GB環境を構築。リトライして無事突破。

4. まとめ

ここまで見てくれた方へ。
MySQLの文字化けはとても厄介。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?