【構成編】プロフィールサイトAWS移行メモ 〜インフラ初心者を添えて〜
はじめに
こんにちは。
今回は、このプロフィールサイトのインフラををVercelからAWSに移行したので、その過程を備忘録として残したいと思います。
移行理由としてはスキルアップのためにAWSを使いたかったからというのが一番大きいですが、インフラをVercelに任せるのではなく、しっかりと自分で理解しておきたかったからという思いもあります。
AWSに関しては入門したてではありますが、この記事を通して少しでも同じような方の助けになれば幸いです。
前提
まず前提として、このプロフィールサイトの技術スタックを以下にまとめます。
記事のコンテンツ管理はmicroCMSを使用し、Jamstackな構成になっています。
各ページは静的生成を前提としており、パフォーマンスにも考慮した設計になっています。
フロントエンド
- Next.js(React/TypeScript)
CMS
- microCMS
構成
今回AWSで構築したかったものとして、大きく「静的サイト構築」「メール配信(問い合わせ)」の2つがあったので、使用したサービスとしては以下のようになっています。
「問い合わせ」では以前はメール配信にnodemailer
を使用していましたが、今回の移行に伴い「Amazon SES」を用いた構成に変更しました。
また、今回のAWS移行ではCDKを使用し、手動のコンソール操作を可能な限り減らしています。
ついでに、GitHub ActionsでCI/CDも構築してみました。
- 静的サイト構築:CloudFront, S3
- メール配信;API Gateway, Lambda, SES
- その他;CDK, IAM, ACM, Route53
- CI/CD;GitHub Actions(mainへのプッシュ、microCMSでの記事更新)
▼アーキテクチャ図

なぜこの構成なのか
上記の構成にした理由としては以下があります。
バックエンドを必要としない構成であれば「CloudFront + S3」の構成はベターですが、細かい部分はAIとの壁打ちで決めていきました。
構成理由
- パフォーマンス
- CloudFront による全世界エッジ配信で、海外からのアクセスも高速
- 画像や静的ファイルのキャッシュTTLを細かく制御可能
- コスト最適化
- 静的サイトは S3 に置くことで固定費ほぼゼロ、CloudFront の従量課金も安価
- 問い合わせAPIも Lambda + API Gateway なので使用分だけ課金
- セキュリティと制御性
- S3 を完全非公開にして CloudFront 経由のみで配信(OAC)
- API Gateway と Lambda の IAM 権限や WAF によるレート制限・ボット対策
- SES による SPF/DKIM/DMARC 設定で迷惑メール入りを防ぐ
- 運用拡張性
- SSR/ISR が必要になったら CloudFront の一部オリジンを ALB+ECS などに差し替え可能
- 検索やログ収集などを別途追加しても、既存構成を壊さず統合可能
- インフラの見える化
- CDK で全構成をコード化 → 履歴管理可能
- 環境(dev/stg/prod)を簡単に複製
- 運用の見通し
- GitHub Actions と相性がよく、microCMS の Webhook から再ビルド・再配信を自動化
この組み合わせの強み
要素 | 理由 |
---|---|
S3(静的サイトホスティング) | 高耐久(99.999999999%)、スケーラブル、低コスト。HTML/CSS/JS/画像の配信に最適。 |
CloudFront(CDN) | 世界中のエッジロケーションから高速配信。S3を私有化したままOAC経由で安全に公開可能。 |
API Gateway | HTTPSエンドポイントを簡単に作成。CORSや認証も管理しやすい。 |
Lambda | サーバーレスでメンテ不要。利用分だけ課金。Node.js/TypeScriptで実装可能。 |
SES | 高到達率・安定したメール送信。Gmail API不要で運用できる。 |
ACM(証明書) | 無料のTLS証明書を自動更新。CloudFront用はus-east-1必須。 |
Route53 | グローバルAnycastで高速・安定解決。ACMのDNS検証と相性良く自動更新が楽。 |
CDK | AWSリソース構成をコードで管理。環境の再現性と変更履歴管理が容易。 |
コスト
試算(月額)
では、この構成でのコスト(月額)を試算してみます。
前提や各サービスの内訳は後述しますが、結果は以下になりました。(意外とお安い...!)
合計:約 $0.754/月(約 110円)
前提
今回の試算に使用した値は以下の通りです。
正直、かなり高望みしてる感がありますが、ご了承ください...
- PV:10,000 / 月
- S3(Standard):1GB 保管
- API Gateway (HTTP API):1,000 回/月
- リージョン:閲覧者の大半が日本想定
- 料金は USD・税抜
参考(“Always Free”)
- CloudFront は 毎月 1TB のデータ転送・1,000万リクエストが無料枠。
- CloudFront Functions は 200万回 が無料枠。
- Lambda は 100万リクエスト + 40万GB-s/月が無料枠。
必要なカウント
- CloudFront リクエスト数 ≒ PV × 1ページあたりの静的ファイル数
→ 最小構成で ~6 リクエスト/ページ(HTML+CSS+JS+画像2〜3)= 約 60,000 リクエスト/月(目安) - データ転送量 = PV × ページ重量
→ 0.5MB → 5GB、1.0MB → 10GB - 1回の問い合わせで、サイト運営者(私)と入力者への2つのメール配信を行うため、SESのカウントが API Gateway × 2 になってます。
サービス別の目安コスト
サービス | 想定使用 | 月額の目安 |
---|---|---|
CloudFront | 5〜20GB の転送(約6万リクエスト) | $0 |
CloudFront Functions | ~6万回 | $0 |
S3(Standard・保管) | 1GB を保管 | 約 $0.02〜$0.03 |
S3(リクエスト) | オリジン到達を10%と仮定 → GET ~6,000 回 | ≪ $0.01 |
API Gateway(HTTP) | 1,000 回 | $0.001 |
Lambda | 128MB・~200ms × 1,000 回 | $0 |
SES | 2000 通(サイズ 100KB) | ~$0.223 |
Route 53 | パブリックホストゾーン 1つ | $0.50 |
ACM(証明書) | CloudFront 用パブリック証明書 | $0 |
CloudWatch Logs | Lambda のログ少量(数MB) | ≈$0 |
というわけで、CloudFront や Lambda が無料枠に収まる限り、固定費は 実質 Route 53 + SES + S3 保管が中心になります。
Route53でドメイン取得する場合は
今回、「.com」ドメインを Route53 で登録して CloudFront に ALIAS しました。
そのため、上記に加えて Route53 のドメイン登録料(年額)「$15/年」が発生しています。
他の TDL の金額などは以下を参照ください。
Amazon Route 53 Pricing for Domain Registration
Amplify との比較
静的サイト構築の選択肢として上記の構成の他に、Amplifyを用いた構築方法もあるかと思います。
Amplifyとは、AWS上にモバイルアプリやWebアプリの開発を迅速化するためのフルスタックの開発フレームワークであり、素早く簡単にデプロイを行うことができるサービスです。
Amplifyを用いた構成ではインフラ管理の負担が軽減される一方で、自動で行われる部分が多くVercelの二の舞になりそうな気がしたので、今回は「CloudFront + S3」の構成をとりました。
以下に比較をまとめてみましたので、参考にしていただければと思います。
観点 | S3+CloudFront(+APIGW/Lambda/SES) | AWS Amplify(Hosting/Gen2) |
---|---|---|
セットアップ速度 | 低〜中:CDKで雛形があれば中。手作業だとやや重い | 高:リポジトリ接続→自動ビルド→即デプロイ。PRプレビューも標準 |
運用負荷 | 中:証明書(us-east-1)、OAC、キャッシュ無効化、無停止更新など自分で管理 | 低:ビルド/配信/証明書/ドメイン設定が一元化。自動無効化やプレビューあり |
配信チューニング自由度 | 最高:CloudFrontのビヘイビア、ヘッダポリシー、Edge関数、キャッシュキー等を細かく制御 | 中:多くは“いい感じ”に隠蔽。低レベルのツマミは露出が限定的 |
セキュリティ制御 | 柔軟:WAFの細粒度ルール、CAPTCHA、レート制限、S3私有化+OAC、厳格CSPなど自由 | 中:標準的には十分。ただしWAF/ヘッダ等の高度設定は露出範囲が限られることがある |
問い合わせ(メール)実装 | SES 直結が最短:API GW→Lambda→SES。監査用DynamoDBやDLQも容易 | 依然として Lambda/SES を自前で定義(Amplify Functionsからでも可) |
コスト最適化 | 詰めやすい:各サービスを用途最小に切る。静的配信は最安クラス | 良好:小規模では大差ないことも。ただし“隠蔽”分の自由度は下がる |
ベンダーロック-イン | どちらもAWSだが、生のAWSプリミティブに近い分、将来の移行自由度が高い | 構成がAmplifyに抽象化される分、移行時の再配線が必要 |
IaC/再現性 | 強い:CDK/Terraformで完全再現・分離デプロイ | Amplify の設定/ビルドは簡単だが、低レイヤは抽象化(一部IaC表現が難しい箇所あり) |
観測/監視 | CloudWatch/WAF/S3/CF Logs を任意に組み立て | 基本は十分。細粒度のログ/メトリクス連携は制約が出ることあり |
Next.js/SSR 等 | CloudFront+Lambda@Edge/Functions で高度構成可能(やや難度高) | 対応が簡単:Amplify Hosting がSSR/ISRのビルド~配信を隠蔽してくれる |
企業要件(セキュリティ審査) | 通しやすい:要件に合わせて設計・証跡化 | 早いが、細かい要件に合わせづらい場面あり |
こんなとき S3+CloudFront 直構成を選ぶ
- WAF を使った厳しめのボット対策・企業セキュリティ要件に合わせた細部調整が必要
- レスポンスヘッダ・キャッシュ・オリジン構成を細かく性能チューニングしたい
- 将来、画像のオンザフライ最適化、多オリジン分割、リージョン分散など拡張の余地を残したい
- すべてをIaC(CDK/Terraform)で厳密再現し、環境分離やアカウント分離を徹底したい
こんなとき Amplify を選ぶ
- まずは最速で信頼できる公開・PRプレビュー・自動デプロイが欲しい
- Next.js/SSR/ISR 等も黒箱で任せたい
- チームに専任のインフラ担当がいない/運用は最小限にしたい
AWS Amplify(アプリケーションの構築とデプロイ)| AWS
AWS Amplify を使用して、フルスタックのウェブアプリケーションおよびモバイルアプリケーションの開発を加速します。開始も簡単、スケールも簡単。クラウドの専門知識は不要。
aws.amazon.com

まとめ
この記事では、構築するインフラの具体的な構成やサービス、コストなどについて紹介しました。
次の記事から、実際にどのように構築したのかを記載していきますので、気になる方はぜひご覧ください!