Bereitstellen von APIs mit AWS Elastic Beanstalk



Ende Januar haben wir einen weiteren Online-Intensivkurs „Backend PHP Developer“ durchgeführt . Diesmal war das Thema einer offenen Lektion die Erstellung eines Telegramm-Bots, um in einer Institution Kaffee zu bestellen und online zu bezahlen . Das Webinar war sehr umfangreich und dauerte zwei Tage: „Tag 1“ und „Tag 2“ . Wir machen Sie auf eine Textversion des ersten Online-Intensivtages aufmerksam. Es ging darum, AWS Elastic Beanstalk einzuführen und die API damit bereitzustellen.

Dozent - Michael Kamorin , Senior Backend-Entwickler bei Skyeng.


Cloud Computing


Der Einsatz von Cloud Computing im Allgemeinen und von AWS im Besonderen bringt uns folgende Vorteile:

  1. Bequemer Netzwerkzugriff auf Anfrage. Wir können jederzeit 365 Tage im Jahr rund um die Uhr eine Verbindung herstellen.
  2. Allgemeiner Fundus an konfigurierbaren Rechenressourcen. Cloud Computing ermöglicht es uns, einen bestimmten gemeinsamen Bestand an Computing-Ressourcen zu verwenden, der im Vergleich zu einem privaten Server viel größer ist als die Ressourcen eines Computers.
  3. Sofortige Bereitstellung und Freigabe. Bei Bedarf können wir in kurzer Zeit zusätzliche Ressourcen beschaffen. Und ebenso schnell diese Ressourcen freigeben, sobald sie unnötig werden.
  4. Niedrigste Betriebskosten. Je nach Abstraktionsgrad sind unterschiedliche finanzielle Investitionen erforderlich, die jedoch in der Regel minimal sind.

Welche Probleme lösen wir:

  1. Selbstversorgung. Wenn wir mit einem regulären Anbieter der gleichen VPS-Server kommunizieren, schreiben wir einen Brief, bitten um die Zuteilung der erforderlichen Ressourcen usw. Als Antwort werden uns Tarife und Konfigurationsoptionen angeboten. Wir wählen, zahlen und mehr. In AWS ist alles viel einfacher: Die Karte wird sofort angehängt, wir wählen die Umgebung selbst aus und starten alles selbst unter Berücksichtigung unserer Bedürfnisse. Es ist eine komplette Selbstbedienung, die sehr praktisch ist.
  2. Hosting Um unseren Code auf einem entfernten Rechner ausführen zu können, benötigen wir natürlich das notwendige Hosting. Grundsätzlich lösen nicht nur Wolken dieses Problem.
  3. Konfigurierbarer Ressourcenpool. Ein bestimmter Telegramm-Bot benötigt natürlich nicht viel Ressourcen, aber es kommt vor, dass es sich um komplexere Geschäftsaufgaben oder Projektwachstum handelt.
  4. Elastizität. Was ist hier gemeint? Wenn wir eine ausgeprägte Saisonalität haben (sogar innerhalb des Tages), wenn wir den Beginn der Hauptzeit und die Spitzenlasten kennen, können wir sparen. Es ist klar, dass wir zu viel bezahlen, wenn wir die Rechenressourcen verwenden, die die Spitzenlasten rund um die Uhr abdecken. Dank der Elastizität können wir die Rechenressourcen kurz vor der Hauptsendezeit erhöhen und sie unmittelbar nach ihrer Fertigstellung freigeben. Dadurch reduzieren wir die Kosten für die Wartung unserer Infrastruktur erheblich.
  5. Messbarkeit. Wir sehen die Anzahl der Aufrufe unserer Funktionen (im Fall von beispielsweise AWS Lambda), sehen die Ressourcen (wie viele virtuelle Maschinen funktionieren, wie hoch ist die Auslastung), das heißt, wir haben eine recht fortschrittliche und genaue Überwachung.

Abstraktionsebenen

Lassen Sie uns ein wenig über die Abstraktionsebenen sprechen:

  1. In den traditionellen On-Premises bieten wir alles vom Kauf der Hardware bis zur Konfiguration der Anwendung, die wir starten.
  2. IaaS stellt uns Hardware und einen Hypervisor zur Verfügung. Außerdem können wir das gewünschte Betriebssystem, die Umgebung, die Skalierung usw. selbständig auswählen und installieren.
  3. CaaS . Der Level Container as a Service hat sich in jüngster Zeit durch die Entwicklung der Containerisierung im Allgemeinen und der Dockerisierung im Besonderen hervorgetan. Im Falle von CaaS müssen wir das Betriebssystem nicht konfigurieren. Es ist bereits ab einem bestimmten Satz vorkonfigurierter Betriebssysteme verfügbar.
  4. PaaS . Eine ziemlich alte Abstraktionsebene, die lange bevor CaaS auffiel. Auf dieser Ebene erhalten wir auch eine Laufzeitumgebung, das heißt, dies ist ein klassisches Hosting. Angenommen, wir haben eine PHP-Version mit einer Reihe von Erweiterungen zur Auswahl. Auf PHP-Ebene können wir alles tun: Balancer installieren, eigenen Code schreiben usw.
  5. FaaS . Ein Beispiel ist derselbe AWS Lambda. In diesem Fall wird die Skalierung bereits von dem Cloud-Anbieter bereitgestellt, der die Funktionalität bereitstellt, und es treten keine Probleme auf, wenn die Anwendung zu wachsen beginnt. Der gleiche AWS Lambda kann Tausende von Instanzen unterstützen, ohne dass wir ihn konfigurieren müssen (nur bezahlen).
  6. SaaS . In diesem Fall haben wir nur Zugriff auf die Konfigurationsoption, die Programmierer in die von uns verwendete Software einfügen.



Um nicht unbegründet zu sein, geben wir Beispiele zu Abstraktionsebenen:

  • IaaS - Amazon Elastic Compute Cloud (EC2) - wir werden heute damit arbeiten.
  • CaaS - Amazon Elastic Container Service (ECS);
  • PaaS - Google App Engine;
  • FaaS - AWS Lambda;
  • SaaS - Gmail.

Ressourcenteilung

Wie werden Wolken im Allgemeinen verwendet? Es gibt verschiedene Szenarien:

  1. Private Cloud. Die gesamte Infrastruktur befindet sich im Rechenzentrum und gehört dem Unternehmen (in dem Sinne, dass niemand außer uns an diesen Ressourcen arbeiten kann).
  2. Öffentliche Cloud. Die gesamte Infrastruktur befindet sich in der Cloud. Wir wissen nur, dass wir einen Service der gewählten Stufe haben, der uns zur Verfügung gestellt wird. Wir wissen nicht, wie es auf niedrigeren Ebenen angeordnet ist. Wir besitzen unsere Daten nicht vollständig, schon gar nicht, denn wenn wir möchten, dass unsere Daten gelöscht werden, können wir dies nicht garantieren. Wenn der Anbieter gehackt wird, ist die Wahrscheinlichkeit des Verlusts vertraulicher Informationen hoch. Ja, diese Risiken bestehen bei einer privaten Cloud, aber dort geht es um ein gezieltes Hacken Ihrer Ressourcen, und hier können Sie, wie sie sagen, zufällig und für das Unternehmen unter die Verteilung kommen.
  3. Hybrid Cloud. Es gibt mögliche Optionen:

  • im normalen Modus wird eine eigene Infrastruktur verwendet, eine Cloud ist zu Spitzenlastzeiten verbunden;
  • Von unserer Software entfremdete Berechnungen werden in die Cloud übertragen.
  • Im normalen Modus wird die Cloud verwendet, in Notfällen wird auf Ihre Infrastruktur umgeschaltet.

Aws


In Bezug auf AWS erwähnen wir zunächst einige der Komponenten, die wir benötigen und unter der Haube einsetzen werden.

AWS IAM

IAM (Identity and Access Management) ist das erste, dem Sie bei der Anmeldung begegnen müssen. Mit IAM können Sie Kontozugriffsrechte konfigurieren, Rollen, Gruppen und Benutzer verwalten.

Amazon schlägt vor, dass wir Best Practices befolgen, obwohl wir im Laufe des Unterrichts ein wenig gegen diese verstoßen müssen. Dies sind die folgenden Praktiken:

  • für jede physische Person - ein separater Benutzer;
  • für jede Anwendung - eine separate Rolle;
  • Zugriffe, die ausgegeben werden, werden nicht festgeschrieben, wir fummeln nicht, wir verwenden den Code nicht.
  • Verwenden Sie niemals ein anderes Root-Konto als das anfängliche Setup. Wenn Sie versehentlich irgendwo ein Passwort aufleuchten, kann jemand virtuelle Maschinen von Ihrem Root-Konto kaufen. Und selbst wenn Sie alle erforderlichen Warnungen einrichten, können Sie sehr schnell tausendeinhalb Dollar erhalten.

AWS EC2

EC2 - Elastic Compute Cloud (IaaS) - ein Webdienst, mit dem wir virtuelle Maschinen bereitstellen können. EC2 bietet:

  • Verwaltung der von uns verwendeten Rechenleistung (wenn Sie ein kostenloses Konto registrieren, wird der Zugriff nur auf einen Instanztyp gewährt);
  • Amazon Machine Image (AMI) Suite - Images virtueller Maschinen mit Anwendungen, Bibliotheken usw .;

Außerdem müssen Sie für die Arbeit mit EC2 normalerweise Amazon S3 (Simple Storage Service) - Dateispeicher verwenden.

Hierbei ist zu beachten, dass wir EC2 nicht direkt berühren, da Sie dort alles selbst konfigurieren müssen, angefangen von der Umgebung bis hin zu den Netzwerkzugriffseinstellungen. Trotzdem muss man verstehen, dass EC2 unter der Haube immer dabei ist.

AWS Elastic Beanstalk

Elastic Beanstalk - Orchestrierungsdienst (PaaS oder CaaS, je nachdem, was Sie orchestrieren möchten). Wenn die Containerisierung mit dem Container selbst und seiner Befüllung funktioniert, wird die Orchestrierung beispielsweise mit Containern auf Metaebene durchgeführt. Orchestrierung ist in der Tat ein Mechanismus, mit dem wir Container / virtuelle Maschinen entweder über die API oder über die Konsole starten können.

Beanstalk fügt dem Betriebssystem eine Umgebungsebene für eine bestimmte Programmiersprache, einen Webserver, Containerisierung, eine Reihe von Bibliotheken, Erweiterungen usw. hinzu.

Wir werden PHP 7.3 mit dem Apache-Webserver verwenden (Nginx wird nicht bereitgestellt, dies ist weder gut noch schlecht, aber nur eine Tatsache, die zu beachten ist). Da wir das nicht alles schaffen werden, ist uns das grundsätzlich egal.

Installation und Einrichtung


Nun, lasst uns weiter üben. Die erste Phase ist die Registrierung und Einstellung von Zugriffsrechten:

  1. Registrieren Sie sich bei amazon.com . Wir nehmen ein kostenloses Konto mit einer Mindestanzahl von Autos;
  2. einloggen Da Elastic Beanstalk standardmäßig die Region Oregon anbietet, wählen Sie Oregon in der AWS Management Console aus:
  3. Rufen Sie den IAM-Dienst über die Konsole auf (schreiben Sie iam in die Suchleiste):
  4. Dort sehen wir ein Dashboard, auf dem wir bestimmte Aktionen ausführen

  5. Um mit Elastic Beanstalk zu arbeiten, erstellen und konfigurieren wir einen neuen Benutzer (nur programmgesteuerter Zugriff):


  6. Eine Gruppe mit AWSElasticBeanstalkFullAccess-Rechten hinzufügen :
  7. Laden Sie die Zugangsdaten herunter und bewahren Sie sie an einem sicheren Ort auf. Wenn Sie die Datei verlieren, muss der Benutzer sie neu erstellen.




Wir haben also einen Benutzer und werden weiterhin mit diesem Benutzer arbeiten. Zu diesem Zeitpunkt alles.

EB CLI

Jetzt müssen Sie die ElasticBeanstalk-Konsole selbst installieren. Dies ist ein ziemlich langwieriger Prozess. Hier ist ein kurzer Überblick darüber, was zu tun ist:

  1. Wir klonen das Repository https://github.com/aws/aws-elastic-beanstalk-cli-setup .
  2. Wir lesen die Readme-Datei sorgfältig durch und führen die erforderlichen Aktionen für Ihr Betriebssystem durch (mögliche Probleme werden auch in der Readme-Datei beschrieben).
  3. Vergessen Sie nach der Installation nicht, Variablen mit Pfaden zu exportieren.
  4. Überprüfen Sie eb –version ob alles funktioniert.



Initialisierung von Elastic Beanstalk

Jetzt müssen wir die elastische Bohnenstange in unserem Projekt initialisieren . Dafür:

  • entpacke das Archiv mit dem Quellcode ;
  • Führen Sie die Composer-Installation aus.
  • Führen Sie eb init aus.
  • Wählen Sie eine Region aus (die Standardeinstellung ist Oregon) und geben Sie die Zugangsdaten aus der heruntergeladenen Datei an.
  • Geben Sie den Anwendungsnamen, die PHP-Programmiersprache und die Version 7.3 an.

Bitte beachten Sie, dass wir keinen CodeCommit und CodeCommit Zugriff verwenden .

Nach der Initialisierung wird in der Anwendung der Ordner .elasticbeanstalk angezeigt, in dem sich eine Konfigurationsdatei befindet.



Erstellen und Ausführen einer EC2-Instanz

Jetzt müssen Sie die EC2-Instanz über Beanstalk erstellen und ausführen . Dafür:

  • führe eb create ;
  • Geben Sie den Umgebungsnamen und den DNS-CNAME an und wählen Sie Load Balancer (Anwendung) aus .
  • Spot Fleet ablehnen (Elastizität unter Last);
  • Überprüfen Sie den Status von eb status / eb health .
  • versuche die eb open site zu öffnen .

Seltsamerweise, aber wir stehen vor dem Fehler 403. Was hätte schief gehen können? Da sich unsere Anwendung auf Laravel befindet, befindet sich der Einstiegspunkt im Verzeichnis /public , und EB erwartet standardmäßig den Einstiegspunkt im Stammverzeichnis.



Konfigurationskorrektur

Der nächste Schritt ist das Korrigieren der Konfiguration:

  • Gehe zur Konsole in der elastischen Bohnenstange.
  • Wählen Sie unsere Anwendung aus und gehen Sie zu Konfiguration.
  • Klicken Sie im Abschnitt Software auf die Schaltfläche Ändern.
  • Installieren Sie Document root in / public.
  • Klicken Sie auf Übernehmen.
  • Wir prüfen die Leistung ( /api/v1/goods ).

Einrichtung des Gesundheitschecks

Eigentlich bleibt es, den Health Check zu konfigurieren . Dafür:

  • Gehe in Elastic Beanstalk zur Konsole.
  • Wählen Sie unsere Anwendung aus und gehen Sie zu Konfiguration.
  • Klicken Sie im Bereich Load Balancer auf die Schaltfläche Ändern.
  • Wählen Sie im Abschnitt Prozesse die Option Standard und anschließend die Aktion Bearbeiten.
  • Geben Sie Path / api / v1 / goods und den HTTP-Code 200 im Abschnitt Health Check an.
  • Klicken Sie auf Speichern und Übernehmen.

Wir diskutierten weiter über das Monitoring und der erste Tag der Online-Intensivkurse ging zu Ende. Wenn Sie sich für dieses Thema interessieren, ist es besser, die Lektion vollständig durchzulesen und alle Schritte für den Lehrer zu wiederholen. Darüber hinaus wird empfohlen, auf die Fortsetzung zu achten. Denken Sie daran, dass das Ergebnis eines zweitägigen Online-Intensivkurses die Erstellung eines Telegramm-Bots war, mit dem Sie in einer Institution Kaffee bestellen und online bezahlen können:

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


All Articles