Ich versuche, eine Reihe von Python-Skripten auf Amazon EC2 auszuführen. Dieser Hilfeleitfaden schlägt vor, Amazon SQS zu verwenden, um eine Warteschlange zu verwalten. Aus diesem Leitfaden verstehe ich, wie man eine EC2-Instanz hochfährt und einen Job von meinem Computer an die Warteschlange sendet, aber ich verstehe nicht, wie man die EC2-Instanz so einrichtet, dass sie das Python-Skript ausführt, nachdem es aus der Warteschlange abgerufen wurde, und dann das Ergebnis in Amazon S3 speichert. Wie kann ich ein Python-Skript abrufen, auf dem EC2-Server ausführen und die Ergebnisse in S3 speichern?
Antworten
Zu viele Anzeigen?In dem genannten Leitfaden finden Sie einen Link zu einem github-Repository mit Beispielscode. Dies ist ein funktionierendes Beispiel, das Ihre Frage beantwortet. Es ist gut dokumentiert und leicht zu lesen.
Genauer gesagt, werfen Sie einen genaueren Blick auf den Quellcode von pdf/tasks.py. Kurz gesagt, es verwendet ec2.run_instances
, um eine EC2-Instanz mit einem Bootstrap-Bash-Skript zu starten, das folgendes tut:
- aktualisiert die Instanz mit
apt-get
- verwendet in einer Schleife
boto.connect_sqs
, um eine Verbindung zu SQS herzustellen und eine Aufgabe abzurufen - führt die Aufgabe aus
- verwendet
boto.connect_s3()
, um eine Verbindung zu S3 herzustellen und die Ergebnisse hochzuladen - fährt die Instanz herunter, wenn das Skript fertig ist.
Aktualisierung
Darüber hinaus ist CheckResponseQueueTask
ein gutes Beispiel für das periodische Auslesen von Nachrichten mit Celery.PeriodicTask
aus SQS
und deren Verarbeitung. Schauen Sie sich das BOOTSTRAP_SCRIPT
an, Quelltextzeilen 51-57, für Beispielscode, der das Hochladen von Ergebnissen in S3 veranschaulicht. Und CheckQueueLevelsTask
veranschaulicht das Booten und Bootstraping einer neuen Instanz mit einem Warteschlangenprozessor, falls die Anzahl der Aufgaben die Anzahl der Instanzen überschreitet. Zeilen 214-244 zur Referenz.
Ein Weg, dies zu tun, wäre, Celery auf Ihrer EC2-Instanz auszuführen, das AWS SQS als Task-Broker von Haus aus verwenden kann.
Informationen zur Verwendung von Celery und AWS SQS finden Sie hier: http://docs.celeryproject.org/en/latest/getting-started/brokers/sqs.html
Celery unterstützt auch Parallelität und mehrere Worker. Das bedeutet, dass Sie mehrere EC2-Instanzen haben können, auf denen Celery läuft und die auf die eine AWS SQS-Warteschlange hören und die Aufgaben sich automatisch auf Ihre Instanzen verteilen werden.