Zurück
Tech 6 Min. Lesezeit - 30. Nov. 20 - Matthieu Locussol

Wie Sie Ihr Back-End auf AWS Elastic Beanstalk mit Github Actions bereitstellen?

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:
  1. Unsere Anwendung auf Elastic Beanstalk erstellen (zum Hosten des Back-Ends)
  2. Einen Zugangsschlüssel für unsere Anwendung erstellen (um die Rechte zur Bereitstellung des Back-Ends zu haben)
  3. Eine Github Action erstellen (um das Back-End bei jedem Push automatisch bereitzustellen)
  4. (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.
create-application
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".
choose-platform
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".
iam-service
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"
iam-users
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".
iam-access-strategy
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".
iam-user-created
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:
github-setup-secrets-variables
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:
github-actions-tab
Erstellung eines neuen Workflows in Github Actions
choose-workflow-template
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 :
github-commit-configuration
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") :
aws-edit-environment
Zugang zur Konfiguration der Elastic Beanstalk Umgebung
Sie können Ihre Umgebungsvariablen unten auf der Seite im Bereich "Eigenschaften der Umgebung" :
ebs-variables-environment
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 :
ebs-environments-list
Status unserer bereitgestellten Umgebung

Weiterführende Informationen

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

Referenzen

Möchten Sie bei der Lancierung Ihres digitalen Projekts begleitet werden?

Reichen Sie Ihr Projekt jetzt ein