2017-11-30 4 views
0

Beim Schreiben einer Lambda-Funktion, die das aws-sdk-NodeJS-Paket für einen Shopify-Webhook verwendet, habe ich festgestellt, dass die require-Anweisung für das Paket mehr als 3 Sekunden zum Laden benötigt. Dies führt zu Problemen, da Shopify innerhalb von 5 Sekunden eine Antwort von seinen Webhooks benötigt. Ich abstrahiert den Code aus meiner Funktion es selbst zu testen und erhielt die gleichen Ergebnisse:Warum benötigt AWS Lambda 3+ Sekunden, um das Paket aws-sdk zu laden?

exports.handler = (event, context, callback) => { 
    const start = new Date().getTime(); 
    console.log('start: '+ new Date()) 
    require('aws-sdk'); 
    console.log('end:' + new Date()) 
    const end = new Date().getTime(); 
    console.log('length: ' + (end - start) + 'ms'); 
    callback(); 
} 

Hier war der Ausgang:

START RequestId: Version: $LATEST 
2017-11-30T13:23:57.506Z  start: Thu Nov 30 2017 13:23:57 GMT+0000 (UTC) 
END RequestId: 
REPORT RequestId: Duration: 3001.29 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 31 MB 
2017-11-30T13:24:00.499Z Task timed out after 3.00 seconds 

Antwort

1

Das Problem scheint zu sein, dass ich nicht das Lambda geben Funktion genug Speicher, um das Paket zu laden. Ich erhöhte den Speicher mit den folgenden Ergebnissen:

  • 512MB es gebracht
  • 1 GB bis 1000 ms brachte es auf 500 ms nach unten
+1

Die auf Ihre Container zugewiesen CPU-Kapazität ist auf die Größe des Speichers proportional Sie zuordnen. Es ist nicht wirklich die Menge an Speicher, da Sie nur 31 MB erreicht haben. Das große Problem hier ist, dass Sie dies nicht innerhalb der Handler-Funktion tun sollten. Verschieben Sie es in den globalen Bereich über dem Handler, sodass es nur beim Erstellen von Containern und nicht bei jedem Aufruf ausgeführt werden muss. –

+0

Nun, das macht viel mehr Sinn, ich war mir nicht bewusst, dass CPU und Speicher korreliert waren. Auch schlau mit dem Verschieben der Anforderung auf den globalen Raum, nicht sicher, wie ich das verpasst habe. –

Verwandte Themen