💡

[開発日記] AWSデプロイ時の注意点

2024/12/23に公開

開発日記では、私が開発中のミスやエラーを記録しようと思っています。

今日はAWSを使ってプロジェクトをデプロイしようとした際に発生したミスについて整理してみました。フロントエンドだけをデプロイするならGitHubをおすすめしますが、バックエンドやデータベースも一緒にデプロイするとなるとGitHubでは難しいです。

そこで私はAWSを利用してデプロイしようとしているのですが、この過程でいくつかのミスをしたので記録しておこうと思います。(ちなみに私はまだデプロイ設定中です。)

🙌非常に「初心者の視点」でのミスなので、ある程度の知識がある人は読まないことをおすすめします。

「デプロイサービスの種類」

私が作成したプロジェクトに基づいて、フロントエンド(React)、バックエンド(Spring Boot)、DB(MariaDB) それぞれの情報を別々に入力する必要があります。

awsサービス
フォロンとエンド S3
バックエンド EC2
データーベース RDS
DNS Route 53
CDN CloudFront

まだまだ、よくわからないが、今勉強中!

「リージョン確認」

リージョン:AWSには「リージョン」という概念があります。AWSが世界中でデータセンターをクラスター化する物理的な位置をリージョンと呼びます。
<AWSホームページより>

👩‍🏫つまり、サービスが提供される国を指します!

日本でサービスを提供するのに南アフリカにリージョンを設定すると、その分データアップロードなどが遅延するそうです。。私はこれも知らずにただデータベースを作成して現在変更作業中です😭(費用だけはかからないでほしい)

「S3にbuildファイルをアップロードする際の注意点」

バケットを作成した後、buildファイルをアップロードする際は新しいフォルダの中に入れてはいけません。

S3でバケットを作成し、そのバケット内にbuildファイルをアップロードする必要がありますが、バケット内に新しいフォルダを作ってその中にbuildフォルダをまるごとアップロードしてデプロイしたところ、ずっと404エラーが発生していました。

なぜうまくいかないのだろう?

'「Static Website Hosting」の設定は基本的にルートディレクトリでindex.htmlを探すように設定されています。したがって、ファイルが新しいフォルダにあるとS3はそのindex.htmlを見つけられず404エラーを返します。'と言います。

エラーを解決するために、バケットを作成しルートディレクトリ内にbuildフォルダの中のファイルをすべてアップロードする必要がありました。(staticフォルダはフォルダごとアップロードする必要があります)

* ルートディレクトリ構造の例
/
├── index.html
├── static/
│   ├── js/
│   ├── css/

「Amazon LinuxでMariaDBインストールコマンド注意」

何回も設置を試したけどうまくいかなくて焦りました。
しかし!2023年から、インストールコマンドが変わっていただけでした(言葉が出ない😭)

yum install -y mariadb105-server

「ドメイン名はS3のバケット名と統一させる」

これをわからなくて、ドメインを買ったけど、設定がうまくいかなかったです。
調べたら、ドメイン名とバケット名が一致しないと設定ができないみたいだった、が、
もし違う場合はcloud frontを使ってRoute53とS3を繋げるようです!
早速Cloud frontも開始(知識が不足すると、作業が多くなる)

「Cloud Front 設定」

私の現状
・S3→静的ウェブサイト(スタティック)
・EC2→動的ウェブサイト(インスタンス)

「設定内容(参考)」
①オリジンドメイン:両方使う場合は、オリジンドメインも二つとも登録すること!
*その後、ビヘイビアのPath patternやキャッシュポリシーを設定していく。

②ビヘイビアの設定
Path pattern:
動的の場合/api/*
静的の場合/assets/*
Origin and origin groups:
動的の場合:EC2
静的の場合:S3
*Viewer protocol policyとAllowed HTTP methodsは現状に合わせる。
Cache policy:
動的の場合Managed-CachingDisabled 
静的の場合Managed-CachingOptimized

ちなみにDefault (*)のオリジンはEC2にしました。

ビヘイビアの優先順位も重要!
今回の私の場合はこっちです。

順位 経路パタン オリジン
0 /api/ *EC2
1 /assets/ *S3
2 デフォルト(*) EC2

🙌もし、S3とEC2の内容が変わった場合(例えば、ビルドファイルとかJalファイルとか)キャッシュ削除が必要です。

設定は状況によって違うとは思いますが、参考までに

(AWSデプロイについてはこちらのページに追記する予定)

Discussion