[PYTHON] Comparaison d'Apex et de Lamvery

Préface

Il y a quelque temps, j'ai créé un outil (OSS) appelé Lamvery qui facilite le déploiement et la gestion d'AWS Lambda, et [Introduit dans Qiita](http: / /qiita.com/marcy-terui/items/1617ab4e20e3339d1930) J'ai été autorisé à le faire, mais bien qu'il soit devenu assez pratique à utiliser, il est récemment apparu [Apex](https: // github). .com / apex / apex) a un degré d'attention très élevé [^ 1] et j'étais jaloux, j'ai donc décidé d'écrire un article comparatif.

Veuillez vérifier ici pour l'explication de «Lamvery». http://qiita.com/marcy-terui/items/1617ab4e20e3339d1930 https://github.com/marcy-terui/lamvery/blob/master/README.md

ʻApex` peut en avoir une idée en regardant le wiki. https://github.com/apex/apex/wiki

L'un d'eux est mon propre travail, donc j'aimerais être aussi juste que possible, mais s'il vous plaît jetez un œil si vous êtes du côté de Lamvery. De plus, je publierai également des explications et des opinions en tant qu'auteur. Pour ton information.

De plus, Apex a l'intention de saisir diverses choses de l'opposition, mais il serait utile que vous puissiez signaler les erreurs.

Voici une comparaison au 29 janvier 2016.

Comparaison des pièces de base

article Apex Lamvery
Langue d'implémentation Go Python
Comment installer Téléchargement binaire PyPi,rpm,deb
Runtime pris en charge(Lambda) Go, Python, Node.js Python, Node.js
Géré Unité de projet Unité fonctionnelle
Format de fichier de paramètres JSON YAML + jinja2

Commentaires et opinions

Langue d'implémentation

C'est une question de goût.

Comment installer

Apex Puisque la méthode d'installation est Go, elle est binarisée pour chaque dépendance, et ʻApexest-il fort juste pour le télécharger et le mettre? Lamvery Vous devez configurer l'environnementPython + pip. De là, vous pouvez utiliser pip` pour installer toutes les dépendances avec une seule commande. [^ 2] Nous fournissons également des packages yum et deb qui vous permettent de créer un environnement complètement indépendant comprenant Python pour une utilisation dans des environnements CI. https://github.com/marcy-terui/lamvery#installation

Runtime pris en charge (Lambda)

Apex ʻApex est caractérisé par la prise en charge de Golang, que Lambda ne prend pas officiellement en charge. D'ailleurs, il semble que cela corresponde au système AltJS tel que Babel [^ 3] Lamvery «Lamvery» n'a pas l'intention de soutenir «Go», sauf demande contraire. [^ 4] Node.js est un support expérimental pour le moment car je suis le principal Python`. [^ 4]

Je pense que ce n'est pas trop loin pour que le fonctionnaire soutienne "Go", mais qu'en est-il? Je me demande si tout le monde veut utiliser une méthode aussi informelle ...?

Géré

Apex
ʻApexpeut gérer plusieurs fonctions Lambda dans un projet, et il y a un fichier de paramètres appliqué au projet et un fichier de paramètres appliqué à chaque fonction. Lamvery «Lamvery» ne peut être géré que sur une base fonctionnelle. C'est là que je réfléchis à ce qu'il faut faire à l'avenir. Cependant, puisqu'il s'agit d'une unité de fonction, elle est limitée à Python, mais si vous installez uniquement la bibliothèque utilisée par cette fonction dans l'environnement virtuelvirtaulenv [^ 5], elle sera automatiquement collectée en tenant compte de l'efficacité du stockage. Et j'essaye de le télécharger. En effet, ʻApex ne télécharge tout que dans un répertoire spécifique, donc la capacité du code source de Lambda est limitée -lambda-capacity /) N'est-ce pas une grande différence compte tenu de cela? Uniquement pour Python. .. .. [^ 6]

Format de fichier de paramètres

Apex
C'est juste «JSON». Lamvery
Bien qu'il s'agisse de YAML, il est couvert par le moteur de modèle jinja2. Autrement dit, il prend en charge l'incorporation de variables et l'écriture dynamique.

Comparaison des fonctions

article Apex Lamvery
Deploy
Rollback
Paramètres d'alias arbitraires
Courir(Invoke)
Liste d'exclusion
Remise d'informations confidentielles
CloudWatch Events(Planifier l'exécution) ☓[^8]
CloudWatch Logs(Afficher le journal d'exécution)
CloudWatch Metrics(Heure de démarrage, etc.) ☓ [^7]

Commentaires et opinions

Parmi les fonctionnalités des deux, seules les pièces présentant des différences caractéristiques sont répertoriées.

Deploy & Rollback Les spécifications de versionnage spéciales de Lambda sont faciles à comprendre, donc je pense que vous devriez la lire ↓ http://dev.classmethod.jp/cloud/aws/lambda-versioning/

Apex
La gestion des versions [^ 9] est requise. Lors du déploiement, définissez Alias appelé «actuel», et lors de la restauration, remplacez «actuel» par la dernière version précédente. Cependant, cette méthode ʻApex` tombe en panne si Alias est remplacé par autre chose que déployer et annuler. C'est très bien, mais même si vous répétez le déploiement et la restauration deux fois, cela va casser (voir ci-dessous). apex_rollback.png À la fin, je veux qu'il revienne à "2", mais je sais qu'il échouera et qu'il reviendra à "3". Pour le moment, il existe une option pour spécifier une version arbitraire lors de la restauration, mais je pense qu'il est absurde que les humains doivent se souvenir du numéro de version.

Lamvery
En raison des problèmes ci-dessus, «Lamvery» utilise une autre méthode. En termes simples, lors du déploiement, ajoutez un autre alias à la version précédente et restaurez-y. Cela permet d'activer des opérations telles que le retour temporaire à la version précédente deux ou plus.

Il existe également une fonction pour attacher des alias arbitraires, vous pouvez donc les utiliser en combinaison pour une gestion flexible des versions. Si vous souhaitez l'utiliser aussi simplement qu'Apex, utilisez simplement Deploy and Rollback avec le contrôle de version activé. Le contrôle de version est requis si vous utilisez Rollback, mais vous pouvez le désactiver dans le fichier de configuration si vous ne le faites pas. Vous pouvez également définir n'importe quel alias à définir au moment du déploiement. C'est également une option nécessaire compte tenu de la limite de capacité Lambda mentionnée précédemment. Je pense que c'est. Vous pouvez le désactiver pour des correctifs mineurs et l'activer lorsque vous en avez besoin afin de pouvoir le restaurer.

Invoquer

Apex Il peut être démarré en un seul coup, en acceptant les entrées les unes après les autres de l'entrée standard (Streaming), et en s'exécutant en continu de manière synchrone [^ 10]. Lamvery Exécution en un seul coup. Le streaming veut s'exécuter de manière asynchrone [^ 10] et prendre en charge les journaux ClooodWatch sous la forme d'une queue.

Livraison d'informations confidentielles

Apex Spécifiez comme variable d'environnement lors du déploiement. Il ne peut pas être inclus dans la gestion des versions [^ 11]. En regardant la source et le Wiki, il semble que Python ne supporte pas ...? Lamvery
Vous pouvez utiliser KMS pour gérer la version [^ 10] en incluant les informations confidentielles cryptées dans le fichier de configuration. ~~ Actuellement, seul Python est pris en charge, mais nous espérons prendre en charge Node.js dans un proche avenir. ~~ Node.js est également pris en charge (2015.02.03)

Impressions et résumé

Jusqu'à présent, je pense qu'il y a des avantages et des inconvénients dans l'ensemble. Cependant, je pense qu'il y a une grande différence entre les spécifications de restauration et la prise en charge de CloudWatch Events, donc j'apprécierais que vous puissiez prêter attention non seulement à ʻApex mais aussi à Lamvery`, étant donné que le support japonais est possible [^ 12]. :-) [^ 13]

https://github.com/marcy-terui/lamvery

[^ 1]: Nombre d'étoiles sur GitHub, article japonais Apex et [article Qiita de Lamvery](http: // qiita. com / marcy-terui / items / 1617ab4e20e3339d1930) Comparez le nombre d'extrémités. .. .. [^ 2]: pip est gem dans Ruby et npm dans Node.js. Si vous installez Python avec pyenv, il est inclus en standard, et s'il s'agit d'un système Linux, il est souvent inclus depuis le gestionnaire de paquets par défaut. [^ 3]: Il prend en charge en lançant Go binary depuis Node.js en tant que processus enfant et en échangeant en utilisant l'entrée / sortie standard. [^ 4]: Je suis inquiet car il n'y a pas beaucoup d'utilisateurs. .. .. [^ 5]: bibliothèque Python qui peut créer un environnement d'exécution Python indépendant qui ne partage pas de bibliothèques, etc. [^ 6]: Parce que je l'utilise principalement pour Python, j'aimerais répondre si quelqu'un familier avec Node.js peut juste me donner une idée. [^ 7]: à venir [^ 8]: Sera-t-il pris en charge? En discussion à Issue [^ 9]: l'option publish pour Lambda

Recommended Posts

Comparaison d'Apex et de Lamvery
Comparaison de gem, bundler et pip, venv
Comparaison de l'héritage de classe et de la description du constructeur
Comparaison de la régularisation L1 et Leaky Relu
Comparaison de vitesse de murmurhash3, md5 et sha1
Comparaison d'exemples d'implémentation de k-means de scikit-learn et pyclustering
Comparaison de Python et Ruby (Environment / Grammar / Literal Edition)
Comparaison des classificateurs en ligne
Comparaison des programmes d'adaptation
Une comparaison rapide des bibliothèques de test Python et node.js
Bibliothèque DNN (Deep Learning): Comparaison de chainer et TensorFlow (1)
Comparaison de Windows Server et Linux gratuit et Linux commercial
Tableau de comparaison des processus fréquemment utilisés de Python et Clojure
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Mécanisme de pyenv et virtualenv
Pré-traitement et post-traitement de pytest
Combinaison de récursif et de générateur
Combinaison de anyenv et direnv
Explication et mise en œuvre de SocialFoceModel
Différenciation du tri et généralisation du tri
Comparaison de 4 types de frameworks Web Python
Coexistence de pyenv et autojump
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Utilisation et intégration de "Shodan"
Le problème des menteurs et de l'honnêteté
Comparaison de la loi hongroise et des solveurs polyvalents pour les problèmes d'allocation
Occurrence et résolution de tensorflow.python.framework.errors_impl.FailedPreconditionError
Fonctions de tri et de comparaison Python 3
Installation source et installation de Python
Introduction et astuces de mlflow.
Comparaison de vitesse du traitement de texte intégral de Wiktionary avec F # et Python
Comparaison de la prédiction des données de séries chronologiques entre le modèle SARIMA et le modèle Prophet
Histoire de la comparaison de vitesse d'une sorte de valeur numérique et de chaîne de caractères (inachevée))
Résumé des différences entre Python et PHP (tableau de comparaison des principaux éléments)
[Python] Modèle de base et utilisation de l'instruction if (opérateur de comparaison et opérateur booléen)
Construction d'environnement de python et opencv
Connaissance de base de Linux et des commandes de base
Ordre des arguments pour RegularGridInterpolator et interp2d
L'histoire de Python et l'histoire de NaN
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Comparaison de la grammaire de base entre Java et Python
Explication et implémentation de l'algorithme ESIM
Risque de mélange! ndarray et matrice
Installer SciPy et matplotlib (Python)
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Introduction et mise en œuvre de la fonction d'activation
Mémorandum de sauvegarde et modèle de chargement
Explication et mise en œuvre du perceptron simple
Calcul de la classe auto-fabriquée et de la classe existante
Ceci et cela des propriétés python
Comparaison de vitesse entre CPython et PyPy
Comparaison de la vitesse de la perspective XML Python
Comparaison des outils de migration de base de données autonomes 2020
Caractéristiques du lien symbolique et dur
Coexistence de Python2 et 3 avec CircleCI (1.0)
Résumé des index et des tranches Python
Agrégation et visualisation des nombres accumulés