AWS Lambda@Edge liefert 503 Error und es gibt keine Logs

Jobbedingt musste ich mich kürzlich mit AWS Lambda@Edge Funktionen herumschlagen. Da die wenigesten wahrscheinlich wissen, was das ist:

Lamdba Funktionen gehören zum Bereich “serverless” – letztendlich bedeutet es nur, dass man nicht eigene Server oder Dienste (z.B. wordpress) hosted, sondern einzelne Funktionen. Beispiel: eine Bildskalierung. Sprich, man gibt dem Service eine URL mit und parameter, wie groß das Zielbild sein soll. Der Service holt sich das Bild von der URL, verkleinert/vergrößert es auf die Maße und gibt es dann zurück.

Lambda@Edge ist dann die Hipster Variante davon, diese Funktionen kann man nämlich vor sein AWS Cloudfront CDN hängen. Sprich, bei jedem Request, der beim CDN ankommt, wird vorher die entsprechende Lambda Methode ausgeführt. Mit dieser kann man den Request verändern, Authentifizierung abhandeln, oder auch z.B. A/B Tests fahren. (weitere Beispiele: docs.aws.amazon.com)

Im Gegensatz zum “normalen” Lambda gibt es jedoch ein paar Einschränkungen, die hier ganz gut erklärt werden: Lambda at the Edge

Zusätzlich zu den unzähligen Unterseiten, hier mal meine aktuellen Erkenntnisse zum Thema Lambda@Edge:

  • AWS Lambda@Edge funkionen MÜSSEN in “North Virginia (us-east-1)” abgelegt werden!
  • Der komplette Code für die Lambda Funktion darf nicht größer als 1MB sein, inkl. Libraries
  • du MUSST nodejs8.10 oder nodejs10.x verwenden
  • die Funktion darf nicht mehr als 128mb RAM verwenden
  • die Funktion darf nicht länger als 5s laufen
  • Die LOGS der Aufrufe über CLOUDFRONT werden nicht in Cloudwatch “North Virginia (us-east-1)” abgelegt, sondern in der Area, WO SIE HERKOMMEN. In meinem Fall also “EU (Frankfurt)”. Wenn man die Funktion selbst per Testcall in der Lambda Oberfläche aufruft, DANN landen die Logs in “North Virginia (us-east-1)”. Es hat mich mehrere Tage gekostet, darauf zu kommen…
  • Cookies, die man an die Funktion überträgt, werden im Cookie Array (event.Records[0].cf.request.headers.cookie) nicht als “key: value” übergeben, sondern als “cookie: key=value”

Etwas fies ist, dass die Fehlercodes sich überlappen. In meinem Fall bekam ich immer wieder einen 503 Fehler angezeigt, sobald ich meine Funktion über Cloudfront aufrief. Da ich zu diesem Zeitpunkt den “anderen Ort” der Logs nicht kannte, musste ich raten. Die 503 Fehlerseite gab aber ungünstigerweise noch den Hinweis, dass die Funktion wahrscheinlich nicht genügend Permissions oder Ressourcen hat – was mich die ganze Zeit auf die falsche Fährte lockte. Denn eigentlich warf meine Funktion die ganze Zeit selbst einen 500er Fehler, weil das Cookie Parsing nicht richtig klappte. Diese Unterscheidung sieht man aber nicht wirklich von aussen – sprich, eine fehlerhafte Konfiguration von Lambda@Edge Funktionen und Fehler im Script selbst sehen von aussen exakt gleich aus.

Nachdem ich die Logs dann endlich gefunden hatte, war das Problem schnell behoben (siehe Punkt “cookies”) in der oberen Liste, funktionierte meine Funktion nun wie gewünscht.

Wie die Presse Amazon im Jahre 1999 noch gesehen hat

Wahnsinn, wie sich die Experten und er Redakteur mehr oder weniger immer wieder drüber lustig machen, dass der Wert von Amazon zu diesem Zeitpunkt (1999) ja total überzogen ist und die Firma noch immer keinen Gewinn macht. Das ein paar Nerds denken, dass sie hier alle anderen überholen können usw.

Wenn man nun, ca. 17 Jahre später drauf schaut, dann sieht man erst, wie krass die Leute die Tech-Unternehmen eigentlich unterschätzt haben. Und wie richtig die Strategien von Leuten wie Jeff Bezos waren.

https://www.youtube.com/watch?v=fjjUOemW-_Q

Danke an den Kollegen Wadim für den Hinweis auf dieses großartige Video.

Jeff Bezos erklärt, wie er schwierige Entscheidungen trifft

Jeff Bezos, der Chef von Amazon, hat vor kurzem dem “Business Insider” ein Interview gegeben, bei dem es um das Thema “riskante Business Entscheidungen” ging.

Bezos erklärt in dem Artikel, wie er es hinbekommt, ein Unternehmen wie Amazon mit 341.000 Mitarbeitern immer noch so führen kann, als sei es ein Startup. Er nennt das die “Day 1 Mentalität”, was u.a. beinhaltet, dass man Entscheidungen schneller treffen sollte.

Um das zu erreichen versucht er innerhalb kürzester Zeit so viele Daten wie möglich zu bekommen, um dann auf dieser Datenbasis seine Entscheidungen zu treffen. Das Mantra dabei ist: versuche herauszufinden, wie viele Daten du mindestens benötigst (z.B. 70%) und nicht, wie viele optimal wären (90% oder mehr).

Hinzu kommt die oft zitierte Mentalität des Scheiterns, was hier in Deutschland leider noch immer als Makel angesehen wird, in Amerika aber eher als eine Chance um aus den Fehlern zu lernen. Bezos fügt auch hinzu, dass fast alle Entscheidungen auch wieder rückgängig gemacht werden können – also warum nicht einfach mal probieren und im Zweifel einen Rückzieher machen. Man sollte sich bei schwierigen Entscheidungen immer fragen: “was ist, wenn wir falsch liegen? Welche konkreten Konsequenzen hat das und wie können wir unsere falsche Entscheidung rückgängig machen?”.

Hand in Hand damit geht der nächste Tip, nämlich, dass man sich nicht so sehr darauf konzentrieren sollte, falsche Entscheidungen zu vermeiden, sondern eher, wie man diese schnell erkennt und sie korrigieren kann. Im Zweifel ist es für Unternehmen günstiger, Fehler zu machen und diese schnell zu korrigieren als träge zu werden und somit nicht mehr auf Veränderungen im Markt angemessen reagieren zu können.

Für Entscheidungen, die einen sehr großen Impact auf Kunden, Mitarbeiter und/oder Partner haben, schlägt Bezos das “Disagree and commit” Prinzip vor, also “ich stimme dir nicht zu, stehe aber voll hinter dir”. Er erklärt das an dem Beispiel einer Serie, die von den Amazon Studios produziert werden sollte. Er sah mehrere Probleme in der Finanzierung, ob das Thema der Sendung überhaupt spannend sei usw. Das Team jedoch war von seinen Ideen absolut überzeugt. Und so schrieb Bezos unverzüglich zurück: “Ich stimme euch nicht zu, aber stehe hinter euch und ich hoffe dass das die erfolgreichste Serie wird, die wir je gemacht haben”.

Er spricht sich damit sehr deutlich gegen die “Ich habe es dir vorher gesagt” Mentalität aus, sondern will eher ein “jeder muss es selbst lernen” Erlebnis hervorrufen. Denn Wenn ein Chef ständig Ansagen macht und alles besser weiß, dann wird das auf Dauer sehr demotivierend für seine Mitarbeiter und wird wiederum dafür sorgen, dass das Unternehmen träge wird. Und man kann ja nie ausschließen, dass man als Chef falsch liegt.

Das ganze Interview findet ihr unter http://www.businessinsider.com/jeff-bezos-explains-the-perfect-way-to-make-risky-business-decisions-2017-4

[Quicktip] 2 Faktor Authentifizierung für Amazon aktivieren

Mittlerweile hat man mit Amazon ja einen relativ wichtigen Account, über den man nicht nur einkauft, sondern evtl. auch seine Cloud Server betreibt oder das Amazon Cloud Drive verwendet. Von daher macht die 2 Factor Authentifizierung in jedem Fall Sinn, um nicht mal eine böse Überraschung zu erleben.

Die Aktivierung ist relativ leicht: meldet euch einfach auf “amazon.com” statt auf “amazon.de” an, und geht dann in die Accounteinstellungen, wo ihr das Passwort ändern könnt (Login & Security Settings). Unter “Advanced Security Settings” könnt ihr dann 2-Factor Auth aktivieren. Sobald das erledigt ist, erscheint dieser Menüpunkt auch auf der deutschen Amazon Seite 😉