Eine skalierbare Architektur für Ihr Back-End einzurichten, kann wie eine echte Herausforderung klingen. Denn die Skalierbarkeit einer Anwendung wird immer als ein schwer zu bewältigendes Problem dargestellt: selbst wenn Sie die besten Technologien für Ihr Projekt gewählt haben, werden Sie einen steigenden Ressourcenbedarf, eine inkonsistente Nachfrage und vielleicht sogar Schwierigkeiten haben, eine wettbewerbsfähige Uptime sicherzustellen.
Seien Sie unbesorgt, all das ist vorbei. Skalierbarkeit bedeutet vor allem, die richtigen Tools zu wählen. In diesem Artikel erfahren Sie, wie Sie Ihr Back-End auf dem Dienst
Elastic Beanstalk (EBS) von AWS automatisch bei einem Push auf Ihr Github-Repository.
Motivationen
Für wen?
Elastic Beanstalk ermöglicht es Ihnen, eine breite Palette von Technologien online bereitzustellen (Java, PHP, Python, Ruby, Node.js, etc.). Amazon berechnet seine Dienste basierend auf Ihrer Nutzung (dem "pay as you go") und
die kostenlose Version ermöglicht Ihnen eine mehr als ausreichende Nutzung dieser Dienste, wenn Sie AWS einfach nur entdecken möchten.
Warum?
Unser Ziel ist es, unser Back-End auf EBS bereitzustellen, um sich dank der Amazon-Infrastrukturen nicht um dessen Skalierbarkeit kümmern zu müssen und eine wettbewerbsfähige Uptime zu haben. Dieser Artikel gliedert sich in mehrere Teile, ausgehend davon, dass Sie AWS neu entdecken:
Unsere Anwendung auf Elastic Beanstalk erstellen (zum Hosten des Back-Ends)
Einen Zugangsschlüssel für unsere Anwendung erstellen (um die Rechte zur Bereitstellung des Back-Ends zu haben)
Eine Github Action erstellen (um das Back-End bei jedem Push automatisch bereitzustellen)
(Optional) Umgebungsvariablen einrichten
Einrichtung
Voraussetzungen
Unsere Anwendung auf Elastic Beanstalk erstellen
Wir werden den praktischen Fall der Einrichtung einer NestJS-Anwendung auf Elastic Beanstalk analysieren. Wir werden also die Node.js-Umgebung verwenden, aber Sie können dies natürlich an Ihre Bedürfnisse anpassen.
Gehen Sie zum Dienst "Elastic Beanstalk" in der AWS-Konsole. Stellen Sie sicher, dass Sie im Dropdown-Menü oben rechts die Region auswählen, in der Sie Ihre Anwendung online stellen möchten. Erstellen Sie danach Ihre Anwendung.

Interface AWS Elastic Beanstalk
Geben Sie den Namen Ihrer Anwendung ein, zum Beispiel "MonapplicationAPI". Wählen Sie dann die Plattform aus (für unser Beispiel, "Node.js"). Sie können die anderen Felder so belassen, wie sie sind. Klicken Sie unten auf der Seite auf "Anwendung erstellen".

Auswahl der Plattform der Beanstalk-Anwendung
AWS hat Ihre Anwendung "MonapplicationAPI" erstellt und ist nun dabei, die der Anwendung zugeordnete Umgebung zu erstellen: "Monapplicationapi-env". Dieser Vorgang kann 5 Minuten dauern. Wir können in der Zwischenzeit mit dem nächsten Schritt fortfahren.
Einen Zugangsschlüssel für unsere Anwendung erstellen
Unser Ziel ist es, unser Back-End automatisch über Github Actions bereitzustellen. Dazu werden wir einen Zugangsschlüssel erstellen, der es Github ermöglicht, sich mit unserem AWS-Konto zu verbinden.
Wechseln Sie den Dienst (Menü oben links) und gehen Sie zum Dienst "IAM".

Suche nach dem Dienst "IAM" von AWS
Wir werden einen neuen Benutzer erstellen. Gehen Sie zum Abschnitt "Nutzende" und klicken Sie dann auf "Benutzer hinzufügen"

Abschnitt «Benutzer» des IAM-Dienstes von AWS
Wir benennen unseren Benutzer „MonapplicationAPIDeploy„ und wählen den Zugriffstyp „Programmatischer Zugriff„. Sie können dann auf „Weiter: Berechtigungen".
Wir können nun auswählen „Bestehende Richtlinien direkt anhängen„ und die Richtlinie „ ankreuzenAWSElasticBeanstalkFullAccess„. Sie können dann auf „Weiter: Tags".

Auswahl einer Zugriffsstrategie für den IAM-Benutzer
Nichts zu tun für den Schritt „Tags„, können Sie auf „Weiter: Überprüfung„ und dann auf „Benutzer erstellen".

Abrufen der IAM-Zugriffsschlüssel
Notieren Sie sich Ihre Zugriffsschlüssel-ID „AWS_ACCESS_KEY_ID„ und Ihren geheimen Zugriffsschlüssel „AWS_SECRET_ACCESS_KEY„. Wir werden diese gleich danach verwenden, um die Bereitstellung auf Github einzurichten.
Eine Github Action erstellen
Präambel
Bevor wir fortfahren und unsere automatische Bereitstellungsaktion einrichten, müssen wir zwei Dateien in unserem Repository hinzufügen, um Elastic Beanstalk zu konfigurieren. Keine Sorge, das Verfahren ist sehr einfach. Begeben Sie sich ins Stammverzeichnis (wo sich Ihre package.json befindet):
1. Erstellen Sie eine Datei „.ebignore„, in die Sie Folgendes einfügen:
node_modules
2. Erstellen Sie eine Datei „Procfile„, in die Sie Ihren Befehl zum Starten des Back-Ends eingeben werden (in meinem Fall „npm run start:prod") :
web: npm run start:prod
3. Sie müssen zwingend auf dem Port lauschen, der in der Umgebungsvariable bereitgestellt wird PORT von Beanstalk. Im Falle von NestJS, überprüfen Sie, ob Ihre „main.ts„ diese Zeile enthält:
await app.listen(process.env.PORT);
Danach müssen die beiden AWS-Schlüssel eingegeben werden, die wir zuvor im IAM-Dienst erstellt haben. Begeben Sie sich zu Ihrem Github-Repository, in den Bereich „Settings > Secrets„. Fügen Sie also die beiden erstellten Schlüssel hinzu:

Hinzufügen von geheimen Variablen zu einem Github-Repository
Erstellung der Aktion
Begeben Sie sich zu Ihrem Github-Repository, in den Bereich „Actions„. Wir werden einen neuen Workflow erstellen, indem wir auf die Schaltfläche „New workflow„ oben links. Richten Sie einen neuen Workflow manuell ein:

Erstellung eines neuen Workflows in Github Actions

Manuelle Einrichtung eines Workflows
Ersetzen Sie den Inhalt der Datei "main.yml" durch diesen :
name: Deploy back-end
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v1
- name: Load cache
uses: actions/cache@v2
with:
path: "**/node_modules"
key: ${{ runner.os }}-modules
- name: Install dependencies
run: yarn install
- name: Build App
run: yarn build
- name: Generate deployment package
run: zip -r deploy.zip . -x '*.git*'
- name: Deploy to EB
uses: einaregilsson/beanstalk-deploy@v13
env:
VERSION_LABEL: monapplication-api-${{ github.run_id }}
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: MonapplicationAPI
environment_name: Monapplicationapi-env
version_label: ${{ env.VERSION_LABEL }}
region: eu-west-3
deployment_package: deploy.zip
Ersetzen Sie die Werte von "application_name", "environment_name" und "region" durch die für Sie relevanten Werte. Der Name der Applikation entspricht dem Namen der Elastic Beanstalk Applikation und der Name der Umgebung dem der Beanstalk Umgebung.
Falls Sie Yarn und/oder JavaScript nicht verwenden, denken Sie daran, die Befehle zum Installieren der Abhängigkeiten Ihrer Applikation und zum Builden anzupassen. Hier führe ich diese Aktionen in den Schritten 2, 3 und 4 aus : "Yarn cache", "Install dependencies" und "Build app". Für Schritt 2 der Abhängigkeits-Cachierung können Sie sich über das Vorgehen informieren, je nach der von Ihnen verwendeten Sprache. auf dieser Seite. Sobald die Änderungen vorgenommen wurden, können Sie Ihre Konfigurationsdatei wie folgt commiten :

Erstellung der Konfigurationsdatei unserer Github Action
(Optional) Umgebungsvariablen einrichten
Falls Sie Umgebungsvariablen für Ihr Backend exponieren müssen, können Sie diese über die Schnittstelle der Umgebung Ihrer Beanstalk-Applikation hinzufügen. Gehen Sie dazu zum Dienst "Elastic Beanstalk" und wählen Sie Ihre Umgebung aus (in diesem Tutorial "Monapplicationapi-env") :

Zugang zur Konfiguration der Elastic Beanstalk Umgebung
Sie können Ihre Umgebungsvariablen unten auf der Seite im Bereich "Eigenschaften der Umgebung" :

Hinzufügen der Umgebungsvariablen
Fazit
Herzlichen Glückwunsch, Sie haben das Ende dieses Artikels erreicht. Von nun an wird ein Push, der auf dem Branch "master" Ihres Repositorys wird die Bereitstellung Ihrer Applikation auf Ihrer Elastic Beanstalk Applikation triggern. Sie können den Status Ihrer Applikation auf dem Dienst "Elastic Beanstalk" von AWS :

Status unserer bereitgestellten Umgebung
Weiterführende Informationen
Sie können, falls Sie dies wünschen, mehrere Entwicklungsumgebungen einrichten : "Staging" und "Production" die jeweils einem Branch "staging" und einem Branch "master".
Sie können sich informieren über
workflow_dispatch um einen manuellen Trigger anstatt einen automatischen für Ihre Github Action einzurichten.
Referenzen