Script python et envois d'email sur le cloud

Salut la zone,

Depuis quelques mois, je gère une newsletter hebdomadaire, qui répertorie les anniversaires des naissances, mariages et décès des membres d’une branche de ma famille.
Concrètement, tous les lundi matin à 3:00 UTC, j’ai mon Raspberry Pi qui lance un script Python qui va lire un CSV avec toutes les infos nécessaires, pond du HTML/Plain Text qui est ensuite envoyé par email via mon compte FastMail à une liste de diffusion (Fastmail elle aussi).

Dans l’état ça fonctionne, mais c’est pas pratique pour plusieurs raisons :

  • D’une part mon Raspberry Pi est un peu le maillon faible de l’installation. S’il se coupe ou perd l’accès à internet, l’email ne part pas. (d’ailleurs j’ai récemment déménagé et il faut donc que je réinstalle le bazar)
  • D’autre part, pas certain que ce soit une bonne idée d’envoyer tout ça par Fastmail, même si je suis bien en dessous des limites de mon compte (8000 messages par jour, pour le moment j’ai 15 personnes dans la mailing list)

Donc j’aimerais bien une solution simple pour remplacer mon Raspberry Pi dans un premier temps. Qu’est-ce que vous pourriez me conseiller ?

Merci !

Pour l’hébergement :
https://www.pythonanywhere.com/pricing/

1 « J'aime »

Une cron sur AWS Lambda avec ton csv chez github ?

Ou alors un serveur complet EC2 que tu démarres pour le traitement et que tu éteins ensuite? Je crois que AWS Batch est fait pour ce type d’usage.

Au niveau pricing ca devrait être de quelques centimes par mois…

/summon @GloP :slight_smile:

Je pense que tu peux même le faire en gratis chez heroku.

1 « J'aime »

Non pas Batch, c’est pas fait pour ça.

Mais AWS lambda, plus SES, plus Scheduled Events (meme pas besoin peut être juste config lambda de nos jours).

Si tu fais pas nawak c’est dans le free fier mais même sans c’est quelques centimes oui. Tu peux aussi envoyer des textos.

1 « J'aime »

Merci pour les idées, je vais regarder tout ça :slight_smile: ça a l’air effectivement plus stable que mon RPi !

J’espère bien sinon ils me payent pour rien :smiley:

1 « J'aime »

Moi qui croyait qu’AWS n’était que des cluster de RPi…

Google Script ?
Ca risque de te demander de remettre toutes tes data dans un google sheet, mais derrière le script est lancé en auto chaque jour et ça peux déclencher l’envoi des emails via une boite gmail.

Faut juste avoir un compte google et refaire tout ton soft dans google script / sheets mais ensuite la plateforme est plutôt très stable (selon vous, c’est qui a qui le plus de RPi dans son cloud, GCP ou AWS ? )

Ils en ont exactement le meme nombre: zero. Maintenant si c’est des serveurs dont on parle, y a meme pas photo :slight_smile: GCP est petit comparé a AWS.

C’est tout de même décevant de ne pas pouvoir se dire qu’il y a au moins un petit RPi dans l’un de ces énormes Cloud !

Je ne savais pas que GCP était petit VS AWS, je les voyais plus équivalents - même si GCP a beaucoup moins de services qu’AWS, dans mon secteur (le marketing digital), de plus en plus de boites passent vers GCP pour profiter des synergies entre Google Analytics et BigQuery (et pour certaines boites du retail, pour arrêter de filer du blé à leur premier concurrent sur le web, mais c’est une autre histoire…)

Sinon, c’est qui le plus fort, l’hippopotame ou l’éléphant?

Ça vaut ce que ça vaut ce genre d’estimation, mais voilà en terme de « chiffre d’affaire »:

GCP est lointain 3ème.

Others, il est sacrément costaud!

4 « J'aime »

Je me suis retrouvé sur un projet similaire récemment et j’avais pas envie d’utiliser PythonAnywhere.
J’ai fini par monter un serveur Heroku et leur scheduler pour faire une cron mais avec cet arrière goût dans la bouche de se dire qu’on utilise quand même un bazooka pour tuer une mouche.

Tout d’un coup j’ai eu l’illumination: « eh, mais est-ce que les github actions ne pourraient pas répondre à mon besoin ? » Et au final je trouve que c’est la meilleure solution et c’est super simple. Il suffit de créer un fichier .github/workflows/main.yml dans son projet avec le contenu suivant:

name: MonScript
on:
  [workflow_dispatch]
  
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "send-email"
  send-email:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.9'    
    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run Task
      run: |
        python monscript.py

Là pour tester j’ai utilisé [workflow_dispatch] comme déclencheur. Ca vaut dire qu’il faut que je presse le bouton Run dans l’onglet Actions de mon projet sur github mais ca se remplace très facilement si on veut utiliser une cron.

Ex, tous les lundis à 3h du matin:

on:
  schedule:
    - cron: '0 3 * * 1'
3 « J'aime »

Wah je me rends compte que j’ai oublié de donner des nouvelles.

Après explorations des pistes proposées (encore merci), j’en suis arrivé quasi à la même conclusion que toi @SkullyFM. A ceci près qu’au lieu d’utiliser GitHub Actions, j’utilise un pipeline d’Azure DevOps qui me permet aussi facilement de stocker en privé les CSV dont j’ai besoin sur Azure Artifacts. Un trigger automatique tous les lundis à 3:00UTC et le tour est joué. Ca ne me coûte rien et c’est hyper simple à maintenir.

J’ai utilisé Azure parce que c’est ce que j’utilise au boulot, donc je sais bien comment ça marche, mais effectivement GitHub Actions ou similaire fait largement le job et le setup est simplissime.

1 « J'aime »

J’ai vu la notion d’Artifacts aussi dans la doc chez Github mais j’ai pas creusé plus pour le moment.
Mais dans la suite de mon projet je risque d’en avoir besoin. Je récupère un JSON que j’aimerais stocker et je pense que je vais me diriger vers ça.

Ce sujet a été automatiquement fermé après 730 jours. Aucune réponse n’est permise dorénavant.