[PYTHON] Déployer Django sans serveur avec Lambda

Vous avez déployé avec succès Django sur AWS Lambda. C'est facile avec le Framework sans serveur. L'URL et le référentiel sont ici. https://django-sls-helloworld.umihi.co/ https://github.com/umihico/django-sls-helloworld

Créez un projet par défaut pour sls et f1a13ba Après avoir confirmé l'opération, installez le plug-in de domaine personnalisé. 0970afe API Gateway n'a pas supprimé le nom d'étape à la fin de l'URL, et il semble être incompatible avec le routage de django, j'ai donc préparé un domaine personnalisé en premier.

$ serverless create --template aws-python3 --path django-sls-helloworld #Création de projet
$ cd django-sls-helloworld
$ serverless deploy #Déployer une fois
$ serverless invoke -f hello #Testez si cela fonctionne correctement
{
    "statusCode": 200,
    "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}
$ sls plugin install -n serverless-domain-manager #Installation du plug-in pour les paramètres du domaine

Modifiez serverless.yml. 603753b

serverless.yml




+ custom:
+   customDomain:
+     domainName: django-sls-helloworld.umihi.co
+     certificateName: umihi.co
+     basePath: ''
+     stage: ${opt:stage, self:provider.stage}
+     createRoute53Record: true
+     endpointType: 'edge'
+     securityPolicy: tls_1_2

provider:
  name: aws
  runtime: python3.8
$ sls create_domain
#On dit que cela prendra jusqu'à 40 minutes, mais la prochaine commande de déploiement peut être effectuée immédiatement. L'application du domaine prend juste du temps.
$ sls deploy

Ceci complète la page WEB avec des paramètres de domaine personnalisés. Ensuite, installez les bibliothèques requises pour Django. 80e8f1b

$ sls plugin install -n serverless-python-requirements

J'ai ajouté les fichiers suivants et modifié handler.py pour tester s'il était importé mais pas nécessaire. ec47570

requirements.py


import os
import sys

requirements = os.path.join(
    os.path.split(__file__)[0],
    '.requirements',
)

if requirements not in sys.path:
    sys.path.append(requirements)

requirements.txt


Django
Werkzeug
PyMySQL

handler.py


import json
+ import requirements

def hello(event, context):
+     # testing import libraries
+     import django
+     import werkzeug
+     import pymysql
    body = {
        "message": "Go Serverless v1.0! Your function executed successfully!",

Si vous déployez et que «serverless invoke -f hello» réussit, l'importation est réussie. Ensuite, créez un projet Django. 930a0c2 Ensuite, installez le plug-in WSGI pour la bibliothèque sans serveur. 52386e4

$ django-admin startproject django_sls_helloworld .
$ sls plugin install -n serverless-wsgi

Finalement, Correction du correctif pour installer PyMySQL au lieu de MySQLdb et la différence de version signalée à ce moment-là, 30361dd Ajoutez le nom du domaine défini dans ALLOWED_HOST et 1966857 Triez Lambda pour faire référence à WSGI. 1dce3d3

django_sls_helloworld/settings.py


import os
+ import pymysql
+ 
+ pymysql.version_info = (1, 4, 2, "final", 0)
+ pymysql.install_as_MySQLdb()
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)

réduction

DATABASES = {
    'default': {
-         'ENGINE': 'django.db.backends.sqlite3',
-         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+         'ENGINE': 'django.db.backends.mysql',
+         'NAME': 'djangodemo',
    }
}

réduction

- ALLOWED_HOSTS = []
+ ALLOWED_HOSTS = ["django-sls-helloworld.umihi.co"]

serveless.yml


  endpointType: 'edge'
  securityPolicy: tls_1_2
+ wsgi:
+   app: django_sls_helloworld.wsgi.application
+   packRequirements: false

réduction

functions:
  hello:
-     handler: handler.hello
+     handler: wsgi_handler.handler
#    The following are a few example events you can configure

Après le déploiement, l'écran familier est apparu même à la destination du domaine personnalisé. c'est tout. Au fait, puisqu'il s'agit d'un projet jetable, il est déployé avec DEBUG = True et SECRET_KEY est également posté sur Github, mais veuillez noter que c'est tabou en fonctionnement réel.

スクリーンショット 2020-06-20 11.14.30.png

Recommended Posts

Déployer Django sans serveur avec Lambda
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Déployer l'application Django avec Docker
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Django Heroku Deploy 1
Internationalisation avec Django
Django Heroku Deploy 2
CRUD avec Django
Grattage sans serveur régulier avec AWS lambda + scrapy Part 1.8
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
La fonction Lambda déploie les meilleures pratiques avec CircleCI + Lamvery
Authentifier Google avec Django
Django 1.11 a démarré avec Python3.6
Télécharger des fichiers avec Django
Créer des couches Lambda avec Lambda
Résumé du développement avec Django
Sortie PDF avec Django
Sortie Markdown avec Django
Utiliser Gentelella avec Django
Twitter OAuth avec Django
Premiers pas avec Django 1
Envoyer des e-mails avec Django
Téléchargement de fichiers avec django
Utilisez LESS avec Django
La mutualisation mécanise avec Django
Utiliser MySQL avec Django
Django à partir d'aujourd'hui
Premiers pas avec Django 2
Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework
Déployer une application existante avec docker + pyenv-virtualenv + uwsgi + django
Déployer l'application Django créée avec PTVS sur Azure
Déployez Flask avec ZEIT maintenant
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Facilement sans serveur avec Python en utilisant Calice
Environnement de site Web de configuration minimale avec django
Créer une API avec Django
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Python3 + Django ~ Mac ~ avec Apache
Écrivez facilement if-elif avec lambda
Premiers pas avec Python Django (1)
Créer une page d'accueil avec django
Lancez-vous avec Django! ~ Tutoriel ④ ~
Premiers pas avec Python Django (4)
Compilation Python avec pyqt deploy
Créer une application Web avec Django
Premiers pas avec Python Django (3)
Combinez Fast API avec Django ORM
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Utilisez Django pour enregistrer les données de tweet
PyTorch avec AWS Lambda [importation Lambda]
Effectuer le cryptage AES avec DJango
Introduction à Python Django (6)
Combinez deux images avec Django
Premiers pas avec Django avec PyCharm
Web en temps réel avec les chaînes Django
Déployer le projet django sur heroku
Suppression de double envoi avec Django
Framework Django REST avec Vue.js