
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:
- AccÚs réseau pratique à la demande. Nous pouvons nous connecter à tout moment 365 jours par an 24/7.
- 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é.
- 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.
- 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:
- 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.
- 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.
- 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.
- Ă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.
- 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'abstractionParlons un peu des niveaux d'abstraction:
- Dans les locaux traditionnels , nous fournissons tout, de l'achat de matériel à la configuration de l'application que nous lançons.
- 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.
- 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.
- 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.
- 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).
- 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 ressourcesComment les nuages ââsont-ils gĂ©nĂ©ralement utilisĂ©s? Il existe plusieurs scĂ©narios:
- 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).
- 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.
- 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 IAMIAM (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 EC2EC2 - 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 BeanstalkElastic 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:
- inscrivez-vous sur amazon.com . Nous prenons un compte gratuit avec un ensemble minimum de voitures;
- connectez-vous. Comme Elastic Beanstalk propose la région de l'Oregon par défaut, sélectionnez Oregon dans la AWS Management Console:
- accédez au service IAM via la console (écrivez iam dans la barre de recherche):
- lĂ , nous voyons un tableau de bord sur lequel nous effectuons certaines actions

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

- ajouter un groupe avec les droits AWSElasticBeanstalkFullAccess:
- 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 CLIVous 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:
- Nous clonons le référentiel https://github.com/aws/aws-elastic-beanstalk-cli-setup .
- 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).
- AprĂšs l'installation, n'oubliez pas d'exporter des variables avec des chemins.
- Vérifiez que tout fonctionne, en
eb âversion
.
Initialisation d'Elastic BeanstalkMaintenant, 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 EC2Vous 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 configurationL'é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: