Serverlessを用いたAWSラムダへのDJANGOプロジェクトの展開(第4報)
前のブログ記事で約束した通りDeploying a Django project on AWS Lambda using Serverless (Part 3) , 反応を加える方法をあなたに教えたいです.JJPクライアントをDjangoプロジェクトに配備し、Servlessを使用してAWSラムダでDjangoで展開します.
Djangoフレームワークを使用すると、djangoテンプレートを使用してクライアントを構築することができますが、これは十分ではない場合が多いです.アプリケーションのクライアント側のビジネス要件は、クライアント側により複雑なロジックを追加する必要があります.これらのケースでは、JavaScriptのWebフレームワーク(reac . js、vuj . js、角度など)なしでビジネスの問題を解決することはできません.簡単な反応の作り方を教えてあげたい.JSクライアントとDjangoプロジェクトを使用して統合
このアプローチで、私は反応を構築します.CloudFrontディストリビューションのドメイン名をPublicCount URLとしてJSクライアントに接続し、Ajj 3にバンドルしています.それから、私はビルダーを加えます
私は既にDjangoプロジェクトを作成して、Serverlessを使用してAWSラムダでそれを展開する方法を説明しましたmy first blog post このシリーズの.私は始めるためにそのプロジェクトを使用します.
次の手順を実行しましょう. 私が使用したDjangoリポジトリをクローンthe first part of these series とクローンされたリポジトリに移動します.
指示に従ってくださいthis blog post Djangoサーバーをインストールするには、環境変数を設定します すべてが動作する場合は、クライアント上で作業を開始する準備が整いました.
この部分では、簡単な反応を作成する方法を示します.JSクライアントと我々のdjangoプロジェクトとそれを統合するが、私はあなたが簡単にVueを使用することができることを確認します.JS(私は角度に精通していない)はかなり同じステップとして.
反応を作成する多くのオプションがあります.JSクライアント.使っている インストール
反応スクリプトを使用して反応を初期化します.クライアント
反応するチェック.クライアントが正常に構築されました
Djangoの設定を更新しましょう 追加
更新
更新 ビルド生産反応.クライアントはローカルで以下のコマンドを実行します:
次のコマンドを実行して静的ファイルを収集します.
このdjangoプロジェクトをローカルで実行します(既に移行しているスーパーユーザを作成してください.
ブラウザに行き、このURLを開きますhttp://localhost:8000 このようなページが表示されます.
前に見たのと同じように見える
まず、クライアントからクライアントにデータを返すAPIエンドポイントを作成する必要があります.DjangoでREST APIをビルドする最も簡単な方法はDjango REST framework プロジェクト Djangoの残りのフレームワークをインストールして
新しいdjangoアプリを作成
更新
更新
プロジェクトの設定 更新
更新 インストール
更新
次のコマンドを実行して、ビルドを最適化したクライアントをビルドします.
次のコマンドを実行して静的ファイルを収集します.
ローカルでこのプロジェクトを実行します
しかし、あなたのスーパーユーザのユーザ名とパスワードを使用する権限を与えた場合、以下のようなページが表示されます.
以前のブログ記事でAWSインフラストラクチャを準備する方法については既に述べたので、次のいずれかを使用できます. 手動でAWSインフラストラクチャを準備するDeploying a Django project on AWS Lambda using Serverless (Part 3) ブログ柱 TRARFORMを使用して自動的にAWSインフラストラクチャを準備しますDeploying a Django project on AWS Lambda using Serverless (Part 2) ブログ柱
追加
Amazon Linux 2 Dockerイメージを必要なすべての依存関係で準備します.
ユーザ権限
ブラウザ上のDjangoプロジェクトURLに移動すると、Ajang - Mapゲートウェイに移動します.Djangoサーバーがレンダリングされます
このブログの記事では、反応を加える方法を見ました.DjangoプロジェクトへのJSクライアントとServerlessを使用してAWSラムダで展開します.そこへのリンクがありますGitHub repository ( GitLab copy ) このブログ記事に示されているコードで.
それは、このシリーズの最終的なブログ柱です.私は、AWSラムダでDjangoプロジェクトを配備するために、ちょうどAWSインフラストラクチャを準備して、反応を加える多くの方法のうちの1つを示しました.JSクライアント.あなたは他の多くの方法を見つけることができます同じことを行うには、それを使用する方法をあなた次第です.
Twitterで私をフォローすることを忘れないでくださいので、次の記事をお見逃しなく.
ブラフ
Djangoフレームワークを使用すると、djangoテンプレートを使用してクライアントを構築することができますが、これは十分ではない場合が多いです.アプリケーションのクライアント側のビジネス要件は、クライアント側により複雑なロジックを追加する必要があります.これらのケースでは、JavaScriptのWebフレームワーク(reac . js、vuj . js、角度など)なしでビジネスの問題を解決することはできません.簡単な反応の作り方を教えてあげたい.JSクライアントとDjangoプロジェクトを使用して統合
axios
クライアント側のライブラリとDjango REST Framework サーバ側で.このアプローチで、私は反応を構築します.CloudFrontディストリビューションのドメイン名をPublicCount URLとしてJSクライアントに接続し、Ajj 3にバンドルしています.それから、私はビルダーを加えます
index.html
反応するファイル.DjangoテンプレートフォルダへのJSアプリは、AWSラムダでDjangoプロジェクトでそれを展開します.始める
私は既にDjangoプロジェクトを作成して、Serverlessを使用してAWSラムダでそれを展開する方法を説明しましたmy first blog post このシリーズの.私は始めるためにそのプロジェクトを使用します.
次の手順を実行しましょう.
git clone https://github.com/vadym-khodak/django-aws-lambda
cd django-aws-lambda
.env
, マイグレーションを適用し、スーパーユーザを作成し、サーバーを実行します.反応を加える。クライアント
この部分では、簡単な反応を作成する方法を示します.JSクライアントと我々のdjangoプロジェクトとそれを統合するが、私はあなたが簡単にVueを使用することができることを確認します.JS(私は角度に精通していない)はかなり同じステップとして.
反応を作成する多くのオプションがあります.JSクライアント.使っている
react-scripts
この例では.react-scripts
使用 npm
( Node Package Manager )npm install -g react-scripts
npm init react-app client
cd client
npm run start
それはあなたのブラウザを開きますlocalhost
ポート3000
このようなページが表示されます.Djangoプロジェクトの設定の更新
Djangoの設定を更新しましょう
index.html
反応するファイル.JSクライアント:CLIENT_DIR
環境変数.env
ファイルCLIENT_DIR="client/build"
django_aws_lambda/urls.py
次のコードをファイルしますfrom django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', include('hello.urls')),
path('', TemplateView.as_view(template_name="index.html"), {'resource': ''}),
path('<path:resource>', TemplateView.as_view(template_name="index.html")),
]
STATICFILES_DIRS
インdjango_aws_lambda/settings.py
STATICFILES_DIRS = [
str(ROOT_DIR / env('CLIENT_DIR', default='client/build')),
str(ROOT_DIR / 'static'),
]
我々のdjangoプロジェクトが反応を走らせることができることを確認してください。クライアント
cd client
export PUBLIC_URL=static/
npm run build
cd ..
python manage.py collectstatic --no-input
python manage.py runserver
前に見たのと同じように見える
npm run start
インclient
フォルダ.ちょうど2、3の違いがあります8000
そして、それは我々のDjangoウェブサーバによって運営されます.反応する。JJOクライアントは、Djangoサーバーに話をします。
まず、クライアントからクライアントにデータを返すAPIエンドポイントを作成する必要があります.DjangoでREST APIをビルドする最も簡単な方法はDjango REST framework プロジェクト
requirements.txt
ファイルpip install djangorestframework
users
次のコマンドを実行します.python manage.py startapp users
users/views.py
次のコードをファイルしますfrom rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(["GET"])
def get_current_user(request):
return Response(status=status.HTTP_200_OK, data={"username": request.user.username})
This is an endpoint that returns Response object with
username
(if the user is not authorized it will return an empty string asusername
)
users/urls.py
次のコードをファイルしますfrom django.urls import path
from .views import get_current_user
app_name = "users"
urlpatterns = [
path("me/", view=get_current_user, name="get-current-user"),
]
django_aws_lambda/urls.py
次のコードをファイルしますfrom django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', include('hello.urls')),
path('api/users/', include('users.urls')),
path('', TemplateView.as_view(template_name="index.html"), {'resource': ''}),
path('<path:resource>', TemplateView.as_view(template_name="index.html")),
]
INSTALLED_APPS
インdjango_aws_lambda/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello',
'rest_framework',
'users',
]
反応の変更JJOクライアントのリクエストを送信するには
axios
ライブラリcd client
npm install axios -S
-S
flag will addaxios
library topackage.json
file
client/src/App.js
次のコードをファイルしますimport { useEffect, useState } from 'react';
import axios from 'axios';
import logo from './logo.svg';
import './App.css';
function App() {
const loadUserDetails = async () => {
const response = await axios.get('/api/users/me/');
return response.data;
};
const [userData, setUserData] = useState(false);
useEffect(() => {
loadUserDetails().then((payload) => {
setUserData(payload);
});
}, []);
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
<h1>Hello, World!</h1>
<h2>I'm {(userData && userData.username) || 'Unknown User'}</h2>
</header>
</div>
);
}
export default App;
export PUBLIC_URL=static/
npm run build
cd ..
python manage.py collectstatic --no-input
python manage.py runserver
ブラウザに行き、このURLを開きますhttp://localhost:8000 このようなページが表示されます.しかし、あなたのスーパーユーザのユーザ名とパスワードを使用する権限を与えた場合、以下のようなページが表示されます.
Serverlessを使用したAWSラムダでの展開
AWSインフラストラクチャを準備する
以前のブログ記事でAWSインフラストラクチャを準備する方法については既に述べたので、次のいずれかを使用できます.
無制限の設定
追加
client
フォルダpackage.exclude
展開から除外するクライアント/ src / appの更新URL。生産サーバへのリクエストを送信できるJSファイル
const response = await axios.get('/production/api/users/me/');
あなたのDjangoプロジェクトをServerlessを使用しているAWS
docker run -it -v $(pwd):/root/src/ -v /Users/<your-username>/.aws:/root/.aws amazonlinux:latest bash
# install the necessary Unix dependencies:
yum install sudo -y
sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel wget tar sqlite-devel gcc-c++ make
# install node.js version 14:
curl -sL https://rpm.nodesource.com/setup_14.x | sudo -E bash -
sudo yum install -y nodejs
# install Python 3.8.7:
cd /opt
sudo wget https://www.python.org/ftp/python/3.8.7/Python-3.8.7.tgz
sudo tar xzf Python-3.8.7.tgz
cd Python-3.8.7
sudo ./configure --enable-optimizations
sudo make altinstall
sudo rm -f /opt/Python-3.8.7.tgz
# create python and pip aliases:
alias python='python3.8'
alias pip='pip3.8'
# update pip and setuptools:
pip install --upgrade pip setuptools
# install serverless:
npm install -g serverless
# move to project directory
cd /root/src/
# install requirements inside docker container:
pip install -r requirements.txt
# set the necessary environment variables
export DJANGO_SETTINGS_MODULE=django_react_aws_lambda.production
export AWS_ACCESS_KEY_ID=<your-aws-access-key-id>
export AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key>
# migrate database changes
python manage.py migrate
# create a superuser in the database
python manage.py createsuperuser
# build React.JS client for AWS Lambda
cd client
npm install
export PUBLIC_URL="https://<your-cloud-front-distribution>.cloudfront.net/static/"
npm run build
# copy `index.html` from `client/build` to `templates`
cp build/index.html ../templates/index.html
cd ..
# collect static files to AWS S3 bucket
python manage.py collectstatic --no-input
# install serverless packages from package.json
npm install
# deploy your Django project to AWS Lambda using Serverless
serverless deploy -s production
今、反応とあなたのジャンゴプロジェクト.JSクライアントはこのURLで利用できます.https://<some-id>.execute-api.<your-aws-region>.amazonaws.com/production
許可されていないユーザ:ユーザ権限
動作方法
ブラウザ上のDjangoプロジェクトURLに移動すると、Ajang - Mapゲートウェイに移動します.Djangoサーバーがレンダリングされます
index.html
反応して.JSアプリは、ブラウザが反応を得るためにCloudFront分布のドメイン名を使用します.AWS S 3バケツからのJSクライアント.最終語
このブログの記事では、反応を加える方法を見ました.DjangoプロジェクトへのJSクライアントとServerlessを使用してAWSラムダで展開します.そこへのリンクがありますGitHub repository ( GitLab copy ) このブログ記事に示されているコードで.
それは、このシリーズの最終的なブログ柱です.私は、AWSラムダでDjangoプロジェクトを配備するために、ちょうどAWSインフラストラクチャを準備して、反応を加える多くの方法のうちの1つを示しました.JSクライアント.あなたは他の多くの方法を見つけることができます同じことを行うには、それを使用する方法をあなた次第です.
Twitterで私をフォローすることを忘れないでくださいので、次の記事をお見逃しなく.
Reference
この問題について(Serverlessを用いたAWSラムダへのDJANGOプロジェクトの展開(第4報)), 我々は、より多くの情報をここで見つけました https://dev.to/vaddimart/deploying-a-django-project-on-aws-lambda-using-serverless-part-4-m04テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol