window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = Fenster if (w.LeadBooster) { console.warn('LeadBooster existiert bereits') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Bereitstellung einer Rails-Anwendung mit Amazon ECS - The Codest
Der Codest
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Branchen
    • Fintech & Bankwesen
    • E-commerce
    • Adtech
    • Gesundheitstechnik
    • Herstellung
    • Logistik
    • Automobilindustrie
    • IOT
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
Pfeil zurück ZURÜCK
2021-11-17
Software-Entwicklung

Bereitstellung einer Rails-Anwendung mit Amazon ECS

Der Codest

Marcin Doliwa

Software Engineer

In diesem Tutorial möchte ich Ihnen zeigen, wie Sie eine Rails-Beispielanwendung mit dem Amazon Elastic Container Service (ECS) bereitstellen können.

Erzeugen wir sie, indem wir schienen neue beispiel-schienen-appund generiert dann eine grundlegende Controller-Aktion Schienen g Controller Willkommensindex und die Festlegung von Routen auf den Wurzelpfad als "root to: welcome#index".

Unser Ziel ist es, dass diese Begrüßungsseite mit ECS eingerichtet wird.

Erstellen eines Repositorys mit Amazon Elastic Container Registry (ECR)

Amazon ECR ist eine Container-Registry. Wir werden sie verwenden, um die Images unserer App zu speichern und sie daraus zu ziehen, damit sie auf ECS laufen.

Gehen Sie zu Ihrem AWS Panelsuchen Sie nach Elastischer Container
Registry
und klicken Sie Los geht's. Sie sehen dann den unten stehenden Bildschirm:

Repository mit Amazon Elastic Container Registry

Wir erstellen ein privates Repository und nennen es muster-schienen-app.

Das Repository ist da, aber es ist leer. Wir wollen, dass es das Bild unserer App enthält. Dies ist der nächste Schritt.

# wirft Fehler, wenn Gemfile seit Gemfile.lock geändert wurde

RUN bundle config --global frozen 1

WORKDIR /app

COPY Gemfile Gemfile.lock ./

RUN bundle install

COPY .

CMD ["rails", "server", "-b", "0.0.0.0"]

Dann sollten wir ein Image erstellen und es in das ECR-Repository stellen.

Zuvor müssen wir die Assets mit `rails assets:precompile` vorkompilieren.

Rufen Sie nun das erstellte Repository auf. Am oberen Rand des Bildschirms sehen Sie ein Push-Befehle anzeigen mit Einzelheiten zu dieser Vorgehensweise.

In meinem Fall (Linux) führe ich es mit diesen AWS-Anweisungen aus:

aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin 212516879399.dkr.ecr.eu-central-1.amazonaws.com

docker build -t sample-rails-app .

docker tag sample-rails-app:latest 212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest

docker push 212516879399.dkr.ecr.eu-central-1.amazonaws.com/beispiel-rails-app:latest

Vergewissern Sie sich, dass Ihr Benutzer für diesen Vorgang zugelassen ist. Ich habe meinem Benutzer die Richtlinie AmazonElasticContainerRegistryPowerUser hinzugefügt, die wie folgt aussieht:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effekt": "Erlauben",
            "Aktion": [
                "ecr:GetRegistryPolicy",
                "ecr:DescribeRegistry",
                "ecr:GetAuthorizationToken",
                "ecr:DeleteRegistryPolicy",
                "ecr:PutRegistryPolicy", "ecr:PutRegistryPolicy",
                "ecr:PutReplicationConfiguration"
            ],
            "Ressource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effekt": "Erlauben",
            "Aktion": "ecr:*",
            "Ressource": "arn:aws:ecr:*:212516879399:repository/*"
        }
    ]
}

Wir haben unser Docker-Image vorbereitet.

Erstellen des Application Load Balancer

Ich möchte, dass die Außenwelt nur eine Verbindung zu meinem Application Load Balancer herstellen kann. Er leitet den Datenverkehr an Container weiter, die in unserem ECS-Cluster laufen.

Gehe zu EC2-Dienste -> Lastausgleich -> Lastverteiler, klicken Load Balancer erstellenauswählen Anwendungslastausgleicher und klicken Sie auf das erstellen. Taste.

Setzen Sie den Namen auf muster-schienen-app-albverwenden Sie Ihre Standard-VPC und wählen Sie alle ihre Subnetze aus.

Es bleiben uns Sicherheitsgruppen und Hörer und Weiterleitung Abschnitte.

Sicherheitsgruppen

Wir werden eine neue Sicherheitsgruppe für unseren Load Balancer erstellen. Sie funktioniert wie eine Firewall; wir legen die Regeln für eingehenden und ausgehenden Verkehr fest. Wir wollen eingehenden http-Verkehr (TCP-Port 80) akzeptieren und den gesamten ausgehenden Verkehr zulassen. 

Klicken Sie dazu auf die Schaltfläche "Neue Sicherheitsgruppe erstellen" Link.

Im Abschnitt "Grundlegende Details", setzen Sie Name und Beschreibung, lassen Sie die Standard-VPC.

In meinem Fall - Name: "muster-schienen-app-alb-sg", Beschreibung: "http von außen, alles von innen"

Fügen Sie die eingehende Regel mit Typ hinzu: HTTP und Quelle: Überall-IPv4. Lassen Sie die Regeln für ausgehende Verbindungen unverändert.

Klicken Sie auf Sicherheitsgruppe erstellenGehen Sie dann zurück zur Registerkarte, auf der Sie den Application Load Balancer erstellt haben, aktualisieren Sie die Sicherheitsgruppen und fügen Sie die soeben erstellte Gruppe hinzu, während Sie die Standardgruppe entfernen.

Hörer und Weiterleitung

In diesem Abschnitt legen wir fest, wohin der Load Balancer den Datenverkehr weiterleiten soll. verlassen Hörer Protokoll und Hafen als HTTP und 80, da dies genau das ist, was wir wollen, und klicken Sie auf "Zielgruppe erstellen" Link.

Setzen Sie den Namen auf "muster-schienen-app-alb-tg". Die einzige Änderung ist die Portnummer. Wir werden sie an Port 3000 übergeben, da dies der Port für unsere Rails-App ist. Ignorieren Sie den nächsten Schritt (Registrierte Ziele) und erstellen Sie die Zielgruppe.

Gehen Sie nun zurück zu der Registerkarte, auf der wir den Application Load Balancer erstellt haben, aktualisieren Sie die Zielgruppe und wählen Sie die gerade erstellte aus.

Wir haben unseren Application Load Balancer fertig, jetzt können wir mit ECS spielen.

Erstellen eines ECS-Clusters

Es gibt eine Menge beängstigender Begriffe, die Sie sehen werden - Cluster, Aufgaben, Aufgabendefinition, Dienste. Um es einfacher zu machen, stellen Sie sich den Cluster als eine Gruppe von Servern (EC2-Instanzen) vor. Auf jedem dieser Server werden Tasks ausgeführt, bei denen es sich um eine Gruppe von Containern handelt, die zusammen laufen. Die Aufgabendefinition beschreibt, welche Container zu einer bestimmten Gruppe gehören und welche Ressourcen wir ihnen zuweisen möchten (Speicher, CPU). Die Dienste behalten diese Aufgaben im Auge, um sicherzustellen, dass in unserem Cluster immer die richtige Anzahl gesunder Aufgaben läuft.

Vor diesem Hintergrund sollten wir unseren Cluster erstellen.

Gehen Sie auf die ECS-Seite und klicken Sie auf die Schaltfläche Cluster Link und Cluster erstellen Schaltfläche. Wählen Sie die " ".EC2 + Linux-Vernetzung" ein und klicken Sie Nächster Schritt. 

Setzen Sie den Clusternamen auf "beispiel-schienen-app-cluster". Wählen Sie den EC2-Instance-Typ, ich habe den t2-micro-Typ gewählt, da er im Free-Tier-Tarif verfügbar ist. Belassen Sie die Anzahl der Instanzen bei 1. 

Verwenden Sie im Netzwerkbereich Ihre Standard-VPC und wählen Sie alle Subnetze aus. Klicken Sie auf "Erstellen", warten Sie ein wenig und voilà, wir haben einen neuen ECS-Cluster erstellt.

Definition der Aufgabe

Klicken Sie auf das Aufgaben-Definitionen Link, dann Neue Aufgabendefinition erstellen Schaltfläche. Wählen Sie die EC2 Option und klicken Sie auf Nächster Schritt. Die Anwendung, die wir ausführen werden, ist sehr einfach, so dass wir hier nur ein paar Optionen benötigen. 

Einstellung Definition der Aufgabe Name zu "beispiel-schienen-app", dann gehen Sie direkt zum Container-Definitionen Abschnitt und klicken Sie auf "Behälter hinzufügen". Benennen Sie den Container als "beispiel-schienen-app", und legen Sie den Speicherort des Bildes im Format "repository-url/image:tag". Gehen Sie in der neuen Browser-Registerkarte zum ECR, um den Bild-URI zu kopieren. In meinem Fall war es: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".

Setzen Sie Ihr Speicherlimit auf die empfohlenen 300-500MiB. Und nun das Schwierigste: Port Mapping.

Unsere Anwendung läuft innerhalb eines Containers auf Port 3000. Geben Sie also 3000 als Container-Port ein. Als Host-Port geben wir 0 ein, was im Grunde bedeutet, dass ein zufälliger Port gewählt wird. Glücklicherweise kennt unser Application Load Balancer diese Port-Zuordnung und kann den Datenverkehr korrekt umleiten. Wir können sogar mehrere Aufgaben auf dieser einen Instanz laufen lassen. 

Fügen Sie die Umgebungsvariable RAILS_ENV und setzen es auf Produktion.

Jetzt klicken hinzufügen um unsere Containerdefinition hinzuzufügen und klicken Sie auf erstellen. um die Einrichtung der Aufgabendefinition zu beenden.

Dienst

Wir haben unseren Cluster, den Load Balancer und die Aufgabendefinition. Nun müssen wir diese Aufgaben irgendwie innerhalb unseres Clusters ausführen. Dies ist die Aufgabe der Dienste. Gehen Sie zu dem neu erstellten Cluster, wählen Sie die Dienstleistungen und klicken Sie auf die Registerkarte erstellen. Taste. 

Setzen Sie den Starttyp auf EC2, fügen Sie den Namen "beispiel-schienen-app-service". Setzen Sie die Anzahl der Aufgaben auf 1 und klicken Sie auf Nächster Schritt. Wählen Sie auf dieser Seite das Optionsfeld "Application Load Balancer" und wählen Sie die vorhandene IAM-Rolle dafür aus. Im Abschnitt "Container to load balance" sollten Sie bereits einen korrekten Container "sample-rails-app:0:3000" eingegeben haben, dann klicken Sie auf "Add to load balancer".

Für "Production listener port" wählen Sie 80:HTTP; als Zielgruppenname verwenden Sie den Namen, den wir zuvor erstellt haben - "muster-schienen-app-alb-tg" und klicken Sie Nächster Schritt. Lassen Sie Automatische Skalierung Optionen so wie sie sind, klicken Sie auf Nächster Schritt und Dienst erstellen.

Aktualisieren Sie die ECS-Sicherheitsgruppe

Sie können die Seite für die Erstellung von Clustern aufrufen und die Aufgaben Auf den Registerkarten sollte eine Aufgabe laufen. Der Dienst hat sie gestartet. Gehen Sie nun zur EC2-Service-Seite, klicken Sie auf Load Balancers und sehen Sie sich die Details unseres Application Load Balancers an. Sie sollten dort seinen DNS-Namen sehen. Kopieren Sie ihn und öffnen Sie ihn im Browser. Er sollte Sie zu unserer Anwendung führen. Leider erhalten wir die Meldung "504 Zeitüberschreitung des GatewaysFehler". 

Das Problem liegt in der Sicherheitsgruppe unseres Clusters. Ihre eingehenden Regeln lassen den vom Load Balancer eingehenden Verkehr nicht zu. Um das Problem zu beheben, gehen Sie zurück zum EC2-Panel und klicken Sie auf die Schaltfläche Sicherheitsgruppen Link. Es gibt eine neue Gruppe, die bei der Erstellung des Clusters erstellt wurde. Sie sollte einen Namen haben, der mit "EC2ContainerService-Beispiel-schienen-anwendung-cluster". Klicken Sie darauf und bearbeiten Sie die eingehenden Regeln. Da wir jeglichen Datenverkehr von unserer VPC zulassen wollen, gehen Sie zum Amazon VPC-Panel und überprüfen Sie, wie Ihre VPC IPv4 CIDR lautet. Setzen Sie den Regeltyp auf "Gesamter Verkehr" und die Quelle auf IPv4 CIDR. Speichern Sie diese Regel und versuchen Sie, den DNS-Namen des Balancers zu laden. 

Hoffentlich siehst du das genauso wie ich 🙂

Mehr lesen

GraphQL Ruby. Wie sieht es mit der Leistung aus?

Eisenbahnen und andere Transportmittel

Rails-Entwicklung mit TMUX, Vim, Fzf + Ripgrep

Ähnliche Artikel

Software-Entwicklung

Zukunftssichere Web-Apps bauen: Einblicke vom The Codest-Expertenteam

Entdecken Sie, wie sich The Codest bei der Erstellung skalierbarer, interaktiver Webanwendungen mit Spitzentechnologien auszeichnet, die nahtlose Benutzererfahrungen auf allen Plattformen bieten. Erfahren Sie, wie unsere Expertise die digitale Transformation und...

DAS SCHÖNSTE
Software-Entwicklung

Top 10 Softwareentwicklungsunternehmen in Lettland

Erfahren Sie in unserem neuesten Artikel mehr über die besten Softwareentwicklungsunternehmen Lettlands und ihre innovativen Lösungen. Entdecken Sie, wie diese Technologieführer Ihr Unternehmen voranbringen können.

thecodest
Enterprise & Scaleups Lösungen

Grundlagen der Java-Softwareentwicklung: Ein Leitfaden für erfolgreiches Outsourcing

Entdecken Sie diesen wichtigen Leitfaden zum erfolgreichen Outsourcing der Java-Softwareentwicklung, um die Effizienz zu steigern, auf Fachwissen zuzugreifen und den Projekterfolg mit The Codest voranzutreiben.

thecodest
Software-Entwicklung

Der ultimative Leitfaden für Outsourcing in Polen

Der Anstieg des Outsourcings in Polen wird durch wirtschaftliche, bildungspolitische und technologische Fortschritte angetrieben, die das IT-Wachstum und ein unternehmensfreundliches Klima fördern.

TheCodest
Enterprise & Scaleups Lösungen

Der vollständige Leitfaden für IT-Audit-Tools und -Techniken

IT-Audits gewährleisten sichere, effiziente und gesetzeskonforme Systeme. Erfahren Sie mehr über ihre Bedeutung, indem Sie den vollständigen Artikel lesen.

Der Codest
Jakub Jakubowicz CTO & Mitbegründer

Abonnieren Sie unsere Wissensdatenbank und bleiben Sie auf dem Laufenden über das Fachwissen aus dem IT-Sektor.

    Über uns

    The Codest - Internationales Software-Unternehmen mit technischen Zentren in Polen.

    Vereinigtes Königreich - Hauptsitz

    • Büro 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale Tech-Hubs

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Der Codest

    • Startseite
    • Über uns
    • Dienstleistungen
    • Fallstudien
    • Gewusst wie
    • Karriere
    • Wörterbuch

      Dienstleistungen

    • IT-Beratung
    • Software-Entwicklung
    • Backend-Softwareentwicklung
    • Frontend-Softwareentwicklung
    • Staff Augmentation
    • Backend-Entwickler
    • Cloud-Ingenieure
    • Daten-Ingenieure
    • Andere
    • QS-Ingenieure

      Ressourcen

    • Fakten und Mythen über die Zusammenarbeit mit einem externen Softwareentwicklungspartner
    • Aus den USA nach Europa: Warum entscheiden sich amerikanische Start-ups für eine Verlagerung nach Europa?
    • Tech Offshore Development Hubs im Vergleich: Tech Offshore Europa (Polen), ASEAN (Philippinen), Eurasien (Türkei)
    • Was sind die größten Herausforderungen für CTOs und CIOs?
    • Der Codest
    • Der Codest
    • Der Codest
    • Privacy policy
    • Website terms of use

    Urheberrecht © 2025 von The Codest. Alle Rechte vorbehalten.

    de_DEGerman
    en_USEnglish sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek de_DEGerman