ちょっと待って…
本番環境に移行するのに忙しいという状況に誰もが遭遇したことがありますが、展開プラットフォームの選択には多くの要因が考慮されます。そうですね、AWS を使います。通常、プラットフォームに固執した後は、アーキテクチャ、コスト、信頼性、スケーラビリティ、可用性、実現可能性などのいくつかの要素に頼ることができます。何だと思う!!! AWS はそれらすべてにおいて信頼されているため、これは信頼性、スケーラビリティ、可用性、実現可能性に関するものではありません。このチュートリアルでは、Django アプリのいくつかのアーキテクチャの良い点と悪い点を特定します。
先に進む前に、何が起こっているかを完全に理解するために、いくつかの前提条件を理解しましょう。
:) このチュートリアルに含まれるすべてのコードは、オープンソースとして利用可能になります。ご自由に足跡を入れてください
先に進む前に、次のことを行う必要があります:
キャッシュは、頻繁にアクセスされるデータを高速アクセスの場所に一時的に保存し、このデータの取得にかかる時間を短縮するために使用される技術です。 AWS では、キャッシュによりプライマリ データベースと API の負荷が最小限に抑えられ、アプリケーションのパフォーマンスとスケーラビリティが向上し、エンドユーザーの応答時間が短縮されます。
効率を高め、レイテンシーを削減し、コストを削減するためにキャッシュを行います。キャッシュはデータをアプリケーションの近くに保存することで、データベース クエリの頻度、ネットワーク トラフィック、および計算負荷を軽減します。これにより、データの取得が高速化され、ユーザー エクスペリエンスが向上し、リソース使用量が最適化されます。これは、高トラフィックのアプリケーションにとって重要です。
EC2:
Elastic Compute Engine の正式な意味から、EC2 は AWS データセンターにある Web サーバーです。言い換えれば、EC2 は AWS から取得できる仮想的なものです。利用可能なすべての機能を備えた「従量課金制プラン」の下で、非常に安い月額料金で入手できます。
AWS アプリランナー:
これは、Web アプリケーションと API の実行とスケーリングを簡素化し、開発者がインフラストラクチャ管理なしでコード リポジトリやコンテナ イメージから迅速にデプロイできるようにするフルマネージド サービスです。
セロリとジャンゴセロリ:
Celery は、Python でリアルタイム処理を行うためのオープンソースの分散タスク キューです。 Django Celery は Celery を Django フレームワークと統合し、Django アプリケーション内での非同期タスクの実行、定期タスク、およびバックグラウンド ジョブ管理を可能にします。このテクノロジーの使用例はさまざまです。これには、通信サービス (SMS、電子メール)、スケジュールされたジョブ (Cron)、およびデータ集約、機械学習モデルのトレーニング、ファイル処理などのバックグラウンド データ処理タスクが含まれます。
Amazon RDS (リレーショナルデータベースサービス):
これは、クラウドでのリレーショナル データベースのセットアップ、運用、スケーリングを簡素化するマネージド データベース サービスです。 MySQL、PostgreSQL、Oracle、SQL Server などのさまざまなデータベース エンジンをサポートし、自動バックアップ、パッチ適用、高可用性を提供し、ユーザーをデータベース管理タスクから解放します。
コードを GitHub にプッシュし、CodePipeline ワークフローをトリガーします。 CodePipeline は CodeBuild を使用して、リリースのバージョン管理のために Elastic Container Registry (ECR) に保存される Docker イメージを作成します。このチュートリアルでは、Virtual Private Cloud (VPC) 構成をスキップします。 CloudWatch を使用してログを継続的に監視することで、アプリケーションの健全性を確保します。さらに、静的ファイル用に AWS RDS および S3 によって提供される Postgres を使用するためのプロジェクトの迅速な設定も可能です。
AWS EC2インスタンスを使用したデプロイ
同様のプロセスを使用して、バージョン管理と ECR を省略し、コードを GitHub にプッシュし、CodePipeline をトリガーします。CodePipeline は、CodeBuild を使用して、バージョン管理のために ECR に保存される Docker イメージを作成します。 EC2 インスタンスはこれらのイメージをプルして VPC 内にアプリケーションをデプロイし、エンドユーザーがアクセスできるようにします。アプリケーションは、データ ストレージの場合は RDS、静的ファイルの場合は S3 と対話し、CloudWatch によって監視されます。必要に応じて、certbot などのオプションを使用して、SSL 構成をこのインスタンスに追加できます。
ここでは、典型的な使用シナリオに基づいた EC2 と App Runner の仮想の価格比較を示します:
サービス | コンポーネント | コストの内訳 | 月額費用例(概算) |
---|---|---|---|
EC2 | インスタンスの使用状況 | t2.micro (1 vCPU、1 GB RAM) | $8.50 |
ストレージ | 30 GB 汎用 SSD | $3.00 | |
データ転送 | 100 GBのデータ転送 | $9.00 | |
合計 | $20.50 | ||
アプリランナー | リクエスト | 100万件のリクエスト | $5.00 |
コンピューティング | 1 vCPU、2 GB RAM、30 時間/月 | $15.00 | |
データ転送 | 100 GBのデータ転送 | $9.00 | |
合計 | $29.00 |
これら 2 つのリソースの管理方法について簡単にまとめてみましょう。
要因 | EC2 | アプリランナー |
---|---|---|
セットアップ | 手動セットアップが必要です | フルマネージドサービス |
管理オーバーヘッド | 高 - OS アップデート、セキュリティ パッチなどが必要です | 低抽象度のインフラストラクチャ管理 |
設定 | インスタンス構成の広範な制御 | 制限された制御、シンプルさを重視 |
要因 | EC2 | アプリランナー |
---|---|---|
スケーリング設定 | Auto Scaling グループの手動セットアップ | トラフィックに基づいた自動スケーリング |
スケーリング管理 | 設定と監視が必要です | AWSによる管理、シームレスなスケーリング |
柔軟性 | スケーリング ポリシーの高詳細な制御 | 簡素化され、柔軟性が低下します |
要因 | EC2 | アプリランナー |
---|---|---|
展開時間 | 遅い - インスタンスのプロビジョニングと構成 | より高速な - 管理された導入 |
アップデートプロセス | ダウンタイムまたはローリングアップデートが必要な場合があります | シームレスなアップデート |
自動化 | デプロイメントパイプラインのセットアップが必要です | 簡素化された統合された導入 |
要因 | EC2 | アプリランナー |
---|---|---|
カスタマイズ | 広範囲 - 環境を完全に制御 | 限定された管理環境 |
コントロール | 高 - 特定のインスタンス タイプ、ストレージなどを選択します | 下 - 使いやすさを重視 |
柔軟性 | 高 - 特殊な構成に適しています | 標準的な Web アプリケーション向けに簡素化 |
要因 | EC2 | アプリランナー |
---|---|---|
セキュリティ管理 | セキュリティ構成の高度で詳細な制御 | シンプルなセキュリティ管理 |
管理 | セキュリティグループ、IAMの手動構成が必要です | AWS によって管理され、より細分化された制御 |
コンプライアンス | コンプライアンス構成のための広範なオプション | コンプライアンス管理の簡素化 |
プロジェクトの比較はプロジェクトの設定自体には依存しないことを前提としています。 AWS の celery 構成を使用した基本的な Django アプリケーションを用意します。
Django を使用した基本的なプロジェクトを進めていきます。
リーリー
リーリー
リーリー
1- セロリの準備
リーリー
リーリー
init.py を更新して、Django の起動時にアプリが確実に読み込まれるようにします。リーリー
4- タスクを作成します
リーリー
5- ここで、単純な Json 応答を含む単純なビューを追加しましょう。
リーリー
6- アクセスを可能にするエンドポイントがなければ、ビューを持つことはできません
リーリー
7- アプリの URL をプロジェクト全体の一般的な urls.py に追加します。
リーリー
環境変数の追加:
リーリー
これらすべての手順を適切にフォローアップすると、次の出力が得られます:
AWS環境のセットアップ
新しい VPC (仮想プライベート クラウド) の作成
私たちは、リソース間の安全なアクセスと通信のために、隔離された環境とネットワークを作成します。
セキュリティグループの作成
以前に作成した VPC の下にセキュリティ グループを作成し、受信ルールと送信ルールを TCP ポート 6379 (Redis ポート) に追加します。
ElasticCache から RedisOSS を作成する
基本的に、AWS Elastic Cache はキャッシュに関して 2 つの種類、つまり RedisOSS と memCache を提供します。 RedisOSS は高度なデータ構造と永続化機能を提供しますが、Memcached はよりシンプルで、キーと値のペアの高速キャッシュに重点を置いています。 Redis は、Memcached とは異なり、レプリケーションとクラスタリングもサポートしています。ビジネスに戻り、Redis に戻ります。
Elastic Container Registry (ECR) のセットアップ
ECR イメージの作成は非常にシンプルで簡単です。
1: App Runner をデプロイするためのアップデート
ここでは非常に技術的になる必要があります。 VPC は、ほとんどのリソースが置かれている安全なネットワークです。アプリランナーは VPC 内に見つからないため、これらのリソース間の通信に安全な手段を提供する必要があります。
資格情報 ユーザーの資格情報
結果
このチュートリアルのコードベース全体は My GitHub にあります。
We will go with one the easiest EC2 to setup and the one having a free tier, an ubuntu EC2 instance. And The same code base that was used above is the same we are using here.
![EC2 1]https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rk8waijxkthu1ule91fn.png)
Alternatively, we can setup the security group separately.
Run this script to install necessary dependencies
#!/bin/bash # Update the package list and upgrade existing packages sudo apt-get update sudo apt-get upgrade -y # Install Python3, pip, and other essentials sudo apt-get install -y python3-pip python3-dev libpq-dev nginx curl # Install Redis sudo apt-get install -y redis-server # Start and enable Redis sudo systemctl start redis.service sudo systemctl enable redis.service # Install Supervisor sudo apt-get install -y supervisor # Install virtualenv sudo pip3 install virtualenv # Setup your Django project directory (adjust the path as needed) cd ~/aws-django-redis # Create a virtual environment virtualenv venv # Activate the virtual environment source venv/bin/activate # Install Gunicorn and other requirements pip install gunicorn pip install -r requirements.txt # Create directories for logs if they don't already exist sudo mkdir -p /var/log/aws-django-redis sudo chown -R ubuntu:ubuntu /var/log/aws-django-redis # Supervisor Configuration for Gunicorn echo "[program:aws-django-redis] command=$(pwd)/venv/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 my_schedular.wsgi:application directory=$(pwd) autostart=true autorestart=true stderr_logfile=/var/log/aws-django-redis/gunicorn.err.log stdout_logfile=/var/log/aws-django-redis/gunicorn.out.log user=ubuntu " | sudo tee /etc/supervisor/conf.d/aws-django-redis.conf # Supervisor Configuration for Celery echo "[program:celery] command=$(pwd)/venv/bin/celery -A my_schedular worker --loglevel=info directory=$(pwd) autostart=true autorestart=true stderr_logfile=/var/log/aws-django-redis/celery.err.log stdout_logfile=/var/log/aws-django-redis/celery.out.log user=ubuntu " | sudo tee /etc/supervisor/conf.d/celery.conf # Reread and update Supervisor sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart all # Set up Nginx to proxy to Gunicorn echo "server { listen 80; server_name; location / { proxy_pass http://127.0.01:8000; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; } error_log /var/log/nginx/aws-django-redis_error.log; access_log /var/log/nginx/aws-django-redis_access.log; }" | sudo tee /etc/nginx/sites-available/aws-django-redis # Enable the Nginx site configuration sudo ln -s /etc/nginx/sites-available/aws-django-redis /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-enabled/default # Test Nginx configuration and restart Nginx sudo nginx -t sudo systemctl restart nginx
This setup is available on GitHub on the dev branch, have a look and open a PR.
Feature / Service | Self-Managed on EC2 (Free Tier) | Fully Managed AWS Services |
---|---|---|
EC2 Instance | t2.micro - Free for 750 hrs/mo | Not applicable |
Application Hosting | Self-managed Django & Gunicorn | AWS App Runner (automatic scaling) |
Database | Self-managed PostgreSQL | Amazon RDS (managed relational DB) |
In-Memory Cache | Redis on the same EC2 | Amazon ElastiCache (Redis) |
Task Queue | Celery with Redis | AWS managed queues (e.g., SQS) |
Load Balancer | Nginx (self-setup) | AWS Load Balancer (integrated) |
Static Files Storage | Serve via Nginx | Amazon S3 (highly scalable storage) |
Log Management | Manual setup (Supervisor, Nginx, Redis) | AWS CloudWatch (logs and monitoring) |
Security | Manual configurations | AWS Security Groups, IAM roles |
Scaling | Manual scaling | Automatic scaling |
Maintenance | Manual updates and patches | Managed by AWS |
Pricing | Minimal (mostly within free tier) | Higher due to managed services |
注: 料金は概算であり、地域や特定の AWS の料金変更によって異なる場合があります。特定の要件に応じた最も正確なコスト見積もりを得るには、常に現在の AWS 料金ページを確認してください。
いやぁぁぁぁぁぁぁぁぁ!!!残念ながら、この件に関する要約はありません。はい、理解を深めるために前に戻ってください。
学習の道のりは長く、難しく見えるかもしれませんが、一度に 1 つのリソースを使い、継続的に知識を追加することで、目的と目標を達成することができます。
以上がDjango アプリのデプロイ: 外部 Celery を使用した EC アプリ ランナーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。