3 Stimmen

Amazon SQS, Boto und Python: Abrufen und Ausführen eines Skripts auf Amazon EC2

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?

5voto

alko Punkte 45378

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.

2voto

oznu Punkte 1614

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X