Django

AWS 無料枠で Django をデプロイする完全ガイド:EC2・RDS・S3・CI/CD

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


Contents

スポンサードリンク

1. AWS アカウント作成と無料枠の確認

AWS の Free Tier は 12 ヶ月間 有効ですが、対象インスタンスタイプはサービスやリージョンごとに変わります。本章では最新情報を踏まえて正しいリソースを選択し、課金リスクを回避するポイントを解説します。

1-1. Free Tier の対象サービス(2026年4月時点)

AWS の公式ドキュメント[^1] によると、Free Tier が提供している EC2 と RDS のインスタンスタイプは次の通りです。

サービス リージョン共通の無料枠対象インスタンスタイプ 月間上限
EC2 t3.micro(x86_64)
t4g.micro(ARM)※2025 年以降は t4g.micro が追加対象となりますが、リージョンによっては未対応
750 時間
RDS db.t3.micro(PostgreSQL, MySQL, MariaDB 等)
※エンジンやリージョンにより上限が変動する可能性があります
750 時間

注: 上記は執筆時点の情報です。実際に利用を開始する前に、AWS Free Tier の最新ページで対象インスタンスタイプと上限を必ず再確認してください。

1-2. IAM ユーザーと最小権限ロールの設定

Free Tier 対象リソースだけにアクセスさせることで、予期しない課金を防げます。以下は EC2、RDS、S3 に限定したカスタムポリシー例です。

1-2‑a. カスタムポリシー(JSON)

  • rds-db:connectIAM DB 認証 用に必要な最小権限です。
  • acm:ExportCertificate は EC2 上で ACM 証明書を PEM 形式へエクスポートする際だけ付与し、ロールは限定的に使用します(後述)。

1-2‑b. ロール作成手順(CLI)

ベストプラクティス:ロールは EC2 インスタンスプロファイル としてアタッチし、不要になったらすぐにデタッチ・削除してください。


2. EC2 と RDS の構築手順とパッケージインストール

この章では無料枠対象の t3.micro(x86)または t4g.micro(ARM) を使用した EC2 インスタンスと、RDS PostgreSQL db.t3.micro の作成方法を解説します。続いて Amazon Linux 2023 で推奨されるパッケージマネージャ dnf による環境構築手順も示します。

2-1. インスタンス選定と起動

Free Tier の対象インスタンスタイプはリージョンに依存するため、コンソールで「Free tier eligible」フィルタを必ず有効にしてください。

項目 推奨設定
AMI Amazon Linux 2023 (AL2023)
インスタンスタイプ t3.micro(x86) または t4g.micro(ARM)
VPC デフォルト VPC、パブリックサブネット
キーペア 作成後に .pem を安全に保管

ポイント:インスタンス起動時に「自動的に無料枠対象か」を確認できるチェックボックスがあります。必ず有効化してください。

2-2. セキュリティグループ設定

ポート プロトコル 許可元
22 TCP 自宅・オフィスの固定 IP(CIDR)
80 TCP 0.0.0.0/0 (HTTP、リダイレクト用)
443 TCP 0.0.0.0/0 (HTTPS)
  • SSH は IP 制限 を必ず行い、不要になったらルール削除します。
  • HTTP/HTTPS は後段の ALB または Nginx が受ける想定で全世界に開放していますが、内部通信だけにしたい場合は VPC の CIDR に絞っても構いません。

2-3. RDS PostgreSQL 作成とパラメータ調整

  1. コンソール → RDS → 「データベース作成」→「PostgreSQL」を選択
  2. DB インスタンスクラス:db.t3.micro(Free Tier)
  3. ストレージ:20 GiB まで自動スケーリング有効化(上限は無料枠を超えないようにモニタリング)
  4. パラメータグループmax_connections100 に設定し、同時接続数の不足によるエラーを防止

注意:リージョンによっては PostgreSQL のバージョン制限があるため、Free Tier でサポートされている最新版(例: 15.x)かを確認してください。

2-4. 必要パッケージのインストール(dnf 推奨)

Amazon Linux 2023 は dnf が標準です。yum コマンドは互換レイヤーとして残っていますが、最新情報に合わせて dnf を使用します。

TIPdnf は自動的に依存関係を解決し、トランザクションが失敗した場合はロールバックします。yum と比べて安全性が高い点がメリットです。


3. ACM 証明書の取得・EC2 での利用

HTTPS 化はセキュリティの最低ラインです。本章では AWS Certificate Manager (ACM) の無料証明書を取得し、EC2 上の Nginx に直接組み込む手順と、エクスポート時に必要な IAM 権限・安全対策について解説します。

3-1. 証明書リクエスト(DNS 検証が推奨)

  1. ACM コンソール → 「証明書のリクエスト」
  2. パブリック証明書 を選択し、対象ドメイン例 www.example.com を入力
  3. 検証方法は「DNS(Route 53)」を選び、表示された CNAME レコードを Route 53 のホストゾーンに作成

ポイント:DNS 検証は自動更新が可能で、手動の HTTP/HTTPS 検証より管理負荷が低くなります。

3-2. 証明書エクスポートと IAM 権限

EC2 が直接 PEM 形式の証明書を扱うには acm:ExportCertificate 権限が必要です。以下は 最小権限ロール の例です(先ほどのカスタムポリシーに含めました)。

エクスポート手順(CLI)

セキュリティ注意
- エクスポートしたプライベートキーは root 権限でのみ読み取り可能 にし、chmod 600 を設定してください。
- ロールに付与する acm:ExportCertificate は EC2 プロファイルのみに限定し、他のリソースへは付与しないこと。
- キーのローテーションは ACM の再発行と同時に実施し、古い PEM ファイルは即座に削除します。

3-3. Nginx での証明書設定

取得した acm_cert.pemacm_key.pem を Nginx 設定に組み込みます(次章「Gunicorn と Nginx の設定」で具体例を示します)。


4. Django アプリの取得・環境変数管理・S3 設定

このセクションでは GitHub に保存したコードを EC2 にデプロイし、機密情報は .env ファイルで安全に扱う方法と、静的/メディアファイルを Amazon S3 へオフロードする手順を解説します。

4-1. GitHub リポジトリ作成と .env 管理(django‑environ)

  1. GitHub 上で新規リポジトリを作成し、.gitignore*.envvenv/ を追加。
  2. ローカルでプロジェクトをクローン後、プロジェクト直下に .env ファイルを作成します(例は日本リージョン用)。

ベストプラクティス.env は絶対にリポジトリにコミットせず、GitHub Secrets にも保存しない。EC2 起動時のユーザーデータか、SSM パラメータストアで注入する方法も検討してください。

settings.py への組み込み

4-2. S3 バケット作成とポリシー設定

項目 推奨値
バケット名 my-django-staticmy-django-media(リージョン横断で一意)
パブリックアクセス 静的ファイルは公開、メディアは必要に応じてプライベート設定

CORS 設定例

バケットポリシー(静的ファイルの公開読み取り)

注意:メディアファイルはプライベートにしたい場合、aws s3api put-object-acl --acl private を利用し、Django 側で署名付き URL(generate_presigned_url)を返す実装が必要です。

4-3. django‑storages の設定

requirements.txt に以下を必ず追加してください。


5. Gunicorn と Nginx の設定、HTTPS 化

本章では systemd による Gunicorn デーモン化と、Nginx がリバースプロキシとして機能する構成を示します。前節で取得した ACM 証明書(PEM)を使用し、HTTPS 通信を実現します。

5-1. systemd 用 Gunicorn サービス

/etc/systemd/system/gunicorn.service に配置する内容です。環境変数は .env を読み込むように設定しています。

5-2. Nginx のリバースプロキシ設定(HTTPS)

/etc/nginx/conf.d/django.conf に以下を書き込みます。証明書は前章でエクスポートした PEM ファイルを使用します。

ポイントssl_certificatessl_certificate_key のパーミッションはそれぞれ 644600 が推奨です。

5-3. HTTPS 動作確認


6. CI/CD と運用・監視ベストプラクティス

自動化と可観測性は本番環境の信頼性を支える重要要素です。ここでは GitHub Actions によるデプロイパイプライン、CloudWatch Logs エージェント でのログ集約、そして Auto Scaling と最小権限ロール設計について解説します。

6-1. GitHub Actions デプロイワークフロー

以下は /.github/workflows/deploy.yml のサンプルです。GitHub Secrets に登録した情報だけを使用し、EC2 側の IAM ロールで必要権限(S3 読み取り・ACM エクスポート)を付与しています。

セキュリティEC2_SSH_KEYRead‑only の IAM ロールで管理し、GitHub 上に平文で保存しないこと。

6-2. CloudWatch エージェントでログ・メトリクス転送

設定例(/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json):

6-3. Auto Scaling と最小権限ロール設計

Free Tier の上限を超えない範囲で Auto Scaling Group を構築すれば、トラフィック増加時に自動で t3.micro(または t4g.micro)インスタンスが追加されます。

Launch Template 例

パラメータ 設定
AMI Amazon Linux 2023 (AL2023)
Instance Type t3.micro(Free Tier 対応)
IAM Role AutoScalingEC2Role(最小権限)
User Data dnf による基本パッケージインストール + アプリコード取得

Auto Scaling 用 IAM ロール(最小権限)

ポイントAutoScalingEC2Role は EC2 インスタンスプロファイルにのみ付与し、他のサービス(例: RDS)へのアクセスは別途ロールで管理します。


おわりに

  • 本ガイドは AWS Free Tier の最新情報(2026 年 4 月時点) に基づき、最小限のコストで Django アプリを本番環境へデプロイする流れを示しました。
  • 各ステップで使用したリソースや権限は 「最小権限」 の原則に従って設計していますが、実際の運用要件に合わせてポリシーは適宜調整してください。
  • 定期的な無料枠残量確認(AWS Billing ダッシュボード)と 証明書・キーのローテーション を忘れずに行うことで、予期せぬ課金やセキュリティインシデントを回避できます。

次のアクション
1. AWS コンソールで Free Tier の対象インスタンスタイプと上限を最終確認。
2. 本記事の手順どおりに IAM ロール・ポリシーを作成し、EC2 に適用。
3. CI/CD パイプラインを有効化してコード変更を自動デプロイ。

これで 「無料枠だけでスケーラブルな Django アプリ」 が完成です。ぜひ本番環境に適用し、実際のトラフィックでその効果をご確認ください。


参考リンク

項目 URL
AWS Free Tier(公式) https://aws.amazon.com/jp/free/
Amazon Linux 2023 ドキュメント https://docs.aws.amazon.com/linux/al2023/ug/
ACM 証明書エクスポート (CLI) https://docs.aws.amazon.com/acm/latest/userguide/export-certificate.html
RDS IAM DB 認証 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html
CloudWatch エージェント設定ガイド https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Django