Ich habe versucht, regelmäßig E-Mails von sendgrid mit Heroku und Python zu senden

Hintergrund

Ich führe ein Python-Skript auf EC2 aus, das wöchentlich das Veröffentlichungsdatum des Cartoons per E-Mail sendet. Die freie Zeit von aws ist jedoch vorbei und kostet viel Geld.

Also habe ich versucht, nach Heroku zu ziehen, das frei zu sein scheint. Ich werde zusammenfassen, was ich versucht habe.

1. 1. Einfacher Ablauf mit Heroku


###Heroku-Umgebungsvorbereitung(Centos Prämisse)

##Installieren Sie den Heroku-Werkzeuggürtel
$ sudo wget -qO- https://toolbelt.heroku.com/install.sh | sh
$ sudo ln -s /usr/local/heroku/bin/heroku /usr/local/bin/heroku

##Bestätigung der Ausführung des Heroku-Befehls
$ heroku version
heroku-toolbelt/3.32.0 (x86_64-linux) ruby/2.0.0
You have no installed plugins.

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

###APP Vorbereitung

$ cd myAPP

#Bibliotheksinstallation mit pip
#
#

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

###

##
$ heroku create
#
#

##Testen oder Bereitstellen der Heroku-APP-Registrierung Hier ist die Erstellung meiner APP durch Heroku nicht einfach. Andernfalls wird der APP-Name in Heroku ordnungsgemäß benannt. Geben Sie die erforderlichen Module an
$ pip freeze > requirements.txt
$ git add requirements.txt
$ git commit requirements.txt

##Bereitstellen
$ git push heroku master

##Protokoll anzeigen
$ heroku logs -t

Hier ging ich durch die in Heroku aufgelisteten Erste Schritte und fand es heraus. Ich mag keine Centos, aber wenn ich die Installation des Toolbelt vom Beamten aus verfolge, wird nur der Debian-Typ geschrieben, sodass ich ihn eigenständig eingeben kann.

Referenz: Getting Started with Python on Heroku | Heroku Dev Center [vagrant 1.5] Verwendung von Heroku aus CentOS 6.5 unter Vagrant. --Qiita

2. Registrieren Sie geheime Informationen bei Heroku und stellen Sie sie bereit


#Stellen Sie jeweils ein
$ 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]"

#Bestätigung
$ heroku config
=== hogehoge Config Vars
FROM_ADDRESS:     [email protected]
SENDGRID_PASS:    fugafuga
SENDGRID_USER_ID: hogehoge
TO_ADDRESS:       [email protected]


Zum Beispiel

sample.py



import os
print os.environ["SENDGRID_USER_ID"]

Anschließend können Sie die Umgebungsvariable für jede APP festlegen. Dies kann auch über den Heroku-Webbildschirm eingestellt werden. (In diesem Fall können Sie sofort von lokal darauf verweisen)

Heroku wird über git bereitgestellt, aber wenn git.heroku.com oder eine Github-Verbindung veröffentlicht wird, wird der Code veröffentlicht, sodass ich die E-Mail-Adresse und den Pfad ausblenden möchte.

Wenn Sie also die der Anwendung zugeordnete Umgebungsvariable über cli oder web festlegen, wird sie ausgeblendet, also habe ich es versucht.

Ich hatte das Gefühl, dass es eine geeignetere Methode gibt, aber sobald der Heroku-Werkzeuggürtel enthalten ist, scheint der lokale Test kein Problem zu sein, also ist es das.

3. 3. Ein Python-Skript, das E-Mails über sendgrid sendet

Setzen Sie sendgrid mit pip und folgen Sie fast dem Tutorial.

Bei einigen Änderungen ist es jedoch wie folgt, die oben genannten Umgebungsvariablen zu verwenden.

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)

Wenn Sie sich dieses offizielle Heroku-Tutorial ansehen, finden Sie api_key und api_user. Es ist, als müsste man einen API-Token ausstellen. Es war jedoch verwirrend, da die ID und der Pass des Kontos, das beim Anmelden bei sendgrid verwendet wurde, in Ordnung waren.

Außerdem dauerte es einige Tage, um ein Konto für sendgrid zu erstellen, sodass ich mich im Voraus vorbereiten musste, um es fertigzustellen.

Referenz: sendgrid/sendgrid-python Python - SendGrid Documentation | SendGrid

Vier. Laufen Sie wie ein Cron mit dem Heroku-Scheduler

Nach dem Bereitstellen und Überprüfen des Vorgangs auf Heroku


$ heroku run python sg_test.py

Fügen Sie ein Add-On für den Heroku-Scheduler hinzu.


$ heroku addons:add scheduler:standard 

Dann können Sie es auf dem APP-Bildschirm von Heroku überprüfen, also plugin.png

Geben Sie cron-ähnliche Einstellungen über den Add-On-Verwaltungsbildschirm ein heroku scheduler.png

Schauen Sie sich danach einfach das Protokoll usw. an, um den Vorgang zu überprüfen.

Übrigens habe ich während der Installation des Heroku-Schedulers verschiedene Dinge getan, und der Prozess-Scheduler wurde ebenfalls registriert. Es scheint, dass Sie den Ressourcensatz von Heroku in einer Woche stündlich für das Ressourcenmanagement ändern können. Da es eine Kalender-GUI gibt, wünschte ich, ich könnte diese Einstellung gemeinsam mit dem Heroku-Scheduler vornehmen ...

Referenz: Heroku Scheduler | Add-ons | Heroku Heroku Scheduler | Heroku Dev Center Verwendung des Heroku-Schedulers (Rails, Sinatra) - Qiita

Zusammenfassung

Ich konnte das Thema implementieren ... aber ich konnte nicht tun, was ich wollte, weil ich wöchentlich stapelweise E-Mails senden wollte ... (Ich habe es unterwegs bemerkt, aber ich wollte damit spielen oder Heroku leicht berühren.)

Der Heroku-Scheduer konnte nur alle 10 Minuten, jede Stunde und jeden Tag eingestellt werden. Ich fragte mich, ob dies durch Hinzufügen einer solchen Logik auf der APP-Seite gelöst werden könnte. In einigen Fällen gibt es auch Paas, und wenn Sie eine Stunde lang nicht darauf zugreifen, wird der Prozess schlafen und Sie müssen regelmäßig mit Locken stochern, damit es unfruchtbar wird ...

Immerhin hatte ich das Gefühl, dass es einfacher ist, eine VM für 500 Yen pro Monat pro digitalem Ozean zu bauen, als sich kostenlos daran zu halten. Immerhin fiel es paas schwer, Probleme lokal / remote zu testen und auszuführen.

Gibt es Paas für Batch oder spezialisiert für Cron-Ausführung? Vielleicht gibt es das, aber ich glaube nicht, dass ich es finden kann.

Übrigens scheint es einen Paas zu geben? Das macht einen Docker-Container und stellt ihn ins Internet Dokku-Alternative, sodass ich das Gefühl hatte, dass mein Wunsch dort erfüllt werden könnte. .. Aber ist es schon Paas? Und dies ist eine Geschichte darüber, wie man Paas selbst macht. .. Referenz: Docker-basiertes PaaS, das wie Heroku | KRAY Inc einfach zu verwenden ist

das ist alles.

Recommended Posts

Ich habe versucht, regelmäßig E-Mails von sendgrid mit Heroku und Python zu senden
Scraping mit Python, Posting auf TwitterBot, regelmäßige Ausführung auf Heroku
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Ich habe Python unter Windows ausgeführt
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Hinweise zur Verwendung von MeCab aus Python
Ich kann mich nicht an reguläre Python-Ausdrücke erinnern
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Ich habe eine SMS mit Python gesendet
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Problem mit Python json.loads (), das str in Heroku zurückgibt
[Python] Rückblickend auf das, was ich Programmieranfängern aus Funktionen beigebracht habe
Hinweise zum Zugriff auf dashDB über Python
[Python + Heroku] Vom Zustand ohne Python zur Anzeige von etwas mit Heroku (Teil 2)
Rufen Sie C / C ++ von Python auf dem Mac auf
Führen Sie Python regelmäßig auf Heroku Scheduler aus
Aktualisieren Sie Mac Python von 2 auf 3
Stellen Sie das Python-Gesichtserkennungsmodell für Heroku bereit und verwenden Sie es von Flutter ②
Stellen Sie das Python-Gesichtserkennungsmodell für Heroku bereit und verwenden Sie es von Flutter ①
Ich möchte ein Glas aus Python verwenden
Herstellen einer Verbindung von Python zu MySQL unter CentOS 6.4
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Was ich von Python Boot Camp bekommen habe
Ich schaute wieder auf die Python-Klasse zurück
[IBM Cloud] Ich habe versucht, über Cloud Funtions (Python) auf die Tabelle Db2 on Cloud zuzugreifen.
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Ich möchte mit Python eine E-Mail von Google Mail senden.
Ich habe Python ausprobiert! ] Heute Abschluss von "Jeder Python! Was ist Python!"!
Ich habe versucht, jupyter nteract auf dem Heroku-Server zu starten
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Verknüpfung von PHP und Python von Grund auf auf Laravel
Ein Memorandum zum Berühren von Python Flask mit Heroku
Ich möchte Ceres Solver aus Python verwenden
[Node-RED] Führen Sie Python in einer virtuellen Anaconda-Umgebung von Node-RED aus [Anaconda] [Python]
Was ich beim Update von Python 2.6 auf 2.7 gemacht habe
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 2/3
Bis zur Verwendung von PhantomJS mit Python auf Heroku
Ich habe versucht, eine E-Mail mit SendGrid + Python zu senden
Ich möchte C ++ - Code aus Python-Code erstellen!
Erstellen Sie eine Python-Ausführungsumgebung unter IBM i
Hinweis für oct2py beim Aufrufen des Octave-Skripts aus Python