Avantages et inconvénients de l’utilisation d’AWS Amplify

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
    Appsync
    mais 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 DynamodbDynamodb 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 functionalitycomme :

    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 poolce 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 &amp ; Cognito – Review.
    Il est devenu un peu viral sur reddit (~350 upvotes), regardez-le.

    Laisser un commentaire