window.pipedriveLeadboosterConfig = { basis: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versie: 2, } ;(functie () { var w = venster als (w.LeadBooster) { console.warn('LeadBooster bestaat al') } anders { w.LeadBooster = { q: [], on: functie (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: functie (n) { this.q.push({ t: 't', n: n }) }, } } })() Rails-app implementeren met Amazon ECS - The Codest
The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2021-11-17
Software Ontwikkeling

Rails-app implementeren met Amazon ECS

The Codest

Marcin Doliwa

Software Engineer

In deze tutorial laat ik je zien hoe je een voorbeeld Rails app kunt implementeren met de Amazon Elastic Container Service (ECS).

Laten we het maken door het volgende uit te voeren rails nieuwe voorbeeld-rails-appen genereert dan een basisactie voor de controller rails g controller Welkom index en het instellen van routes naar het rootpad als `root to: welcome#index".

Ons doel is om deze welkomstpagina te implementeren met behulp van ECS.

Een archief aanmaken met Amazon Elastic Container Registry (ECR)

Amazon ECR is een containerregister. We zullen het gebruiken om de images van onze app op te slaan en ze eruit te halen zodat ze draaien op ECS.

Ga naar uw AWS paneelzoeken naar Elastische container
Register
en klik op Aan de slag. U ziet het onderstaande scherm:

archief met Amazon Elastic Container Registry

We maken een privé archief aan en geven het de naam voorbeeld-rails-app.

Het archief is er, maar het is leeg. We willen dat het de afbeelding van onze app bevat. Dit is de volgende stap.

# gooi fouten als Gemfile is gewijzigd sinds Gemfile.lock

RUN bundle config --global bevroren 1

WERKDIR /app



RUN bundel installeren

COPY .

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

Dan moeten we een image bouwen en het naar de ECR repository pushen.

Laten we eerst assets voorcompileren met `rails assets:precompile`.

Ga nu naar de aangemaakte repository. Bovenaan het scherm zie je een Pushopdrachten bekijken knop met details over hoe dit te doen.

In mijn geval (Linux) voer ik het uit met deze AWS instructies:

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/sample-rails-app:latest

Zorg ervoor dat je gebruiker toestemming heeft om deze bewerking uit te voeren. Ik heb het AmazonElasticContainerRegistryPowerUser beleid toegevoegd aan mijn gebruiker, wat er als volgt uitziet:

{
    "Versie": "2012-10-17",
    "Verklaring": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Toestaan",
            "Actie": [
                "ecr:GetRegistryPolicy",
                "ecr:DescribeRegistry",
                "ecr:GetAuthorizationToken",
                "ecr:DeleteRegistryPolicy",
                "ecr:PutRegistryPolicy",
                ecr:PutReplicationConfiguration", "ecr:PutReplicationConfiguration", "ecr:PutReplicationConfiguration".
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Toestaan",
            "Actie": "ecr:*",
            "Bron": "arn:aws:ecr:*:212516879399:repository/*"
        }
    ]
}

We hebben ons docker image voorbereid.

De Application Load Balancer maken

Ik wil dat de buitenwereld alleen verbinding kan maken met mijn Application Load Balancer. Deze geeft verkeer door aan containers die binnen ons ECS-cluster draaien.

Ga naar EC2-services -> Lastenverdeling -> Laadbalancersklik Load Balancer makenkiezen Toepassingslading balancer en klik op de Maak knop.

Stel de naam in op voorbeeld-rails-app-albGebruik uw standaard VPC en selecteer alle subnetten.

We blijven achter met Beveiligingsgroepen en Luisteraars en routering secties.

Beveiligingsgroepen

We maken een nieuwe beveiligingsgroep aan voor onze loadbalancer. Het werkt als een firewall; we stellen de regels in voor inkomend en uitgaand verkeer. We willen inkomend http verkeer accepteren (TCP poort 80) en al het uitgaande verkeer toestaan. 

Klik hiervoor op de "Nieuwe beveiligingsgroep maken" link.

In de sectie "Basisgegevens", stel de naam en beschrijving in en laat de standaard VPC staan.

In mijn geval - naam: "voorbeeld-rails-app-alb-sg", beschrijving: "http van buiten, alles van binnen"

Voeg de inkomende regel toe met Type: HTTP en Bron: Overal-IPv4. Laat de uitgaande regels zoals ze zijn.

Klik op beveiligingsgroep aanmakenGa dan terug naar het tabblad waar u de Application Load Balancer aan het maken was, ververs de beveiligingsgroepen en voeg degene toe die we zojuist hebben gemaakt, verwijder de standaardgroep.

Luisteraars en routering

In deze sectie definiëren we waarnaar we willen dat de loadbalancer verkeer doorstuurt. verlaten Luisteraar Protocol en Haven als HTTP en 80, omdat dit precies is wat we willen, en klik op "Doelgroep creëren" link.

Stel de naam in op "voorbeeld-rails-app-alb-tg". De enige verandering is het poortnummer. We geven het door aan poort 3000 omdat dit de poort is voor onze Rails app. Negeer de volgende stap (Geregistreerde doelen) en maak de doelgroep aan.

Ga nu terug naar het tabblad waar we de Application Load Balancer hebben gemaakt, vernieuw de doelgroep en selecteer degene die we zojuist hebben gemaakt.

We hebben onze Application Load Balancer klaar, laten we nu met ECS gaan spelen.

Een ECS-cluster maken

Je zult veel enge termen tegenkomen - cluster, taken, taakdefinitie, services. Om het eenvoudiger te maken, kun je het cluster zien als een groep servers (EC2-instanties). Op elke server draaien we taken, die gewoon een groep containers zijn die samen draaien. De taakdefinitie beschrijft welke containers zich in een bepaalde groep bevinden en welke resources we ze willen geven (geheugen, cpu). Services houden deze taken in de gaten om ervoor te zorgen dat er altijd het juiste aantal gezonde taken draait in ons cluster.

Laten we met dit in gedachten ons cluster aanmaken.

Ga naar de ECS-pagina en klik op de knop Clusters link en Cluster aanmaken knop. Kies de "EC2 + Linux netwerken"een en klik Volgende stap. 

Stel de clusternaam in op "voorbeeld-rails-app-cluster". Kies het type EC2-instantie, ik heb de t2-micro gekozen omdat deze beschikbaar is in het Free Tier-plan. Laat het aantal instanties op 1 staan. 

In de sectie netwerken gebruikt u uw standaard VPC en selecteert u alle subnetten. Klik op create, wacht even en voila, we hebben een nieuw ECS Cluster aangemaakt.

Taak Definitie

Klik op de Taakdefinities link, dan Nieuwe taakdefinitie maken knop. Selecteer de EC2 optie en klik op Volgende stap. De app die we gaan uitvoeren is heel eenvoudig, dus we hebben hier maar een paar opties nodig. 

Stel in Taak Definitie naam naar "voorbeeld-rails-app", ga dan rechtstreeks naar de Container definities en klik op "Container toevoegen". Geef de Container de naam "voorbeeld-rails-app" en stel de afbeeldingslocatie in op het formaat "archief-url/afbeelding:tag". Ga in het nieuwe browsertabblad naar de ECR om de URI van de afbeelding te kopiëren. In mijn geval was het: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".

Stel je geheugenlimiet in op de aanbevolen 300-500MiB. Nu het meest lastige - Port Mapping.

Onze app draait in een container op poort 3000. Dus zet 3000 als containerpoort. We voeren 0 in als hostpoort, wat in feite betekent dat het een willekeurige poort selecteert. Gelukkig kent onze Application Load Balancer deze poorttoewijzing en kan het verkeer correct leiden. We kunnen zelfs meerdere taken uitvoeren op deze enkele instantie. 

Voeg de omgevingsvariabele toe RAILS_ENV en stel het in op productie.

Klik nu op Voeg toe om onze containerdefinitie toe te voegen en klik op Maak om het instellen van de taakdefinitie te voltooien.

Service

We hebben onze cluster, loadbalancer en taakdefinitie. Nu moeten we deze taken op de een of andere manier uitvoeren binnen ons cluster. Dit is de taak van services. Ga naar het nieuw aangemaakte cluster, selecteer de Diensten tabblad en klik op de Maak knop. 

Stel het Launch type in op EC2, voeg de naam "voorbeeld-rails-app-service". Stel het aantal taken in op 1 en klik op Volgende stap. Selecteer op deze pagina het keuzerondje Application Load Balancer en kies de bestaande IAM-rol ervoor. In het gedeelte "Container to load balance" moet je al een correcte container "sample-rails-app:0:3000" hebben ingevoerd en klik je op "Add to load balancer".

Kies voor "Production listener port" 80:HTTP; gebruik als Doelgroepnaam degene die we eerder hebben gemaakt - "voorbeeld-rails-app-alb-tg" en klik op Volgende stap. Laat Automatisch schalen opties zoals ze zijn, klik op Volgende stap en Service maken.

De ECS-beveiligingsgroep bijwerken

U kunt naar de gemaakte clusterpagina gaan en de Taken Tabbladen, er zou één taak moeten draaien. De service is gestart. Ga nu naar de EC2-servicepagina, klik op Load Balancers en bekijk de details van onze Application Load Balancer. Daar zou de DNS-naam moeten staan. Kopieer deze en open hem in de browser. Het zou je naar onze app moeten leiden. Helaas krijgen we het bericht "504 gateway time-out" fout. 

Het probleem zit in de beveiligingsgroep van ons cluster. De inkomende regels staan geen verkeer toe dat binnenkomt van de loadbalancer. Om dit op te lossen, gaat u terug naar het EC2-paneel en klikt u op de knop Beveiligingsgroepen link. Er is een nieuwe groep aangemaakt tijdens het aanmaken van het cluster. Deze zou een naam moeten hebben die begint met "EC2ContainerService-voorbeeld-rails-app-cluster". Klik erop en bewerk de inkomende regels. Omdat we alle verkeer van onze VPC willen toestaan, ga je naar het Amazon VPC paneel en controleer je wat je VPC IPv4 CIDR is. Stel het type regel in op "Alle verkeer" en de bron naar IPv4 CIDR. Sla deze regel op en probeer de DNS-naam van de balancer te laden. 

Hopelijk zie jij het net zo als ik 🙂

Meer lezen

GraphQL Ruby. Hoe zit het met de prestaties?

Rails en andere transportmiddelen

Rails ontwikkelen met TMUX, Vim, Fzf + Ripgrep

Verwante artikelen

Software Ontwikkeling

Bouw Toekomstbestendige Web Apps: Inzichten van The Codest's Expert Team

Ontdek hoe The Codest uitblinkt in het creëren van schaalbare, interactieve webapplicaties met geavanceerde technologieën, het leveren van naadloze gebruikerservaringen op alle platforms. Ontdek hoe onze expertise digitale transformatie en business...

DE BESTE
Software Ontwikkeling

Top 10 in Letland gevestigde bedrijven voor softwareontwikkeling

Lees meer over de beste softwareontwikkelingsbedrijven van Letland en hun innovatieve oplossingen in ons nieuwste artikel. Ontdek hoe deze technologieleiders uw bedrijf kunnen helpen verbeteren.

thecodest
Oplossingen voor ondernemingen en schaalvergroting

Essentiële Java-softwareontwikkeling: Een gids voor succesvol uitbesteden

Verken deze essentiële gids over succesvolle outsourcing Java-softwareontwikkeling om de efficiëntie te verbeteren, toegang te krijgen tot expertise en projectsucces te stimuleren met The Codest.

thecodest
Software Ontwikkeling

De ultieme gids voor outsourcing in Polen

De sterke groei van outsourcing in Polen wordt gedreven door economische, educatieve en technologische vooruitgang, die IT-groei en een bedrijfsvriendelijk klimaat stimuleert.

DeCodest
Oplossingen voor ondernemingen en schaalvergroting

De complete gids voor IT-auditmiddelen en -technieken

IT-audits zorgen voor veilige, efficiënte en compliant systemen. Lees het volledige artikel om meer te weten te komen over het belang ervan.

The Codest
Jakub Jakubowicz CTO & medeoprichter

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

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