DĂ©ploiement d'API avec AWS Elastic Beanstalk



Fin janvier, nous avons organisé un autre cours intensif en ligne «Backend PHP Developer» . Cette fois, le sujet d'une leçon ouverte était la création d'un bot Telegram pour commander du café dans une institution et payer en ligne . Le webinaire s'est avéré trÚs riche, il s'est donc étalé sur deux jours: «Jour 1» et «Jour 2» . Nous portons à votre attention une version texte de la premiÚre journée de cours intensifs en ligne. Il s'agissait d'introduire AWS Elastic Beanstalk et de déployer l'API avec.

Conférencier - Michael Kamorin , développeur principal de backend chez Skyeng.


Cloud computing


L'utilisation du cloud computing en général et d'AWS en particulier nous apporte les avantages suivants:

  1. AccÚs réseau pratique à la demande. Nous pouvons nous connecter à tout moment 365 jours par an 24/7.
  2. Fonds général de ressources informatiques configurables. Le cloud computing nous permet d'utiliser un certain fonds commun de ressources informatiques, qui sont beaucoup plus grandes que les ressources d'une machine, par rapport à un serveur privé.
  3. Fourniture et libération rapides. Nous pouvons obtenir des ressources supplémentaires en peu de temps si nécessaire. Et libérez tout aussi rapidement ces ressources dÚs qu'elles deviennent inutiles.
  4. Coûts d'exploitation les plus bas. Selon le niveau d'abstraction, un niveau d'investissement financier différent est requis, mais il est généralement minime.

Quels problÚmes résolvons-nous:

  1. GĂźtes. Lorsque nous communiquons avec un fournisseur rĂ©gulier des mĂȘmes serveurs VPS, nous Ă©crivons une lettre, demandons d'allouer les ressources nĂ©cessaires, etc. En rĂ©ponse, on nous propose des tarifs et des options de configuration. Nous choisissons, payons et plus encore. Dans AWS, tout est beaucoup plus simple: la carte est immĂ©diatement attachĂ©e, nous choisissons nous-mĂȘmes l'environnement et commençons tout nous-mĂȘmes en tenant compte de nos besoins. C'est un self-service complet, ce qui est trĂšs pratique.
  2. HĂ©bergement Naturellement, afin d'exĂ©cuter notre code sur une machine distante, nous obtenons l'hĂ©bergement nĂ©cessaire. En principe, non seulement les nuages ​​rĂ©solvent ce problĂšme.
  3. Pool de ressources configurable. Un bot Telegram spécifique, bien sûr, ne nécessitera pas beaucoup de ressources, mais il arrive que nous parlions de tùches commerciales plus complexes ou de la croissance de projets.
  4. ÉlasticitĂ©. Que veut-on dire ici? Lorsque nous avons une saisonnalitĂ© prononcĂ©e (mĂȘme dans la journĂ©e), lorsque nous connaissons l'heure de dĂ©but des heures de grande Ă©coute et des pics de charge, nous pouvons Ă©conomiser. Il est clair que si nous utilisons les ressources informatiques couvrant les pics de charge 24/7, nous paierons trop. L'Ă©lasticitĂ© nous permet d'augmenter les ressources informatiques peu de temps avant les heures de grande Ă©coute et de les libĂ©rer immĂ©diatement aprĂšs son achĂšvement. Ainsi, nous rĂ©duisons considĂ©rablement le coĂ»t de l'entretien de notre infrastructure.
  5. Mesurabilité. Nous voyons le nombre d'appels à nos fonctions (dans le cas, par exemple, d'AWS Lambda), nous voyons des ressources (combien de machines virtuelles fonctionnent, quelle est la charge), c'est-à-dire que nous avons une surveillance assez avancée et précise.

Niveaux d'abstraction

Parlons un peu des niveaux d'abstraction:

  1. Dans les locaux traditionnels , nous fournissons tout, de l'achat de matériel à la configuration de l'application que nous lançons.
  2. L'IaaS nous fournit du matériel et un hyperviseur. De plus, nous pouvons sélectionner et installer indépendamment le systÚme d'exploitation, l'environnement requis, nous pouvons faire une mise à l'échelle, etc.
  3. CaaS . Le niveau Container as a Service s'est démarqué tout récemment avec le développement de la conteneurisation en général et de la dockerisation en particulier. Dans le cas de CaaS, nous ne sommes pas tenus de configurer le systÚme d'exploitation - nous sommes déjà fournis avec celui-ci à partir d'un certain ensemble de systÚmes d'exploitation préconfigurés.
  4. PaaS . Un niveau d'abstraction assez ancien, apparu bien avant que CaaS ne se dĂ©marque. À ce niveau, nous sommes Ă©galement fournis avec un environnement d'exĂ©cution, c'est-Ă -dire, en fait, c'est un hĂ©bergement classique. Supposons que nous ayons une version de PHP Ă  choisir avec un ensemble d'extensions. Au niveau de ce PHP, nous pouvons tout faire: installer des Ă©quilibreurs, Ă©crire notre propre code, etc.
  5. FaaS . Un exemple est le mĂȘme AWS Lambda. Dans ce cas, la mise Ă  l'Ă©chelle est dĂ©jĂ  fournie par le fournisseur de cloud qui fournit la fonctionnalitĂ©, et nous n'avons aucun problĂšme lorsque l'application commence Ă  se dĂ©velopper. Le mĂȘme AWS Lambda peut prendre en charge des milliers d'instances sans que nous ayons besoin de le configurer (il suffit de payer).
  6. SaaS . Dans ce cas, nous n'avons accĂšs qu'Ă  l'option de configuration que les programmeurs mettent dans le logiciel que nous utilisons.



Afin de ne pas ĂȘtre infondĂ©, nous donnons des exemples sur les niveaux d'abstraction:

  • IaaS - Amazon Elastic Compute Cloud (EC2) - nous allons travailler avec lui aujourd'hui;
  • CaaS - Amazon Elastic Container Service (ECS);
  • PaaS - Google App Engine;
  • FaaS - AWS Lambda;
  • SaaS - Gmail.

Partage des ressources

Comment les nuages ​​sont-ils gĂ©nĂ©ralement utilisĂ©s? Il existe plusieurs scĂ©narios:

  1. Cloud privé. Toute l'infrastructure est située dans le centre de données et appartient à l'entreprise (elle appartient en ce sens que personne à part nous ne peut travailler sur ces ressources).
  2. Cloud public. Toutes les infrastructures sont dans le cloud. Nous savons seulement que nous avons un service du niveau sélectionné, qui nous est fourni. Nous ne savons pas comment il est organisé aux niveaux inférieurs. Nous ne sommes pas entiÚrement propriétaires de nos données, ne serait-ce que parce que si nous voulons que nos données soient supprimées, nous n'avons aucune garantie que cela se produira. De plus, si le fournisseur est piraté, la probabilité de perte d'informations confidentielles est élevée. Oui, ces risques existent avec un cloud privé, mais là on parle de piratage ciblé de vos ressources, et ici vous pouvez vous mettre sous la distribution, comme on dit, par hasard et pour l'entreprise.
  3. Nuage hybride. Il existe des options possibles:

  • en mode normal, sa propre infrastructure est utilisĂ©e, un cloud est connectĂ© aux pointes de charge;
  • aliĂ©nĂ©s de nos calculs logiciels sont transfĂ©rĂ©s vers le cloud;
  • en mode normal, le cloud est utilisĂ©; en cas d'urgence, le passage Ă  votre infrastructure se produit.

Aws


En parlant d'AWS, nous mentionnons d'abord certains des composants dont nous aurons besoin et qui seront utilisés sous le capot.

AWS IAM

IAM (Identity and Access Management) est la premiÚre chose à laquelle vous devez faire face lorsque vous vous inscrivez. IAM vous permet de configurer les droits d'accÚs au compte, de gérer les rÎles, les groupes et les utilisateurs.

Amazon suggÚre que nous suivions les meilleures pratiques, bien que nous devions les violer un peu pendant la leçon. Ce sont les pratiques suivantes:

  • pour chaque personne physique - un utilisateur distinct;
  • pour chaque application - un rĂŽle distinct;
  • les accĂšs qui seront dĂ©livrĂ©s ne sont pas engagĂ©s, nous ne cherchons pas, nous n'utilisons pas le code;
  • n'utilisez jamais un compte root autre que la configuration initiale. Si vous allumez accidentellement un mot de passe quelque part, quelqu'un peut acheter des machines virtuelles Ă  partir de votre compte root. Et mĂȘme si vous configurez toutes les alertes nĂ©cessaires, vous pouvez obtenir mille et demi de dollars trĂšs rapidement.

AWS EC2

EC2 - Elastic Compute Cloud (IaaS) - un service Web qui nous permet de déployer des machines virtuelles. EC2 fournit:

  • la gestion de la puissance de calcul que nous utiliserons (lorsque vous ouvrez un compte gratuit, l'accĂšs n'est accordĂ© qu'Ă  un seul type d'instance);
  • Suite Amazon Machine Image (AMI) - images de machines virtuelles avec applications, bibliothĂšques, etc.;

De plus, généralement pour travailler avec EC2, vous devrez utiliser Amazon S3 (Simple Storage Service) - stockage de fichiers.

Il convient de noter ici que nous ne toucherons pas directement Ă  EC2, car vous devez tout configurer vous-mĂȘme, en commençant par l'environnement et en terminant par les paramĂštres d'accĂšs au rĂ©seau. NĂ©anmoins, il faut comprendre que sous le capot EC2 est toujours lĂ .

AWS Elastic Beanstalk

Elastic Beanstalk - service d'orchestration (PaaS ou CaaS, selon ce que vous allez orchestrer). Si la conteneurisation fonctionne avec le conteneur lui-mĂȘme et son remplissage, l'orchestration fonctionne avec des conteneurs, disons, au niveau mĂ©ta. L'orchestration est, en fait, un mĂ©canisme qui nous permet de dĂ©marrer des conteneurs / machines virtuelles soit par API soit via la console.

Beanstalk ajoute au-dessus du systĂšme d'exploitation une couche d'environnement pour un langage de programmation particulier, un serveur Web, la conteneurisation, un ensemble de bibliothĂšques, d'extensions, etc.

Nous utiliserons PHP 7.3 avec le serveur web Apache (nginx n'est pas fourni, ce n'est ni bon ni mauvais, mais juste un fait à garder à l'esprit). Puisque nous ne gérerons pas tout cela, nous, en principe, ne nous en soucions pas.

Installation et configuration


Eh bien, passons à la pratique. La premiÚre étape est l'enregistrement et la définition des droits d'accÚs:

  1. inscrivez-vous sur amazon.com . Nous prenons un compte gratuit avec un ensemble minimum de voitures;
  2. connectez-vous. Comme Elastic Beanstalk propose la région de l'Oregon par défaut, sélectionnez Oregon dans la AWS Management Console:
  3. accédez au service IAM via la console (écrivez iam dans la barre de recherche):
  4. lĂ , nous voyons un tableau de bord sur lequel nous effectuons certaines actions

  5. Pour travailler avec Elastic Beanstalk, nous créons et configurons un nouvel utilisateur (uniquement accÚs programmatique):


  6. ajouter un groupe avec les droits AWSElasticBeanstalkFullAccess:
  7. téléchargez les détails d'accÚs et enregistrez-les quelque part dans un endroit sûr. Si vous perdez le fichier, l'utilisateur devra le recréer.




Nous avons donc un utilisateur et nous continuerons de travailler avec cet utilisateur. A ce stade, tout.

EB CLI

Vous devez maintenant installer la console ElasticBeanstalk elle-mĂȘme. Il s'agit d'un processus assez long, voici un bref aperçu de ce qui doit ĂȘtre fait:

  1. Nous clonons le référentiel https://github.com/aws/aws-elastic-beanstalk-cli-setup .
  2. Nous lisons attentivement le fichier Lisez-moi et effectuons les actions nécessaires pour votre systÚme d'exploitation (les problÚmes potentiels sont également décrits dans le fichier Lisez-moi).
  3. AprĂšs l'installation, n'oubliez pas d'exporter des variables avec des chemins.
  4. VĂ©rifiez que tout fonctionne, en eb –version .



Initialisation d'Elastic Beanstalk

Maintenant, nous devons initialiser l' Elastic Beanstalk dans notre projet. Pour ce faire:

  • dĂ©compressez l' archive avec le code source ;
  • exĂ©cuter l'installation du composeur;
  • exĂ©cutez eb init;
  • sĂ©lectionnez une rĂ©gion (la valeur par dĂ©faut est Oregon) et spĂ©cifiez les dĂ©tails d'accĂšs Ă  partir du fichier tĂ©lĂ©chargĂ©;
  • spĂ©cifiez le nom de l'application, le langage de programmation PHP et la version 7.3.

Veuillez noter que nous n'utiliserons pas CodeCommit et l' accĂšs ssh .

AprÚs l'initialisation, le dossier .elasticbeanstalk apparaßt dans l'application, à l'intérieur duquel se trouvera un fichier de configuration.



Création et exécution d'une instance EC2

Vous devez maintenant créer et exécuter l'instance EC2 via Beanstalk. Pour ce faire:

  • exĂ©cuter eb create ;
  • spĂ©cifiez le nom de l'environnement, DNS CNAME , sĂ©lectionnez l'Ă©quilibreur de charge (application) ;
  • refuser Spot Fleet (Ă©lasticitĂ© sous charge);
  • vĂ©rifier l'Ă©tat du statut eb / santĂ© eb ;
  • essayer d'ouvrir le site ouvert eb .

Curieusement, mais nous sommes confrontés à l'erreur 403. Qu'est-ce qui aurait pu mal tourner? Puisque notre application est sur Laravel, le point d'entrée se trouve dans le répertoire /public , et EB attend un point d'entrée dans le répertoire racine par défaut.



Correctif de configuration

L'Ă©tape suivante consiste Ă  corriger la configuration:

  • allez Ă  la console dans Elastic Beanstalk;
  • sĂ©lectionnez notre application et allez dans Configuration;
  • dans la section Logiciel, cliquez sur le bouton Modifier;
  • installez la racine du document dans / public;
  • cliquez sur Appliquer;
  • Nous vĂ©rifions les performances ( /api/v1/goods ).

Configuration du bilan de santé

En fait, il reste à configurer le bilan de santé . Pour ce faire:

  • accĂ©dez Ă  la console dans Elastic Beanstalk;
  • sĂ©lectionnez notre application et allez dans Configuration;
  • dans la section Load Balancer, cliquez sur le bouton Modifier;
  • dans la section Processus, sĂ©lectionnez par dĂ©faut et sĂ©lectionnez l'action Modifier;
  • spĂ©cifiez Path / api / v1 / goods et le code HTTP 200 dans la section Health Check;
  • cliquez sur Enregistrer et appliquer.

Nous avons ensuite discutĂ© de la surveillance et la premiĂšre journĂ©e de cours intensifs en ligne a pris fin. Si vous ĂȘtes intĂ©ressĂ© par ce sujet, il est prĂ©fĂ©rable de revoir complĂštement la leçon et de rĂ©pĂ©ter toutes les Ă©tapes pour l'enseignant. De plus, il est Ă©galement recommandĂ© de faire attention Ă  la suite. Rappelons que le rĂ©sultat d'un intensif en ligne de 2 jours a Ă©tĂ© la crĂ©ation d'un bot Telegram pour commander du cafĂ© Ă  l'institution et payer en ligne:

Source: https://habr.com/ru/post/fr485910/


All Articles