Il s’agit d’une opinionated post
concernant AWS amplifié – comment il s’intègre dans ma pile
web, ce que j’aime et ce que je n’aime pas à son sujet.
Their client side libraries are large
– Je n’essaie pas de pousser un paquet de 2MB
sur mes utilisateurs. Exemples :
@aws-amplify/api – 94kB minifié + gzippé
ou
@aws-amplify/storage – 65.5kB gzippé.
Quand vous allez outside the happy path
et que vous devez éditer quelque chose, le plus souvent
vous devez modifier le modèle cloudformation JSON généré automatiquementou
ajouter la permission SES à votre fonction lambda et espérer qu’elle ne sera pas
écrasée lorsque vous modifiez les permissions de la fonction lambda à l’aide de l’interface CLI. I
Je pourrais mettre à jour le modèle de cloudformation si nécessairemais je plutôt
gérer mon infrastructure dans CDK si je dois écrire l’infrastructure en tant que
code.
Leur génération automatique de ressources graphql uses VTL files for resolvers
– pas
pas étonnant car VTL est la façon par défaut d’écrire des résolveurs en utilisant AWS
Appsyncmais je n’ai pas l’intention d’apprendre le VTL et le VTB. introduire un autre
langage de programmation à la pile. Ce qui signifie que si j’ai modifier la logique d’un
la logique d’un résolveur, je devrais insérer un lambda et ne pas utiliser la logique générée automatiquement par Ampli
d’Amplificateur.
Je réalise qu’il s’agit d’un contre très opinionné – sans rapport avec Amplify du tout,
c’est juste ma préférence – j’ai pesé les avantages et les inconvénients de la VTL et…
pour mon argent – VTL est un désordre de lire, d’écrire, de maintenir et de tester, les seules
avantages sont que vous n’avez pas besoin d’exécuter un résolveur lambda, donc vous économisez sur la latence
et les coûts de lambda. Pour l’instant, je je m’en tiens à TypeScript.
For storage Amplify integrates with S3 and Dynamodb
– Dynamodb est très
rigide et ne convient pas à toutes les applications web, sauf si :
-
vous savez que vous allez avoir des millions d’utilisateurs et que vous devez être
capable d’évoluer -
vous connaissez tous vos modèles d’accès aux données à l’avance afin de pouvoir modéliser votre
base de données correctement. -
vous avez un schéma de données si simple et stable, que vous pouvez simplement le coller dans
dynamodb et économiser de l’argent
Avec Dynamodb, c’est simple, commun et résolu des problèmes comme pagination
prendre un
beaucoup d’efforts à mettre en œuvre correctement – il offre seulement Précédent/Suivant type
pagination. Si vous vous donnez la peine d’utiliser Dynamodb, vous devez le faire pour la bonne raison.
vous devez le faire pour la bonne raison – SCALE
.
De même, la façon dont Amplify met en œuvre le système de @connection
la directive graphql n’est pas
ne semble pas correcte, ayant global secondary indexes
dans tous les sens et
implémenter des relations multi-tables n’est pas la façon dont vous voulez structurer vos
données dans dynamo – ça va vous coûter beaucoup d’argent.
Lorsque vous créez un index secondaire global vous dupliquez essentiellement
votre table. Dupliquer votre table pour un motif d’accès supplémentaire doit être fait
avec beaucoup de prévoyance. Vous devez y réfléchir longuement lorsque vous concevez
vos tables Dynamodb, la manière par défaut de concevoir des tables Dynamodb avec
Amplify est très discutable pour quiconque a utilisé Dynamodb sans Amplify.
Amplify.
Vous pourriez ajouter Source de données sans serveur Aurora à votre API Graphql, mais
aucun support @model n’est disponible.
De plus, le CLI ne prend en charge que les bases de données Amazon Aurora MySQL 5.6 exécutées dans la région us-east-1.
région us-east-1 – selon la
documentation.
En bref, si vous utilisez Amplify, vous should
utilisez Graphql
à cause de toutes les
directives que vous
pour l’automatisation, cependant la plupart des directives ne fonctionnent qu’avec
dynamodb et dynamodb n’est pas adapté à tous les cas d’utilisation.
Remarque : vous pouvez utiliser elasticsearch avec dynamodb pour rendre votre couche de données
plus flexible. dynamodb streams to lambda, lambda ajoute un enregistrement à
elasticsearch. Ensuite, les utilisateurs utilisent dynamodb pour les mutations et elasticsearch
pour les requêtes. Je n’ai pas plongé trop profondément dans elasticsearch car il ne s’intègre pas bien dans ma pile sans serveur avec le modèle de facturation horaire.
s’intègre mal dans ma pile sans serveur avec le modèle de facturation à l’heure.
Quelques très strange lacking functionality
comme :
Il n’y a pas de moyen intuitif d’ajouter des variables d’environnement aux fonctions lambda à travers Amplify.
via Amplify. Sans surprise, il existe un
problème github
pour demander cette fonctionnalité.
Le résumé est le suivant : l’onglet Variables d’environnement de votre console Amplify est utilisé
pour ajouter des variables d’environnement de configuration de la construction, et non pas des
des variables d’environnement. Donc pour ajouter des variables d’environnement lambda, vous devez
devez le faire dans votre console AWS Lambda, pour chaque fonction,
individuellement.
Il n’y a pas de moyen intuitif d’ajouter des permissions aux fonctions lambda pour
accéder à des ressources en dehors de la pile amplify. Par exemple, si vous avez une fonction
fonction lambda qui doit communiquer avec SES pour l’envoi d’e-mails, vous devez alors
vous devez accorder à votre lambda des autorisations pour les actions SES. Cependant, vous ne pouvez pas faire
en utilisant AWS Amplify CLI.
La mise à jour de la permission du lambda dans le modèle cloudformation est un échec,
car elle est écrasée si vous ajoutez ensuite une permission à la même fonction lambda
en utilisant le CLI, ce qui est une situation très délicate. Votre seule option est
de modifier à nouveau les autorisations à l’aide de la console IAM. Plus d’informations dans le
problème des permissions SES.
Quelques strange bugs
c’est-à-dire en utilisant aws-amplify/auth lorsque vous utilisez la fonctionnalité
fonctionnalité de changement d’email et pas de confirmation votre nouvel email,
the new email is already updated in the user pool
ce qui signifie que si un
utilisateur change d’adresse électronique, ne confirme pas la nouvelle adresse ou entre une mauvaise
erronée, puis se déconnecte, il ne peut se connecter qu’avec sa nouvelle – non vérifiée
e-mail.
De toute évidence, le flux devrait être – un courriel est d’abord confirmé avant
mis à jour dans la base de données du pool d’utilisateurs, sinon quel est l’intérêt de demander aux
utilisateurs de confirmer leurs emails en premier lieu.
Avec le flux actuel vous pouvez choisir n’importe quel email que vous voulez comme
bob@gmail.com
même si vous ne le possédez pasou vous pourriez faire une faute d’orthographe en
en changeant l’adresse électronique et être bloqué hors de votre compte parce qu’aucune
étape de confirmation n’est requise. Voici
le problème
dans le repo d’Amplify.
De plus, le bogue pourrait être un problème avec cognito et non avec amplify, mais en tant que consommateur du service, l’origine du bogue n’a pas vraiment d’importance.
consommateur du service, l’origine du bug n’a pas vraiment d’importance,
le problème est ouvert depuis quelques années maintenant et il ne semble pas
évoluer dans un sens ou dans l’autre.
Il n’y a pas de moyen direct d’ajouter
la prise en charge de typescript pour les fonctions lambda
La mémoire par défaut des fonctions lambda est 128 MO. Je ne suis pas un expert en performance/coût de lambda
Je ne suis pas un expert en performance/coût de lambda, mais avec 128MB de mémoire, vous finissez par manger 1-3s de coldstart, et ce sans VPC.
Le prix des lambdas est basé à la fois sur la mémoire et sur la durée d’exécution de la fonction.
la mémoire et la durée d’exécution de votre fonction, donc définir la plus petite quantité de mémoire ne signifie pas nécessairement que cela coûte le moins cher.
de mémoire ne signifie pas nécessairement qu’elle coûte le moins cher.
Avec le généreux niveau gratuit fourni par AWS pour les lambdas, ma première tâche lorsque j’ajoute un
lambda à mon projet amplify est de modifier le modèle json de cloudformation et de
d’augmenter ma mémoire à quelque chose comme 1024MB – Je n’ai pas testé la différence de coût
de coût à l’échelle, mais la différence de performance est très perceptible.
C’est une très opinionated poste de comment AWS Amplify s’intègre dans ma pile web actuelle
pile web actuelle – pour le moment, je n’utilise AWS Amplify pour :
J’ai écrit un article où je vais plus en profondeur sur les services liés à l’authentification.
AWS Amplify & ; Cognito – Review.
Il est devenu un peu viral sur reddit (~350 upvotes), regardez-le.