Jusqu'à présent, j'utilisais Heroku comme plate-forme cloud, mais depuis que j'ai eu l'opportunité de migrer vers EC2, j'ai résumé la solution sur laquelle je suis tombé par hasard pendant le travail de migration et des points à noter lors du déploiement d'applications Web sur EC2. C'était.
Cette fois, la structure de répertoires suivante est supposée
root
├── etc
│ └── systemd
│ └── system
│ └── sampled.service
└── home
└── ubuntu
└── sample
└── sample.py
C'est un programme Python qui affiche "OK" toutes les minutes.
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()
Dans mon cas, j'ai eu une erreur dans l'authentification du téléphone et je n'ai pas pu continuer, j'ai donc fait une demande d'assistance et demandé de l'aide.
Après tout, il a fallu près d'une semaine au centre d'appels pour effectuer une procédure manuelle et le compte est devenu disponible, donc si vous obtenez une erreur, créez immédiatement un dossier d'assistance et faites-le traiter!
Tout d'abord, j'écrirai sur les points à noter lors de la création d'une instance EC2.
Lors de la création d'une instance EC2, vous sélectionnez l'AMI à utiliser. Fondamentalement, il est préférable de sélectionner le système Amazon Linux, mais cela modifiera la méthode de création du processus démon qui sera introduit ultérieurement.
Ainsi, lors du déploiement en vous référant à un site, vérifiez d'abord quelle AMI vous utilisez avant de continuer!
Le point suivant à noter lors de la transformation d'un programme en démon.
Comme je l'ai écrit plus tôt, la méthode de fabrication changera en fonction de l'AMI utilisée.
Depuis Ubuntu 20.04 a été utilisé cette fois, le fichier de paramètres de service pour la démonisation du programme se trouvait à l'emplacement suivant.
Dépend de l'AMI utilisée
Ubuntu: /etc/systemd/system/sampled.service
Le point suivant à noter lors de la gestion des variables d'environnement dans le démon.
C'est la principale pierre d'achoppement dans la définition des variables d'environnement du démon.
Fondamentalement, il n'y a aucun problème si vous tapez la commande suivante pour exécuter le programme à partir du terminal.
$ SAMPLE=123456789
$ export SAMPLE
$ echo $SAMPLE
>>> 123456789
Si vous souhaitez rendre les variables d'environnement persistantes
sudo vi /etc/profile
Si vous énumérez les variables d'environnement que vous souhaitez définir, elles seront appliquées au démarrage suivant.
/etc/profile
SAMPLE=123456789
export SAMPLE
Pourtant!!
Le démon ne lit pas ces variables d'environnement <<< important ici !!
Créons donc un paramètre de variable d'environnement dédié au démon comme suit
/etc/sysconfig/sampled_env
SAMPLE=123456789
Ajoutez également la variable d'environnement spécifiée aux paramètres du service afin que le démon puisse la lire.
/etc/systemd/system/sampled.service
'''
réduction
'''
[Service]
#Postscript
EnvironmentFile=/etc/sysconfig/sampled_env
'''
réduction
'''
Après cela, tapez la commande suivante pour recharger les paramètres du service et redémarrer le démon.
$ sudo systemctl daemon-reload
$ sudo systemctl restart sampled
Après cela, tapez la commande suivante et si l'élément actif est actif (en cours d'exécution), il réussit.
$ sudo systemctl status sampled
>>> sampled.service - sampled daemon
>>> Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>> Active: active (running)
>>> '''
>>>réduction
>>> '''
Si vous souhaitez consulter le journal du programme, vous pouvez le vérifier avec la commande suivante!
$ sudo journalctl -u sampled
>>> Jul 29 17:50:24 ip-Omis échantillonné.py[réduction]: OK
>>> Jul 29 17:51:24 ip-Omis échantillonné.py[réduction]: OK
Ensuite, il y a des notes liées aux autorisations de fichiers.
J'ai trébuché parce que je ne définissais pas correctement les autorisations de fichier lors de la démonstration d'un programme.
Si vous tapez la commande suivante comme avant et que l'élément actif échoue (résultat: code de sortie), suspectez une erreur d'autorisation.
$ sudo systemctl status sampled
>>> sampled.service - sampled daemon
>>> Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>> Active: failed (Result: exit-code)
>>> '''
>>>réduction
>>> '''
Tout d'abord, si une erreur Permission refusée apparaît, accédez au répertoire contenant le fichier que vous souhaitez démoniser et tapez la commande suivante.
~/sampled
$ ls -l
>>> -rw-r--r-- 1 root root 1052 Jul 29 17:16 sample.py
Vérifiez l'autorisation d'accès du fichier affiché par la commande, et s'il est différent de l'utilisateur et du groupe décrits dans le fichier de paramètres de service du démon, entrez la commande suivante.
/etc/systemd/system/sampled.service
'''
réduction
'''
[Service]
User=sample
Group=sample-group
'''
réduction
'''
Avec les paramètres ci-dessus
#Modifier les autorisations de fichier
$ sudo chown sample:sample-group /home/ubuntu/sample/sample.py
$ sudo chmod 755 /home/ubuntu/sample/sample.py
#Confirmation du changement d'autorisation de fichier
$ ls -l
>>> -rwxr-xr-x 1 sample sample-group 1052 Jul 29 17:16 sample.py
#Redémarrer le démon
$ sudo systemctl restart sampled
#Affichage de l'état de fonctionnement du démon
$ systemctl status sampled
>>> sampled.service - sampled daemon
>>> Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>> Active: active (running)
>>> '''
>>>réduction
>>> '''
Si l'élément actif est maintenant activé (en cours d'exécution), vous avez terminé !!
C'était difficile jusqu'à ce que je puisse faire diverses choses parce que je n'utilise généralement pas Linux, mais ce sera très pratique si je peux le maîtriser, donc je vais continuer à apprendre!
Après tout, AWS est incroyable
Merci pour votre visite.
Recommended Posts