Comment créer des applications Web sans serveur avec React et AWS Amplify

AWS Amplify est une bibliothèque client, une chaîne d'outils CLI et une bibliothèque de composants d'interface utilisateur qui permettent aux développeurs de créer et de se connecter rapidement à de puissants services dans le cloud. Dans cet article, nous verrons comment créer des applications Web entièrement sans serveur avec React et AWS Amplify avec des fonctionnalités telles que l'authentification, une couche de données GraphQL gérée, le stockage, les fonctions lambda et l'hébergement Web..

Amplify active des fonctionnalités telles que GraphQL géré (AWS AppSync), stockage (Amazon S3), authentification utilisateur (Amazon Cognito), fonctions sans serveur (AWS Lambda), hébergement (Amazon CloudFront et Amazon S3), analyses (Amazon Pinpoint), etc..

L'objectif de la bibliothèque et de la CLI est de permettre aux développeurs de créer des applications Web et mobiles à pile complète sans avoir à s'inquiéter de la gestion de leur propre infrastructure dorsale, ce qui leur permet d'aller plus loin dans la pile en utilisant les compétences qu'ils connaissent déjà..

Dans cette série, je vais vous montrer comment créer un nouveau projet AWS Amplify, activer les fonctionnalités de cloud en utilisant la CLI, connecter l'application React et commencer à interagir avec les services de cloud. Dans cet article, je vais vous montrer comment implémenter l'authentification, le stockage et l'hébergement. Dans le prochain tutoriel, nous allons apprendre à créer et à interagir avec les API GraphQL et Serverless..

Bien que ce didacticiel utilise React, Amplify fonctionnera avec n’importe quel projet JavaScript et comportera des composants spécifiques à la structure pour Angular, Vue, React Native et Ionic. La CLI prend également en charge les applications natives iOS et Android..

Commencer

Créer une nouvelle application React

Pour commencer, nous devons d’abord créer une nouvelle application React à l’aide de la CLI create-react-app, puis entrer dans le nouveau répertoire:

npx créer-réagir-application amplify-web-app cd amplify-web-app

Ensuite, nous installerons les dépendances du client AWS Amplify:

fils ajouter aws-amplify aws-amplify-react # ou npm installer aws-amplify aws-amplify-react

Installer et configurer l'AWS Amplify CLI

Ensuite, nous devrons installer l'AWS Amplify CLI.

npm installer -g @ aws-amplify / cli

Maintenant que l'AWS Amplify CLI est installé, nous devons le configurer pour pouvoir créer des ressources dans notre compte AWS. Nous faisons cela en exécutant le amplifier configurer commande et configuration d'un nouvel utilisateur AWS.

amplifier configurer

Vous pouvez voir une courte vidéo de cette configuration sur YouTube..

Maintenant que l’AWS Amplify CLI est installée et configurée, exécutez la commande amplifier commande depuis votre ligne de commande pour voir les options disponibles et vous assurer que la CLI a été installée correctement.

amplifier

Initialisation d'un nouveau projet AWS Amplify

Pour initialiser un nouveau projet AWS Amplify, nous allons exécuter le amplifier init commander:

amplifier init

Lorsque vous y êtes invité, choisissez votre éditeur de texte préféré et conservez les valeurs par défaut pour toutes les autres options..

Ceci a maintenant initialisé localement un nouveau projet AWS Amplify, et nous allons maintenant voir un amplifier répertoire et .amplifier fichier créé dans le répertoire racine de notre projet React. Ces fichiers contiennent des informations de configuration sur notre projet Amplify, et nous n'avons pas besoin de les toucher pour le moment..

Implémentation de l'authentification

La première fonctionnalité que nous activerons est l'authentification de l'utilisateur. Nous pouvons activer des fonctionnalités à tout moment en exécutant amplifier ajouter . La catégorie pour l'authentification est auth, alors courez:

amplifier add ajouter

Quand demandé Voulez-vous utiliser la configuration d'authentification et de sécurité par défaut?, choisir Oui.

Une fois que cela est créé, nous devons exécuter amplifier la poussée pour créer le nouveau service sur notre compte:

amplifier la poussée

Quand demandé Es-tu sur de vouloir continuer?, choisir Oui.

Une fois le service créé, vous pouvez le visualiser à tout moment dans le tableau de bord en visitant https://console.aws.amazon.com/cognito/users/ et en cliquant sur le nom de votre service.

Nous pouvons également afficher tous les services activés à tout moment en exécutant amplifier le statut:

amplifier le statut

Vous remarquerez également un nouveau fichier créé-aws-exports.js-dans le dossier racine de l'application React. Vous n'aurez pas besoin de modifier ce fichier car il est géré pour vous par la CLI, mais nous l'utiliserons à l'étape suivante pour configurer le projet local..

Ajouter une authentification à l'application React

Maintenant que le service d'authentification est créé, nous pouvons commencer à l'utiliser dans notre application React.!

La première chose à faire est de configurer l’application React pour qu’elle connaisse notre projet Amplify. Nous faisons cela en appelant Amplify.configure à la racine du projet - pour nous, ce sera src / index.js.

importer Amplify à partir de 'aws-amplify' importer une configuration à partir de './aws-exports' Amplify.configure (config)

Maintenant, notre projet est prêt et nous pouvons implémenter l'authentification.

En utilisant le avecAuthenticator Composant d'ordre supérieur

Nous allons examiner deux manières de mettre en œuvre l’authentification de l’utilisateur, mais pour commencer, nous allons commencer par utiliser avecAuthenticator composant d'ordre supérieur de la aws-amplify-react bibliothèque. Ce composant échafaude tout un flux d'authentification en quelques lignes de code et constitue un excellent moyen de se familiariser avec la bibliothèque..

Dans App.js, importer le avecAuthenticator HOC en haut du fichier:

importer withAuthenticator de 'aws-amplify-react' 

Et, en bas, mettez à jour le exportation déclaration pour envelopper le App composant avec avecAuthenticator.

exporter par défaut avec Authenticator (App)

Pour en savoir plus, consultez la documentation officielle sur les composants Amplify React disponibles pour l’authentification..

Test du flux d'authentification

Maintenant, nous pouvons exécuter l'application et devrait voir un écran de connexion:

Cliquez sur Créer un compte pour vous inscrire, puis connectez-vous à l'application. Une fois que nous sommes connectés, la session sera stockée afin que nous puissions actualiser la page et que nous restions connectés..

Options de déconnexion

Nous pouvons également rendre un bouton de déconnexion en ajoutant un deuxième argument au HOC:

exporter par défaut avec Authenticator (App, includeGreetings: true)

Notez que nous pouvons également utiliser le Auth classe directement pour déconnecter les utilisateurs:

// 1. importer la classe import Auth de 'aws-amplify' // Déconnecter l'utilisateur en attente de Auth.signOut ()

Notez que lorsque vous appelez Auth.signOut directement, nous devons toujours restituer le composant d’une certaine manière afin de ramener l’utilisateur à la page de connexion. Vous pouvez voir un exemple de cela dans un fil de discussion sur le dépôt GitHub du projet.. 

En utilisant le Auth Classe

Nous pouvons aussi utiliser le Auth classe pour gérer manuellement les utilisateurs. Auth a plus de 30 méthodes disponibles, y compris s'inscrire, se connecter, confirmerSignUp, confirmerSignIn, mot de passe oublié, et resendSignUp.

Voyons comment implémenter l’inscription d’utilisateur en utilisant le s'inscrire méthode de classe:

// 1. Créer l'état initial pour conserver les entrées utilisateur state = nom d'utilisateur: ", mot de passe:", email: ", numéro_phone:", codeAutomatique: " // 2. gestionnaire de changement onChange pour les modifications d'entrée onChange = e =>  this.setState ([e.target.name]: e.target.value) // 3. Fonction permettant d'appeler Auth.signUp signUp = async () => const nom d'utilisateur, mot de passe, email, numéro de téléphone = this.state wait Auth.signUp (nom d'utilisateur, mot de passe, attributs: phone_number, email) console.log ('connecté avec succès') // 4. Fonction permettant d'appeler Auth.signUp confirmSignUp = async () => const nom d'utilisateur, AuthCode = this.state wait Auth.confirmSignUp (nom d'utilisateur, authCode) console.log ('confirmation de la connexion avec le serveur') // 5. Dans la méthode de rendu, créez des entrées avec des attributs pour mettre à jour l'état  // 6. Créer des boutons pour appeler les méthodes signUp et confirmSignUp 

Ceci est un plan détaillé pour la façon dont vous pouvez inscrire manuellement un utilisateur avec la classe Auth..

L'implémentation manuelle prend plus de temps à écrire, mais vous donne un contrôle complet non seulement sur l'interface utilisateur, mais également sur les fonctionnalités que vous souhaitez implémenter..

Vous pouvez en savoir plus sur l'authentification avec AWS Amplify dans la documentation du projet..

Stockage avec Amazon S3

Amazon S3 est un service populaire pour le stockage de supports tels que des images et des vidéos, ainsi que pour des services back-end tels que l'hébergement d'applications, les sauvegardes et la livraison de logiciels..

AWS Amplify CLI nous permet de créer, configurer, mettre à jour et supprimer des compartiments S3. Dans cette section, nous verrons comment créer un compartiment S3 et comment télécharger des images et des fichiers dans le compartiment..

Pour activer le stockage, nous pouvons exécuter la commande suivante:

amplifier ajouter stockage

Ensuite, vous serez invité à fournir quelques détails de configuration. Sélectionnez le Contenu (images, audio, vidéo, etc.) un service. Ensuite, indiquez un nom de ressource spécifique au projet (utilisé en interne dans le projet) et un nom de compartiment (l'emplacement S3 où vos données seront stockées). Enfin, l’accès devrait être limité aux Utilisateurs authentiques seulement, et les utilisateurs authentifiés devraient être autorisés lire écrire accès.

Maintenant, le stockage a été ajouté à notre configuration, et nous courons amplifier la poussée pour créer les nouvelles ressources sur notre compte:

amplifier la poussée

Cela créera et configurera un compartiment Amazon S3 que nous pouvons commencer à utiliser pour stocker des éléments..

Exemple d'utilisation du stockage S3

Si nous voulions tester cela, nous pourrions stocker du texte dans un fichier comme celui-ci:

importer Stockage depuis 'aws-amplify' // créer une fonction pour travailler avec stockage addToStorage = () => Storage.put ('javascript / MyReactComponent.js', 'importer > ( 

Bonjour le monde

) Exporter par défaut App ') .then (result => console.log (' result: ', result)) .catch (err => console.log (' error: ', err)); // ajouter un gestionnaire de clic

Cela créera un dossier appelé javascript dans notre compartiment S3 et stockez un fichier appelé MyReactComponent.js il avec le code que nous avons spécifié dans le deuxième argument de Storage.put.

Si nous voulons tout lire dans ce dossier, nous pouvons utiliser Liste de stockage:

readFromStorage = () => Storage.list ('javascript /') .then (data => console.log ('données de S3:', données)) .catch (err => console.log ('erreur') ) 

Si nous voulons seulement lire le fichier unique, nous pouvons utiliser Storage.get:

readFromStorage = () => Storage.get ('javascript / MyReactComponent.js') .then (data => console.log ('données de S3:', données)) .catch (err => console.log (' Erreur')) 

Si nous voulions tout réduire, nous pourrions utiliser Liste de stockage:

readFromStorage = () => Storage.list (") .then (data => console.log ('données de S3:', data)) .catch (err => console.log ('erreur'))

Travailler avec des images

Travailler avec des images est également facile. Voici un exemple:

la classe S3ImageUpload étend React.Component onChange (e) fichier const = e.target.files [0]; Storage.put ('example.png', fichier, contentType: 'image / png') .then (result => console.log (result)) .catch (err => console.log (err));  render () return (  this.onChange (e) />)

Dans le code ci-dessus, nous lions une entrée de formulaire de téléchargement de fichier à la sur le changement gestionnaire d'événements. Lorsque l'utilisateur fournit un fichier, Storage.put est appelé pour télécharger le fichier sur S3 avec le type MIME image / png.

Hébergement

Pour déployer et héberger votre application sur AWS, nous pouvons utiliser la hébergement Catégorie.

amplifier ajouter un hébergement

De nouveau, vous serez invité à fournir certaines options de configuration:

  • Pour le type d’environnement, sélectionnez DEV (S3 uniquement avec HTTP).
  • Choisissez un nom de compartiment unique au monde où votre projet sera hébergé.
  • Indiquez le nom de l'index et les URL d'erreur du site Web, généralement index.html.

Maintenant, tout est configuré et nous pouvons publier l'application:

amplifier publier

Suppression de services

Si, à un moment quelconque, vous souhaitez supprimer un service de votre projet et de votre compte, vous pouvez le faire en exécutant la commande amplifier supprimer commande puis en poussant.

amplify remove auth amplify push 

Si vous n'êtes pas sûr des services que vous avez activés à tout moment, vous pouvez exécuter le amplifier le statut commander:

amplifier le statut

amplifier le statut vous donnera la liste des ressources actuellement activées dans votre application.

Conclusion

AWS Amplify permet aux développeurs de créer des applications de type pile complète et dans le cloud plus facilement que jamais auparavant, leur permettant de parcourir rapidement, directement à partir de leur environnement frontal.

Ceci est la première partie d'une série en deux parties. Dans le prochain tutoriel, nous allons apprendre à créer et à interagir avec les API GraphQL et Serverless. Alors restez à l'écoute.