J'ai essayé d'envoyer des courriels depuis sendgrid régulièrement avec heroku, avec python

Contexte

J'exécute un script python sur EC2 qui envoie la date de sortie du dessin animé par e-mail chaque semaine. Cependant, la période gratuite d'aws est passée et cela coûte beaucoup d'argent.

J'ai donc essayé de passer à heroku, qui semble être gratuit. Je vais résumer ce que j'ai essayé.

1. 1. Flux simple à déployer avec heroku


###préparation de l'environnement heroku(prémisse de centos)

##Installer la ceinture à outils Heroku
$ sudo wget -qO- https://toolbelt.heroku.com/install.sh | sh
$ sudo ln -s /usr/local/heroku/bin/heroku /usr/local/bin/heroku

##confirmation de l'exécution de la commande heroku
$ heroku version
heroku-toolbelt/3.32.0 (x86_64-linux) ruby/2.0.0
You have no installed plugins.

##Authentification
$ heroku login
Enter your Heroku credentials.
Email: [email protected]
Password (typing will be hidden):
Authentication successful.

###Préparation de l'APP

$ cd myAPP

#Installation de la bibliothèque avec pip
#Écrivez le code comme vi
#Tester

$ git init
$ git add .
$ git commit -m "my first commit"

###Déployer sur heroku

##Enregistrement APP
$ heroku create
#Je ne pense pas qu'heroku crée mon APP soit simple ici
#Sinon, le nom de l'application sera correctement donné sur heroku

##Spécifiez les modules requis
$ pip freeze > requirements.txt
$ git add requirements.txt
$ git commit requirements.txt

##Déployer
$ git push heroku master

##Afficher le journal
$ heroku logs -t

Par ici, j'ai parcouru les étapes de démarrage répertoriées dans heroku et je l'ai découvert. Je n'aime pas les centos, mais quand je trace l'installation de toolbelt à partir du fichier officiel, seul le type debian est écrit, donc je peux le saisir de manière autonome.

référence: Getting Started with Python on Heroku | Heroku Dev Center [vagrant 1.5] Comment utiliser Heroku de CentOS 6.5 sur Vagrant. --Qiita

2. Enregistrez des informations secrètes avec heroku et déployez-les


#Réglez chaque
$ heroku config:set SENDGRID_USER_ID="hogehoge"
$ heroku config:set SENDGRID_PASS="fugafuga"
$ heroku config:set TO_ADDRESS="[email protected]"
$ heroku config:set FROM_ADDRESS="[email protected]"

#Vérification
$ heroku config
=== hogehoge Config Vars
FROM_ADDRESS:     [email protected]
SENDGRID_PASS:    fugafuga
SENDGRID_USER_ID: hogehoge
TO_ADDRESS:       [email protected]


Par exemple

sample.py



import os
print os.environ["SENDGRID_USER_ID"]

Ensuite, vous pouvez définir la variable d'environnement pour chaque application. Cela peut également être défini à partir de l'écran Web heroku. (Dans ce cas, vous pouvez vous y référer immédiatement depuis le local)

Heroku est déployé via git, mais si git.heroku.com est publié ou connexion github, le code sera publié, je souhaite donc masquer l'adresse e-mail et le chemin.

Donc, si vous définissez la variable d'environnement associée à l'application depuis cli ou web, elle sera masquée, alors je l'ai essayé.

J'ai senti qu'il y avait une méthode plus appropriée, mais une fois que la ceinture à outils heroku est incluse, le test local ne semble pas poser de problème, alors c'est tout.

3. 3. Un script python qui envoie du courrier via sendgrid

Mettez sendgrid avec pip et suivez presque le tutoriel.

Cependant, c'est comme suit avec quelques modifications pour utiliser les variables d'environnement ci-dessus.

sg_test.py


import sendgrid
import os

sg = sendgrid.SendGridClient(os.environ["SENDGRID_USER_ID"], os.environ["SENDGRID_PASS"])
message = sendgrid.Mail()

message.add_to(os.environ["TO_ADDRESS"])
message.set_from(os.environ["FROM_ADDRESS"])
message.set_subject("Sending with SendGrid is Fun")
message.set_html("and easy to do anywhere, even with Python")

sg.send(message)

Si vous regardez ce tutoriel officiel heroku, vous trouverez api_key et api_user. C'est comme avoir à émettre un jeton API. Cependant, c'était déroutant car l'id et le mot de passe du compte utilisés lors de la connexion à sendgrid étaient corrects.

De plus, il a fallu quelques jours pour créer un compte pour sendgrid, donc j'ai dû me préparer à l'avance pour le faire.

référence: sendgrid/sendgrid-python Python - SendGrid Documentation | SendGrid

Quatre. Exécutez comme cron avec le planificateur Heroku

Après avoir déployé et vérifié l'opération sur heroku,


$ heroku run python sg_test.py

Ajoutez un module complémentaire pour le planificateur heroku.


$ heroku addons:add scheduler:standard 

Ensuite, vous pouvez le vérifier à partir de l'écran de l'application de heroku, donc plugin.png

Entrez les paramètres de type cron à partir de l'écran de gestion des modules complémentaires heroku scheduler.png

Après cela, regardez simplement le journal etc. pour vérifier l'opération.

À propos, je faisais diverses choses lors de l'installation du planificateur heroku, et le planificateur de processus a également été enregistré. Il semble que vous puissiez modifier l'ensemble de ressources de Heroku sur une base horaire en une semaine pour la gestion des ressources. Puisqu'il y a une interface graphique de calendrier, j'aimerais pouvoir faire ce paramètre collectivement avec le planificateur heroku ...

référence: Heroku Scheduler | Add-ons | Heroku Heroku Scheduler | Heroku Dev Center Comment utiliser le planificateur heroku (Rails, sinatra) --Qiita

Résumé

J'ai pu mettre en œuvre le sujet ... mais je ne pouvais pas faire ce que je voulais faire car je voulais envoyer des e-mails par lots sur une base hebdomadaire ... (Je l'ai remarqué en chemin, mais je voulais jouer avec ou toucher légèrement heroku)

L'ordonnanceur Heroku ne pouvait être réglé que toutes les 10 minutes, toutes les heures, tous les jours ... Je me demandais si cela pouvait être résolu en ajoutant une telle logique du côté APP. De plus, dans certains cas, il y a des paas, et si vous n'y accédez pas pendant une heure, le processus dormira et vous devrez piquer régulièrement avec curl, donc ce sera stérile ...

Après tout, je pensais qu'il était plus facile de créer une VM pour 500 yens par mois et par océan numérique que de s'en tenir gratuitement. Après tout, paas m'a fait réaliser que les tests locaux / à distance et les problèmes d'exécution sont difficiles.

Y a-t-il des paas pour le batch ou spécialisés pour l'exécution cron? Peut-être y en a-t-il, mais je ne pense pas pouvoir le trouver.

Au fait, il semble y avoir un paas? Cela fait un conteneur de docker et le met sur le Web alternative Dokku, donc j'ai senti que mon souhait pouvait être exaucé là-bas. .. Mais est-ce déjà des paas? Et c'est une histoire sur la fabrication de paas par vous-même. .. Référence: PaaS basé sur Docker, facile à utiliser comme Heroku | KRAY Inc

c'est tout.

Recommended Posts

J'ai essayé d'envoyer des courriels depuis sendgrid régulièrement avec heroku, avec python
Scraping avec Python, publication sur TwitterBot, exécution régulière sur Heroku
J'ai essayé python pour la première fois avec heroku
J'ai exécuté python sur Windows
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
Remarques sur l'utilisation de MeCab depuis Python
Je ne me souviens pas des expressions régulières Python
python + django + scikit-learn + mecab (1) avec heroku
J'ai envoyé un SMS avec Python
python + django + scikit-learn + mecab (2) avec heroku
Python json.loads () renvoie str dans Heroku
[Python] Rétrospective de ce que j'ai enseigné aux débutants en programmation à partir des fonctions
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (Partie 1)
Remarques sur l'accès à dashDB à partir de python
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (partie 2)
Appeler C / C ++ depuis Python sur Mac
Exécutez régulièrement Python sur Heroku Scheduler
Mettre à jour Mac Python de 2 à 3
Déployez le modèle de reconnaissance faciale Python sur Heroku et utilisez-le depuis Flutter ②
Déployez le modèle de reconnaissance faciale Python sur Heroku et utilisez-le depuis Flutter ①
Je veux utiliser jar de python
Connexion de python à MySQL sur CentOS 6.4
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Ce que j'ai obtenu de Python Boot Camp
J'ai repensé à la classe Python
[IBM Cloud] J'ai essayé d'accéder à la table Db2 on Cloud à partir de Cloud Funtions (python)
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
J'ai essayé Python! ] Diplômé aujourd'hui de "Tout le monde Python! Qu'est-ce que Python!"!
J'ai essayé de lancer jupyter nteract sur le serveur heroku
Une histoire sur l'exécution de Python sur PHP sur Heroku
Lier PHP et Python à partir de zéro sur Laravel
Un mémorandum pour toucher Python Flask avec Heroku
Je veux utiliser le solveur ceres de python
[Node-RED] Exécuter Python sur l'environnement virtuel Anaconda à partir de Node-RED [Anaconda] [Python]
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
[Python] Je veux gérer 7DaysToDie depuis Discord! 2/3
Jusqu'à l'utilisation de PhantomJS avec Python sur Heroku
J'ai essayé d'envoyer un email avec SendGrid + Python
Je veux créer du code C ++ à partir de code Python!
Créer un environnement d'exécution Python sur IBM i
Remarque pour oct2py appelant le script Octave depuis Python