2017-04-06 4 views
0

Für ein Projekt, an dem ich gerade arbeite, muss eine größere Textdatei heruntergeladen werden, die täglich aktualisiert und verfügbar gemacht wird eine spezifische Kunden-URL, und speichern Sie sie in AWS S3, die dann die Downstream-Verarbeitung der Datei auslöst (Details unwichtig).Ratschläge zum Herunterladen einer großen Datei von einem bandbreitenbeschränkten Server in einen AWS S3-Bucket

Ich dachte daran, den Download + Store in S3 von einem AWS Lambda alle 24 Stunden von CloudWatch ausgelöst, was funktionieren würde, aber es gibt einen Haken: Die Datei ist 36MB groß und wird von einem Host bedient, der drosselt Downloads auf 100kB/s (außerhalb meiner Kontrolle). Dies bedeutet, dass mindestens 360 Sekunden (d. H. 6 Minuten) benötigt werden, um die Datei vollständig herunterzuladen. AWS Lambda-Funktionen haben jedoch eine Obergrenze von 300s Laufzeit, was es effektiv unmöglich macht, für diese Aufgabe als das Lambda-Zeitlimit zu verwenden und zu beenden, bevor die Datei vollständig heruntergeladen ist.

Ich bin auf der Suche nach Vorschlägen für die Arbeit um das 300s Laufzeitlimit von AWS Lambda, um dieses Ziel zu erreichen. Wenn ich bei AWS bleibe, ist die einzige Alternative, die ich sehe, einen Cron-Job auf einer EC2-Instanz einzurichten, aber das scheint teuer/übertrieben zu sein, besonders wenn ich am Ende keine ständig aktive EC2 benötige für alles andere.

Danke!

Antwort

0

Ich würde den Lambda Spin eine kleine EC2-Instanz, die den Kopierjob ausführt. Sie können entweder ein benutzerdefiniertes AMI für die EC2-Instanz oder ein cloud-init-Skript verwenden, mit dem alles eingerichtet wird. Lassen Sie das Programm auf dem EC2 ein wenig laufen und denken Sie daran, dass Sie für eine Stunde in Rechnung gestellt werden, unabhängig davon, wie viel Zeit Sie benötigen. Aber wenn der gesamte Vorgang 15 Minuten dauert (da es keine Möglichkeit gibt, gegen einige Verkehrsstaus zu garantieren) und Sie ein t2.nano verwenden, wurden Ihnen USD 0,006 (6 Zehntel eines Cent) plus ein paar I/O in Rechnung gestellt. wahrscheinlich, EBS-Speicherplatz. Ich würde wetten, dass Sie sehr wenig ausgeben würden.

Sobald der Job fertig ist, beendet er die EC2-Instanz, auf der er ausgeführt wird.

Ich weiß, dass dies ein wenig Aufwand ist - CloudWatch löst Lambda aus, die den EC2 auslöst. Aber CloudWatch alleine wird nicht in der Lage sein, das zu tun, was Sie für den EC2 brauchen.

+0

Haben Sie in Betracht gezogen, die Textdatei zu komprimieren, um ihre Größe zu reduzieren? –

+0

@TimChild, das war natürlich mein erster Gedanke aber leider nein, die Datei wird von einer Drittpartei und nur als Textdatei zur Verfügung gestellt. – Jupiterese

+0

@stdunbar, danke das klingt wie ein großartiger Vorschlag und ich habe es als Beantwortung meiner Frage markiert. Ich habe ein wenig mehr recherchiert und eine AWS Knowledge Center-Seite gefunden, die das Stoppen und Neustarten von EC2-Instanzen über Lambda beschreibt: https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/ – Jupiterese

Verwandte Themen