[PYTHON] Was ich durch die Bereitstellung von Django auf EC2 gefunden habe

Einführung

Bisher habe ich Heroku als Cloud-Plattform verwendet. Da ich jedoch die Möglichkeit hatte, auf EC2 zu migrieren, habe ich die Lösung zusammengefasst, auf die ich während der Migrationsarbeit gestoßen bin, und Punkte, die beim Bereitstellen von Webanwendungen auf EC2 zu beachten sind. Es war.

Diesmal wird die folgende Verzeichnisstruktur angenommen

root
├── etc
│   └── systemd
│       └── system
│           └── sampled.service
└── home
    └── ubuntu
        └── sample
            └── sample.py

Es ist ein Python-Programm, das jede Minute "OK" ausgibt.

sample.py


#!/usr/bin/env python3
import syslog
from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job("interval", minutes=1)
def sample():
    syslog.syslog("OK")

sched.start()

Nebenbei: Ich konnte nicht sofort ein AWS-Konto erstellen

In meinem Fall ist ein Fehler in der Telefonauthentifizierung aufgetreten und ich konnte nicht fortfahren. Daher habe ich einen Support-Fall erstellt und um Support gebeten.

Immerhin dauerte es fast eine Woche, bis das Callcenter einen manuellen Vorgang durchgeführt hatte und das Konto verfügbar wurde. Wenn Sie also eine Fehlermeldung erhalten, erstellen Sie einen Support-Fall und lassen Sie ihn sofort bearbeiten!

Vorsichtsmaßnahmen beim Erstellen einer EC2-Instanz

Zunächst werde ich über die Punkte schreiben, die beim Erstellen einer EC2-Instanz zu beachten sind.

Beim Erstellen einer EC2-Instanz wählen Sie das zu verwendende AMI aus. Grundsätzlich ist es besser, das Amazon Linux-System auszuwählen. Dies ändert jedoch die Methode zum Erstellen des Daemon-Prozesses, der später eingeführt wird.

Überprüfen Sie bei der Bereitstellung unter Bezugnahme auf eine Site zunächst, welches AMI Sie verwenden, bevor Sie fortfahren!

Vorsichtsmaßnahmen beim Erstellen eines Daemons

Der nächste Punkt, den Sie beachten sollten, wenn Sie ein Programm zu einem Daemon machen.

Wie ich bereits geschrieben habe, ändert sich die Herstellungsmethode je nach verwendetem AMI.

Da diesmal Ubuntu 20.04 verwendet wurde, befand sich die Diensteinstellungsdatei zum Dämonisieren des Programms am folgenden Speicherort.

Hängt vom verwendeten AMI ab
Ubuntu: /etc/systemd/system/sampled.service

Umgebungsvariablen des Daemons

Der nächste zu beachtende Punkt beim Umgang mit Umgebungsvariablen im Daemon.

Dies ist der größte Stolperstein beim Festlegen der Umgebungsvariablen des Dämons.

Grundsätzlich gibt es kein Problem, wenn Sie den folgenden Befehl eingeben, um das Programm vom Terminal aus auszuführen.

$ SAMPLE=123456789
$ export SAMPLE
$ echo $SAMPLE
>>> 123456789

Wenn Sie Umgebungsvariablen persistent machen möchten

sudo vi /etc/profile

Wenn Sie die Umgebungsvariablen auflisten, die Sie festlegen möchten, werden sie beim nächsten Start angewendet.

/etc/profile


SAMPLE=123456789
export SAMPLE

Jedoch!!

Der Daemon liest diese Umgebungsvariablen nicht <<< wichtig hier !!

Erstellen wir also eine Umgebungsvariableneinstellung, die dem Dämon wie folgt gewidmet ist

/etc/sysconfig/sampled_env


SAMPLE=123456789

Fügen Sie außerdem die angegebene Umgebungsvariable zu den Diensteinstellungen hinzu, damit der Dämon sie lesen kann.

/etc/systemd/system/sampled.service


'''
Kürzung
'''
[Service]
#Nachtrag
EnvironmentFile=/etc/sysconfig/sampled_env
'''
Kürzung
'''

Geben Sie danach den folgenden Befehl ein, um die Diensteinstellungen neu zu laden und den Dämon neu zu starten.

$ sudo systemctl daemon-reload
$ sudo systemctl restart sampled

Geben Sie danach den folgenden Befehl ein. Wenn das aktive Element aktiv ist (ausgeführt wird), ist es erfolgreich.

$ sudo systemctl status sampled 
>>> sampled.service - sampled daemon
>>>   Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>>   Active: active (running)
>>> '''
>>>Kürzung
>>> '''

Wenn Sie das Programmprotokoll überprüfen möchten, können Sie es mit dem folgenden Befehl überprüfen!

$ sudo journalctl -u sampled
>>> Jul 29 17:50:24 ip-Ausgelassen abgetastet.py[Kürzung]: OK
>>> Jul 29 17:51:24 ip-Ausgelassen abgetastet.py[Kürzung]: OK

Dateiberechtigungseinstellungen

Als nächstes gibt es Hinweise zu Dateiberechtigungen.

Ich bin gestolpert, weil ich beim Demonstrieren eines Programms die Dateiberechtigungen nicht richtig eingestellt habe.

Wenn Sie den folgenden Befehl wie zuvor eingeben und das aktive Element fehlgeschlagen ist (Ergebnis: Exit-Code), vermuten Sie einen Berechtigungsfehler.

$ sudo systemctl status sampled 
>>> sampled.service - sampled daemon
>>>   Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>>   Active: failed (Result: exit-code)
>>> '''
>>>Kürzung
>>> '''

Wenn ein Fehler "Berechtigung verweigert" angezeigt wird, wechseln Sie zunächst in das Verzeichnis mit der Datei, die Sie dämonisieren möchten, und geben Sie den folgenden Befehl ein.

~/sampled


$ ls -l
>>> -rw-r--r-- 1 root  root  1052 Jul 29 17:16 sample.py

Überprüfen Sie die Zugriffsberechtigung der vom Befehl angezeigten Datei. Geben Sie den folgenden Befehl ein, wenn sie sich von dem in der Diensteinstellungsdatei des Dämons beschriebenen Benutzer und der Gruppe unterscheidet.

/etc/systemd/system/sampled.service


'''
Kürzung
'''
[Service]
User=sample
Group=sample-group
'''
Kürzung
'''

Mit den obigen Einstellungen

#Dateiberechtigungen ändern
$ sudo chown sample:sample-group /home/ubuntu/sample/sample.py
$ sudo chmod 755 /home/ubuntu/sample/sample.py

#Bestätigung der Änderung der Dateiberechtigung
$ ls -l
>>> -rwxr-xr-x 1 sample  sample-group  1052 Jul 29 17:16 sample.py

#Starten Sie den Daemon neu
$ sudo systemctl restart sampled

#Anzeige des Daemon-Betriebsstatus
$ systemctl status sampled
>>> sampled.service - sampled daemon
>>>   Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>>   Active: active (running)
>>> '''
>>>Kürzung
>>> '''

Wenn das aktive Element jetzt aktiv ist (ausgeführt wird), sind Sie fertig !!

abschließend

Es war schwierig, bis ich verschiedene Dinge tun konnte, weil ich normalerweise kein Linux benutze, aber es wird sehr praktisch sein, wenn ich es beherrsche, also werde ich weiter lernen!

Immerhin ist AWS erstaunlich

Danke für Ihren Besuch.

Recommended Posts

Was ich durch die Bereitstellung von Django auf EC2 gefunden habe
Was ich an 1/30 Tagen bei hackerrank gelernt habe.
Ich habe ein WebAPI gemacht! Erstellen einer Umgebung aus Django Rest Framework 1 mit EC2
Ich habe versucht, die Kosten zu senken, indem ich EC2 in einer Charge mit AWS Lambda gestartet / gestoppt habe
Python-Anfänger süchtig nach Django
Was ist Django? .. ..
Für Sie, die durch den Einsatz von Django in die Enge getrieben werden. Vollversion der Django 2.2-Bereitstellung unter Ubuntu 18.04 + Nginx
Ich habe es mit Django versucht
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
Verschiedene Hinweise zur Bereitstellung der Django-App auf Heroku
Was ich durch die Teilnahme am ISUCON10-Qualifying gelernt habe