GOOGLE ADS

Montag, 25. April 2022

Definition der $LATEST-Version von AWS Lambda

Bitte verweisen Sie mich auf die Dokumentation, in der AWS $LATEST der Lambda-Version definiert, oder schlagen Sie vor, dass AWS auf diese Weise eine Terminologie verwendet, ohne sie zu definieren.

AWS Lambda-Dokumente besagen eindeutig, dass $LATEST eine Version ist.


  • AWS Lambda-Funktionsversionen


Wenn Sie keine Version der ausgewählten Funktion veröffentlicht haben, wird im Bedienfeld „Versionen" nur die $LATEST- Version aufgeführt.

Anfangs dachte ich, es ist wie ein HEAD -Tag, das auf den neuesten Commit in einem Git-Zweig zeigt. Git-Commit ist unveränderlich, die Lambda- Version jedoch nicht.

AWS Lambda-Funktionsversionen

Eine Version kann veröffentlicht werden, die persistent ist.

Das System erstellt jedes Mal eine neue Version Ihrer Lambda-Funktion, wenn Sie die Funktion veröffentlichen.... Wenn Sie eine Version veröffentlichen, werden der Code und die meisten Einstellungen gesperrt, um eine konsistente Erfahrung für Benutzer dieser Version zu gewährleisten.

Es kann aber auch unveröffentlicht sein, das geändert und gespeichert werden kann.

Sie können den Funktionscode und die Einstellungen nur in der unveröffentlichten Version einer Funktion ändern.

Da ich die Definition von AWS nicht finden konnte, schätze ich, dass $LATEST ein temporärer Schnappschuss von Code + Laufzeit + Einstellung ist, den jemand irgendwann in einem AWS-Konto gespeichert hat und der noch nicht aktualisiert und gespeichert wurde.

Ich nehme an, es ist wie ein in Arbeit befindliches vorübergehendes Artefakt in einem lokalen Git-Repository. Wir wüssten nicht, was der Code ist, weil jemand ihn möglicherweise speichert, und wir wissen nie, was wir ausführen, wenn wir beim Aufruf keine veröffentlichte und daher unveränderliche Version als Qualifizierer verwenden.

Und persönlich glaube, dass eine Version unveränderlich sein sollte. Es sollte nicht änderbar sein wie Lambda $LATEST. Version 1 vom 19. März 15 Uhr oder Version 1 vom 20. März 13 Uhr ergibt für mich keinen Sinn. Version 1 muss eindeutig sein. Wenn Änderungen vorgenommen werden, muss es Version 1.1 oder 2.0 sein.

Aufrufen

POST /2015-03-31/functions/FunctionName/invocations?Qualifier=Qualifier HTTP/1.1

Bitte geben Sie an, ob dies das richtige Verständnis ist, und wir sollten $LATEST nicht für den Aufruf verwenden, es sei denn, nur eine Person arbeitet daran und testet.

Und wenn dem so ist, dient $LATEST wohl keinem praktischen Zweck in einem ordnungsgemäßen Engineering, bei dem wir in der Lage sein sollten, eine Revision eines Codes konsistent zu identifizieren und dasselbe Ergebnis zu reproduzieren, wenn wir dasselbe Verfahren für die Revision wiederholen.

Aktualisieren

Derzeit glaube ich, dass meine Verwirrung auf die inkonsistente und möglicherweise falsche Benennung durch AWS zurückzuführen ist.

Die Version ist unveränderlich, wenn sie veröffentlicht wird, aber veränderbar, wenn sie nicht veröffentlicht wird. In diesem Fall heißt sie $LATEST.

Version kann ein Snapshot einer Lambda-Funktion sein, aber es kann auch eine Ganzzahl sein.

$LATEST zeigt auf die zuletzt gespeicherte Lambda-Funktion, die jederzeit geändert werden kann, daher können wir nicht sicher wissen, was wir ausführen oder betrachten, wenn wir $LATEST verwenden. $LATEST, das ich sehe, kann sich von dem unterscheiden, was jemand anderes sieht. Es sieht für mich so aus, als würde die Arbeit an $LATEST an einem sich bewegenden Ziel arbeiten.

AWS hat so viele seltsame „Fallstricke", dass der ECS-Kapazitätsanbieter unveränderlich ist und nach seiner Erstellung nicht gelöscht werden kann, und wenn der ECS-Cluster gelöscht wird, bleibt dieser Kapazitätsanbieter dort und unsichtbar, was zu Fehlern führt, wenn versucht wird, einen neuen Kapazitätsanbieter für einen neuen ECS-Cluster zu erstellen mit demselben Namen (der Fehler, der "as designed" genannt hat, wurde jedoch endlich behoben). Ich glaube, $LATEST ist einer von ihnen.

Geben Sie hier die Bildbeschreibung ein


Lösung des Problems

Basierend auf den Kommentaren half Folgendes, die Probleme zu klären:

Wenn Sie in Lambda auf „Version" verweisen, meinen Sie normalerweise „veröffentlichte Version" (z. B. 1, 2, 3), die unveränderlich ist. $LATESTist einfach die neueste "unveröffentlichte Version", die Sie nach Belieben ändern können. Sie arbeiten/testen weiter, $LATESTbis Sie damit zufrieden sind. Sobald Sie zufrieden sind, können Sie es "einfrieren", indem Sie es veröffentlichen. Zu der Zeit wird es unveränderliche Version Nr. 1 zum Beispiel.

Da Versionen unveränderlich sind, aliaseswerden sie normalerweise in Ihrem Client-Code verwendet. Die Aliase können geändert werden, um auf verschiedene Versionen zu verweisen, wenn Sie eine neue Version Ihrer Funktion veröffentlichen. Wenn Versionen veränderbar wären oder irgendwie "unveröffentlicht" werden könnten, wären Aliase ziemlich sinnlos.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...