Für eine Weile habe ich ein Tool (OSS) namens Lamvery erstellt, mit dem sich AWS Lambda und [Introduced in Qiita](http: /) einfach bereitstellen und verwalten lassen. /qiita.com/marcy-terui/items/1617ab4e20e3339d1930) Ich durfte es tun, aber obwohl es recht bequem zu bedienen ist, ist es kürzlich als [Apex](https: // github) erschienen. .com / apex / apex) hat ein sehr hohes Maß an Aufmerksamkeit [^ 1] und ich war eifersüchtig, deshalb habe ich beschlossen, einen Vergleichsartikel zu schreiben.
Bitte überprüfen Sie hier für die Erklärung von "Lamvery". http://qiita.com/marcy-terui/items/1617ab4e20e3339d1930 https://github.com/marcy-terui/lamvery/blob/master/README.md
Wenn Sie sich das Wiki ansehen, können Sie ein Gefühl für "Apex" bekommen. https://github.com/apex/apex/wiki
Eine davon ist meine eigene Arbeit, daher möchte ich so fair wie möglich sein, aber bitte schauen Sie, wenn Sie auf der Lamvery-Seite sind. Darüber hinaus werde ich als Autor Erklärungen und Meinungen veröffentlichen. Für Ihre Information.
Apex beabsichtigt auch, verschiedene Dinge von der Opposition zu erfassen, aber es wäre hilfreich, wenn Sie auf Fehler hinweisen könnten.
Nachfolgend finden Sie einen Vergleich zum 29. Januar 2016.
Artikel | Apex | Lamvery |
---|---|---|
Implementierungssprache | Go | Python |
Wie installiert man | Binärer Download | PyPi,rpm,deb |
Unterstützte Laufzeit(Lambda) | Go, Python, Node.js | Python, Node.js |
Gelang es | Projekteinheit | Funktionseinheit |
Einstellungsdateiformat | JSON | YAML + jinja2 |
Es ist Geschmackssache.
Apex
Da die Installationsmethode Go ist, wird sie für jede Abhängigkeit binärisiert und ist "Apex" stark, nur um sie herunterzuladen und zu platzieren?
Lamvery
Sie müssen die Python
+ pip
-Umgebung einrichten. Von dort aus können Sie mit pip
alle Abhängigkeiten mit einem Befehl installieren. [^ 2]
Wir bieten auch Yum- und Deb-Pakete an, mit denen Sie eine völlig unabhängige Umgebung einschließlich Python für die Verwendung in CI-Umgebungen erstellen können.
https://github.com/marcy-terui/lamvery#installation
Apex
Das Merkmal von "Apex" ist, dass es "Golang" unterstützt, was Lambda offiziell nicht unterstützt. Außerdem scheint es einem AltJS-System wie Babel zu entsprechen [^ 3]
Lamvery
Lamvery
beabsichtigt nicht , Go
zu unterstützen, sofern nicht anders angefordert. [^ 4]
Node.js
ist vorerst experimentelle Unterstützung, da ich der Python
-Main bin. [^ 4]
Ich denke, es ist nicht zu weit weg für den Beamten, um "Go" zu unterstützen, aber was ist mit? Ich frage mich, ob jeder eine so informelle Methode anwenden möchte ...?
Apex
Apex
kann mehrere Lambda-Funktionen zusammen in einem Projekt verwalten, und es gibt Einstellungsdateien, die auf das Projekt angewendet werden, und Einstellungsdateien, die auf einzelne Funktionen angewendet werden.
Lamvery
Lamvery kann nur auf Funktionsbasis verwaltet werden. Hier denke ich darüber nach, was ich in Zukunft tun soll.
Da es sich jedoch um eine Funktionseinheit handelt, ist sie auf Python beschränkt. Wenn Sie jedoch nur die von dieser Funktion verwendete Bibliothek in der virtuellen Umgebung "virtaulenv" [^ 5] installieren, wird sie unter Berücksichtigung der Speichereffizienz automatisch erfasst. Und ich versuche es hochzuladen. Dies liegt daran, dass Apex
nur alles in einem bestimmten Verzeichnis hochlädt, sodass die Quellcodekapazität von Lambda begrenzt ist -lambda-Kapazität /) Ist das nicht ein großer Unterschied? Nur für Python. .. .. [^ 6]
Apex
Es ist nur "JSON".
Lamvery
Obwohl es sich um "YAML" handelt, wird es mit der Template-Engine jinja2 abgedeckt.
Das heißt, es unterstützt das Einbetten von Variablen und das dynamische Schreiben.
Artikel | Apex | Lamvery |
---|---|---|
Deploy | ○ | ○ |
Rollback | △ | ○ |
Beliebige Alias-Einstellungen | ☓ | ○ |
Lauf(Invoke) | ○ | ○ |
Ausschlussliste | ○ | ○ |
Übergabe vertraulicher Informationen | ○ | ◎ |
CloudWatch Events(Planen Sie die Ausführung) | ☓[^8] | ○ |
CloudWatch Logs(Ausführungsprotokoll anzeigen) | ○ | ○ |
CloudWatch Metrics(Startzeit etc.) | ○ | ☓ [^7] |
Von den Merkmalen in beiden werden nur die Teile aufgelistet, die charakteristische Unterschiede aufweisen.
Deploy & Rollback Die speziellen Versionsspezifikationen von Lambda sind leicht zu verstehen, daher sollten Sie sie lesen ↓ http://dev.classmethod.jp/cloud/aws/lambda-versioning/
Apex
Die Versionierung [^ 9] ist erforderlich. Stellen Sie beim Bereitstellen den Alias "aktuell" ein und ersetzen Sie beim Zurücksetzen "aktuell" durch die neueste Vorgängerversion.
Diese "Apex" -Methode bricht jedoch zusammen, wenn Alias durch etwas anderes als Bereitstellen und Zurücksetzen ersetzt wird. Das ist in Ordnung, aber selbst wenn Sie die Bereitstellung und das Rollback zweimal wiederholen, wird es kaputt gehen (siehe unten).
Am Ende möchte ich, dass es zu "2" zurückkehrt, aber ich weiß, dass es fehlschlagen wird und zu "3" zurückkehren wird. Derzeit gibt es die Möglichkeit, beim Rollback eine beliebige Version anzugeben, aber ich halte es für Unsinn, dass sich Menschen die Versionsnummer merken müssen.
Lamvery
Aufgrund der oben genannten Probleme verwendet "Lamvery" eine andere Methode.
Fügen Sie bei der Bereitstellung einfach einen weiteren Alias zur vorherigen Version hinzu und führen Sie einen Rollback durch. Dies dient zum Aktivieren von Vorgängen wie dem vorübergehenden Zurückspulen auf die vorherige Version zwei oder mehr.
Darüber hinaus gibt es eine Funktion zum Anhängen eines beliebigen Alias, sodass Sie Versionen flexibel verwalten können, indem Sie sie in Kombination verwenden. Wenn Sie es so einfach wie Apex verwenden möchten, verwenden Sie einfach Deploy und Rollback mit aktivierter Versionierung. Die Versionierung ist erforderlich, wenn Sie Rollback verwenden. Sie können sie jedoch in der Konfigurationsdatei deaktivieren, wenn Sie dies nicht tun. Sie können auch einen beliebigen Alias festlegen, der zur Bereitstellungszeit festgelegt wird. Dies ist auch angesichts der zuvor erwähnten Lambda-Kapazitätsgrenze eine notwendige Option. Ich glaube, es ist. Sie können es für kleinere Korrekturen deaktivieren und bei Bedarf einschalten, damit Sie es zurücksetzen können.
Apex Es kann in einem einzigen Schuss gestartet werden, wobei Eingaben von Standardeingaben (Streaming) nacheinander akzeptiert und kontinuierlich synchron ausgeführt werden [^ 10]. Lamvery Nur einmalige Ausführung. Streaming möchte asynchron ausgeführt werden [^ 10] und ClooodWatch-Protokolle in Form eines Endes unterstützen.
Apex
Geben Sie während der Bereitstellung eine Umgebungsvariable an. Es kann nicht in die Versionsverwaltung einbezogen werden [^ 11].
Wenn man sich die Quelle und das Wiki ansieht, scheint es, dass Python nicht unterstützt ...?
Lamvery
Sie können KMS verwenden, um die Version [^ 10] zu verwalten, indem Sie die verschlüsselten vertraulichen Informationen in die Einstellungsdatei aufnehmen.
~~ Derzeit wird nur Python unterstützt, aber wir hoffen, Node.js in naher Zukunft unterstützen zu können. ~~
Node.js wird ebenfalls unterstützt (2015.02.03)
Bisher gibt es meiner Meinung nach insgesamt Vor- und Nachteile. Ich denke jedoch, dass die Rollback-Spezifikationen und die Unterstützung von CloudWatch-Ereignissen einen großen Unterschied darstellen. Ich würde es begrüßen, wenn Sie nicht nur auf "Apex", sondern auch auf "Lamvery" achten könnten, wenn man bedenkt, dass japanische Unterstützung möglich ist [^ 12]. :-) [^ 13]
https://github.com/marcy-terui/lamvery
[^ 1]: Anzahl der Sterne auf GitHub, Apex Japanese Article und [Lamverys Qiita-Artikel](http: // qiita). com / marcy-terui / items / 1617ab4e20e3339d1930) Vergleichen Sie die Anzahl der Enden. .. ..
[^ 2]: pip
ist gem
in Ruby und npm
in Node.js. Wenn Sie Python mit pyenv
installieren, ist es standardmäßig enthalten, und wenn es sich um ein Linux-System handelt, wird es häufig vom Standardpaketmanager hinzugefügt.
[^ 3]: Es wird unterstützt, indem Go-Binärdateien von Node.js als untergeordneter Prozess gestartet und über die Standardeingabe / -ausgabe ausgetauscht werden.
[^ 4]: Ich mache mir Sorgen, weil es nicht viele Benutzer gibt. .. ..
[^ 5]: Python-Bibliothek, die eine unabhängige Python-Ausführungsumgebung erstellen kann, die keine Bibliotheken usw. gemeinsam nutzt.
[^ 6]: Da ich es hauptsächlich für Python verwende, möchte ich antworten, wenn mir jemand, der mit Node.js vertraut ist, nur eine Idee geben kann.
[^ 7]: Bald erhältlich
[^ 8]: Wird es unterstützt? Zur Diskussion unter Ausgabe
[^ 9]: Die Option "Veröffentlichen" für Lambda
Recommended Posts