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.
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 |
C'est une question de goût.
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'environnement
Python +
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
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 ...?
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 virtuel
virtaulenv [^ 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]
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.
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] |
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).
À 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.
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.
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)
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