window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes allerede') } 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 }) }, } } })() Implementering af Rails-app med Amazon ECS - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2021-11-17
Udvikling af software

Implementering af Rails-app med Amazon ECS

Codest

Marcin Doliwa

Software Engineer

I denne vejledning vil jeg gerne vise dig, hvordan du implementerer et eksempel på en Rails-app ved hjælp af Amazon Elastic Container Service (ECS).

Lad os oprette den ved at køre rails new sample-rails-appog derefter generere en grundlæggende controller-handling skinner g controller Velkommen indeks og indstiller ruter til rodstien som en "rod til: welcome#index".

Vores mål er at se denne velkomstside implementeret ved hjælp af ECS.

Opret et repository med Amazon Elastic Container Registry (ECR)

Amazon ECR er et container-register. Vi vil bruge det til at gemme vores apps images og trække dem ud af det, så de kan køre på ECS.

Gå til din AWS Panelse efter Elastisk beholder
Register
og klik på Kom godt i gang. Du vil se nedenstående skærm:

arkiv med Amazon Elastic Container Registry

Vi opretter et privat repository og navngiver det prøve-skinner-app.

Repository'et er der, men det er tomt. Vi ønsker, at det skal indeholde vores apps image. Dette er det næste skridt.

# smider fejl, hvis Gemfile er blevet ændret siden Gemfile.lock

RUN bundle config --global frozen 1

WORKDIR /app

COPY Gemfile Gemfile.lock ./

KØR bundle-installation

COPY .

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

Så skal vi bygge et billede og sende det til ECR-repository'et.

Før det skal vi prækompilere aktiver med `rails assets:precompile`.

Gå nu til det oprettede repository. Øverst på skærmen ser du en Se push-kommandoer med detaljer om, hvordan du gør det.

I mit tilfælde (Linux) kører jeg det med disse AWS-anvisninger:

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

Sørg for, at din bruger har tilladelse til at udføre denne handling. Jeg tilføjede AmazonElasticContainerRegistryPowerUser-politikken til min bruger, som ser sådan her ud:

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

Vi har forberedt vores docker-image.

Oprettelse af Application Load Balancer

Jeg ønsker, at omverdenen kun skal kunne forbinde til min Application Load Balancer. Den vil sende trafik til containere, der kører i vores ECS-klynge.

Gå til EC2-tjenester -> Udligning af belastning -> Load balancere, klik Opret Load Balancer, vælg Load Balancer til applikationer og klik på Opret knap.

Sæt dens navn til prøve-skinner-app-albBrug din standard-VPC og vælg alle dens subnet.

Vi står tilbage med Sikkerhedsgrupper og Lyttere og routing sektioner.

Sikkerhedsgrupper

Vi opretter en ny sikkerhedsgruppe til vores load balancer. Den fungerer som en firewall; vi indstiller reglerne for indgående og udgående trafik. Vi vil acceptere indgående http-trafik (TCP-port 80) og tillade al udgående trafik. 

For at gøre dette skal du klikke på "Opret en ny sikkerhedsgruppe" link.

I afsnittet "Grundlæggende detaljer", indstil navn og beskrivelse, lad standard-VPC'en stå.

I mit tilfælde - navn: "prøve-skinner-app-alb-sg", beskrivelse: "http udefra, alt indefra"

Tilføj den indgående regel med Type: HTTP og Kilde: Hvor som helst-IPv4. Lad udgående regler være, som de er.

Klik på Opret sikkerhedsgruppeGå derefter tilbage til den fane, hvor du oprettede Application Load Balancer, opdater sikkerhedsgrupper og tilføj den, vi lige har oprettet, og fjern standardgruppen.

Lyttere og routing

I dette afsnit definerer vi, hvor vi ønsker, at load balanceren skal sende trafikken hen. Lad være Lytter Protokol og Havn som HTTP og 80, da det er præcis, hvad vi ønsker, og klik på "Skab en målgruppe" link.

Sæt navnet til "prøve-skinner-app-alb-tg". Den eneste ændring er portnummeret. Vi sender det til port 3000, da det er den, vores Rails-app skal bruge. Ignorer det næste trin (Registrerede mål) og opret målgruppen.

Gå nu tilbage til den fane, hvor vi oprettede Application Load Balancer, opdater målgruppen, og vælg den, vi lige har oprettet.

Vi har vores Application Load Balancer klar, så lad os nu lege med ECS.

Oprettelse af en ECS-klynge

Der er mange skræmmende udtryk, du vil se - klynge, opgaver, opgavedefinition, tjenester. For at gøre det mere enkelt kan du tænke på klyngen som en gruppe servere (EC2-instanser). På hver af dem kører vi opgaver, som bare er en gruppe containere, der kører sammen. Opgavedefinitionen beskriver, hvilke containere der er i en given gruppe, og hvilke ressourcer vi gerne vil give dem (hukommelse, cpu). Services holder øje med disse opgaver for at sikre, at der altid er det korrekte antal sunde opgaver, der kører i vores klynge.

Med dette i tankerne, lad os oprette vores klynge.

Gå til ECS-siden, og klik på Klynger link og Opret klynge knap. Vælg knappen "EC2 + Linux-netværk" et og klik Næste skridt. 

Indstil klyngenavnet til "eksempel-rails-app-klynge". Vælg EC2-instanstypen, jeg tog t2-micro, da den er tilgængelig i Free Tier-planen. Lad antallet af instanser være 1. 

I netværkssektionen skal du bruge din standard-VPC og vælge alle dens undernet. Klik på Opret, vent lidt, og voila, vi har oprettet en ny ECS-klynge.

Definition af opgaver

Klik på Definitioner af opgaver link, så Opret en ny opgavedefinition knap. Vælg knappen EC2 og klik på Næste skridt. Den app, vi skal køre, er meget enkel, så vi har kun brug for nogle få muligheder her. 

Sæt Definition af opgaver navn til "Eksempel på jernbane-app", og gå derefter direkte til Definitioner af beholdere sektion og klik på "Tilføj beholder". Navngiv containeren som "Eksempel på jernbane-app", og indstil billedets placering i formatet "repository-url/billede:tag". I den nye browserfane skal du gå til ECR for at kopiere billedets URI. I mit tilfælde var det: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".

Sæt din hukommelsesgrænse til de anbefalede 300-500MiB. Nu kommer det sværeste - porttilknytning.

Vores app kører i en container på port 3000. Så sæt 3000 som containerport. Vi indtaster 0 som værtsport, hvilket dybest set betyder, at den vælger en tilfældig port. Heldigvis kender vores Application Load Balancer denne porttilknytning og vil være i stand til at dirigere trafikken korrekt. Vi kan endda køre flere opgaver på denne ene instans. 

Tilføj miljøvariablen RAILS_ENV og sæt den til produktion.

Klik nu på Tilføj for at tilføje vores containerdefinition, og klik på Opret for at afslutte opsætningen af opgavedefinitionen.

Service

Vi har vores klynge, load balancer og opgavedefinition. Nu skal vi på en eller anden måde køre disse opgaver i vores klynge. Det er tjenesternes opgave. Gå til den nyoprettede klynge, vælg Serviceydelser og klik på fanen Opret knap. 

Indstil starttypen til EC2, tilføj navnet "Eksempel på jernbane-app-service". Indstil antallet af opgaver til 1, og klik på Næste skridt. På denne side skal du vælge alternativknappen Application Load Balancer og vælge den eksisterende IAM-rolle for den. I afsnittet "Container to load balance" bør du allerede have indtastet en korrekt container "sample-rails-app:0:3000", og klik derefter på "Add to load balancer".

For "Production listener port" skal du vælge 80:HTTP; som målgruppenavn skal du bruge det, vi oprettede før - "prøve-skinner-app-alb-tg" og klik på Næste skridt. Lad være Automatisk skalering indstillinger, som de er, klik på Næste skridt og Opret tjeneste.

Opdater ECS-sikkerhedsgruppen

Du kan gå til siden med oprettede klynger og tjekke Opgaver faner, bør der være en opgave, der kører. Tjenesten har startet den. Gå nu til EC2-servicesiden, klik på Load Balancers og se vores Application Load Balancers detaljer. Der skulle du gerne have dens DNS-navn. Kopier det, og åbn det i browseren. Det burde lede dig til vores app. Desværre får vi meddelelsen "504 gateway time-out" fejl. 

Problemet ligger i sikkerhedsgruppen i vores klynge. Dens indgående regler tillader ikke trafik, der kommer fra load balanceren. For at løse det skal du gå tilbage til EC2-panelet og klikke på Sikkerhedsgrupper link. Der er en ny gruppe, som blev oprettet under oprettelsen af klyngen. Den bør have et navn, der starter med "EC2C-containerService-eksempel-rails-app-klynge". Klik på den, og rediger de indgående regler. Da vi ønsker at tillade al trafik fra vores VPC, skal du gå til Amazon VPC-panelet og tjekke, hvad din VPC IPv4 CIDR er. Indstil regeltypen til "Al trafik" og kilden til IPv4 CIDR. Gem denne regel, og prøv at indlæse balancerens DNS-navn. 

Forhåbentlig ser du det samme som jeg 🙂.

Læs mere

GraphQL Ruby. Hvad med performance?

Skinner og andre transportmidler

Rails-udvikling med TMUX, Vim, Fzf + Ripgrep

Relaterede artikler

Udvikling af software

Byg fremtidssikrede webapps: Indsigt fra The Codest's ekspertteam

Oplev, hvordan The Codest udmærker sig ved at skabe skalerbare, interaktive webapplikationer med banebrydende teknologier, der leverer sømløse brugeroplevelser på tværs af alle platforme. Lær, hvordan vores ekspertise driver digital transformation og...

DENKODEST
Udvikling af software

Top 10 Letlands-baserede softwareudviklingsvirksomheder

Læs om Letlands bedste softwareudviklingsvirksomheder og deres innovative løsninger i vores seneste artikel. Find ud af, hvordan disse teknologiledere kan hjælpe med at løfte din virksomhed.

thecodest
Løsninger til virksomheder og scaleups

Grundlæggende om Java-softwareudvikling: En guide til succesfuld outsourcing

Udforsk denne vigtige guide til vellykket outsourcing af Java-softwareudvikling for at forbedre effektiviteten, få adgang til ekspertise og skabe projektsucces med The Codest.

thecodest
Udvikling af software

Den ultimative guide til outsourcing i Polen

Den voldsomme stigning i outsourcing i Polen er drevet af økonomiske, uddannelsesmæssige og teknologiske fremskridt, der fremmer it-vækst og et erhvervsvenligt klima.

TheCodest
Løsninger til virksomheder og scaleups

Den komplette guide til IT-revisionsværktøjer og -teknikker

IT-revisioner sikrer sikre, effektive og kompatible systemer. Lær mere om deres betydning ved at læse hele artiklen.

Codest
Jakub Jakubowicz CTO og medstifter

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

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

    Polen - Lokale teknologiske knudepunkter

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

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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