window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes 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 }) }, } } })() Distribuere Rails-app med Amazon ECS - The Codest
The Codest
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Industrier
    • Fintech og bankvirksomhet
    • E-commerce
    • Adtech
    • Helseteknologi
    • Produksjon
    • Logistikk
    • Bilindustrien
    • IOT
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
Pil tilbake GÅ TILBAKE
2021-11-17
Programvareutvikling

Distribuere Rails-app med Amazon ECS

The Codest

Marcin Doliwa

Software Engineer

I denne veiledningen vil jeg vise deg hvordan du distribuerer et eksempel på en Rails-app ved hjelp av Amazon Elastic Container Service (ECS).

La oss opprette den ved å kjøre rails new sample-rails-appog deretter generere en grunnleggende kontrollerhandling skinner g-kontroller Velkomstindeks og sette ruter til rotstien som en "root to: welcome#index".

Målet vårt er at denne velkomstsiden skal implementeres ved hjelp av ECS.

Opprett et depot med Amazon Elastic Container Registry (ECR)

Amazon ECR er et containerregister. Vi skal bruke det til å lagre avbildninger av appen vår og hente dem fra det, slik at de kjører på ECS.

Gå til din AWS panel, se etter Elastisk beholder
Register
og klikk på Kom i gang. Du vil se skjermbildet nedenfor:

Repository med Amazon Elastic Container Registry

Vi oppretter et privat depot og gir det navnet sample-rails-app.

Repositoryet er der, men det er tomt. Vi vil at det skal inneholde appens image. Dette er neste trinn.

# kaster feil hvis Gemfile har blitt endret siden Gemfile.lock

RUN bundle config --global frozen 1

WORKDIR /app

COPY Gemfile Gemfile.lock ./

RUN bundle install

COPY .

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

Deretter bør vi bygge en avbildning og sende den til ECR-depotet.

Før det, la oss prekompilere assets med `rails assets:precompile`.

Gå nå til det opprettede depotet. Øverst på skjermen ser du en Vis push-kommandoer knappen med informasjon om hvordan du gjør dette.

I mitt tilfelle (Linux) kjører jeg det med disse AWS-instruksjonene:

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 brukeren din har tillatelse til å utføre denne operasjonen. Jeg la til AmazonElasticContainerRegistryPowerUser-policyen til brukeren min, som ser slik ut:

{
    "Versjon": "2012-10-17",
    "Uttalelse": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ecr:GetRegistryPolicy",
                "ecr:DescribeRegistry",
                "ecr:GetAuthorizationToken", "ecr:GetAuthorizationToken",
                "ecr:DeleteRegistryPolicy", "ecr:DeleteRegistryPolicy",
                "ecr:PutRegistryPolicy", "ecr:PutRegistryPolicy",
                "ecr:PutReplicationConfiguration"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effekt": "Tillat",
            "Action": "ecr:*",
            "Resource": "arn:aws:ecr:*:212516879399:repository/*"
        }
    ]
}

Vi har forberedt docker-imaget vårt.

Opprette applikasjonslastbalanseringen

Jeg vil at omverdenen bare skal kunne koble seg til min Application Load Balancer. Den vil sende trafikk til containere som kjører inne i ECS-klyngen vår.

Gå til EC2-tjenester -> Lastbalansering -> Lastbalanserere, klikk Opprett lastbalansering, velg Lastbalansering av applikasjoner og klikk på Opprett knapp.

Sett navnet til sample-rails-app-albbruker du standard VPC og velger alle undernettene.

Vi sitter igjen med Sikkerhetsgrupper og Lyttere og ruting seksjoner.

Sikkerhetsgrupper

Vi oppretter en ny sikkerhetsgruppe for lastbalanseringen vår. Den fungerer som en brannmur; vi vil sette regler for innkommende og utgående trafikk. Vi ønsker å godta innkommende http-trafikk (TCP-port 80) og tillate all utgående trafikk. 

Dette gjør du ved å klikke på "Opprett ny sikkerhetsgruppe" lenke.

I avsnittet "Grunnleggende detaljer", angi navn og beskrivelse, og la standard VPC stå igjen.

I mitt tilfelle - navn: "sample-rails-app-alb-sg", beskrivelse: "http fra utsiden, alt fra innsiden"

Legg til den innkommende regelen med Type: HTTP og kilde: Hvor som helst-IPv4. La utgående regler være som de er.

Klikk opprette sikkerhetsgruppeGå deretter tilbake til fanen der du opprettet Application Load Balancer, oppdater sikkerhetsgrupper og legg til den vi nettopp har opprettet, og fjern standardgruppen.

Lyttere og ruting

I denne delen definerer vi hvor vi vil at lastbalanseringen skal sende trafikken. La Lytter Protokoll og Havn som HTTP og 80, siden det er akkurat det vi ønsker, og klikk på "Opprett målgruppe" lenke.

Sett navnet til "sample-rails-app-alb-tg". Den eneste endringen er portnummeret. Vi vil sende det til port 3000, siden dette er porten for Rails-appen vår. Ignorer det neste trinnet (Registrerte mål) og opprett målgruppen.

Gå nå tilbake til fanen der vi opprettet Application Load Balancer, oppdater målgruppen og velg den vi nettopp har opprettet.

Vi har Application Load Balancer klar, så la oss nå leke med ECS.

Opprette en ECS-klynge

Det er mange skumle begreper du kommer til å se - klynge, oppgaver, oppgavedefinisjon, tjenester. For å gjøre det enklere kan du tenke på klyngen som en gruppe servere (EC2-instanser). På hver av dem kjører vi oppgaver, som bare er en gruppe containere som kjører sammen. Oppgavedefinisjonen beskriver hvilke containere som er i en gitt gruppe, og hvilke ressurser vi ønsker å gi dem (minne, cpu). Tjenester holder øye med disse oppgavene for å sikre at det alltid er riktig antall sunne oppgaver som kjører i klyngen vår.

Med dette i tankene, la oss opprette klyngen vår.

Gå til ECS-siden og klikk på Klynger lenke og Opprett klynge knappen. Velg "EC2 + Linux-nettverk" ett og klikk Neste trinn. 

Angi klyngenavnet til "sample-rails-app-klynge". Velg EC2-instanstype, jeg valgte t2-micro ettersom den er tilgjengelig i Free Tier-abonnementet. La antall forekomster være 1. 

I nettverksdelen bruker du standard VPC og velger alle undernettene. Klikk på Opprett, vent litt og voila, vi har opprettet en ny ECS-klynge.

Oppgavedefinisjon

Klikk på Oppgavedefinisjoner lenke, så Opprett ny oppgavedefinisjon knappen. Velg EC2 alternativet og klikk på Neste trinn. Appen vi skal kjøre, er veldig enkel, så vi trenger bare noen få alternativer her. 

Sett Oppgavedefinisjon navn til "sample-rails-app", og gå deretter rett til Definisjoner av beholdere delen og klikk på "Legg til beholder". Navngi beholderen som "sample-rails-app", og angi bildeplassering i formatet "repository-url/image:tag". I den nye nettleserfanen går du til ECR for å kopiere bilde-URI-en. I mitt tilfelle var det "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".

Sett minnegrensen til de anbefalte 300-500MiB. Nå kommer det vanskeligste - porttilordning.

Appen vår kjører i en container på port 3000. Så sett 3000 som containerport. Vi skriver inn 0 som vertsport, noe som i utgangspunktet betyr at den velger en tilfeldig port. Heldigvis vil vår Application Load Balancer kjenne til denne porttilordningen og være i stand til å dirigere trafikken riktig. Vi kan til og med kjøre flere oppgaver på denne ene forekomsten. 

Legg til miljøvariabelen RAILS_ENV og sett den til produksjon.

Klikk nå Legg til for å legge til containerdefinisjonen vår, og klikk på Opprett for å fullføre oppsettet av oppgavedefinisjonen.

Service

Vi har klyngen, lastbalanseringen og oppgavedefinisjonen. Nå må vi på en eller annen måte kjøre disse oppgavene i klyngen vår. Dette er jobben til tjenestene. Gå til den nyopprettede klyngen, velg Tjenester og klikk på fanen Opprett knapp. 

Sett lanseringstypen til EC2, legg til navnet "eksempel på jernbane-app-tjeneste". Sett antall oppgaver til 1, og klikk på Neste trinn. På denne siden velger du alternativknappen Application Load Balancer og velger den eksisterende IAM-rollen for den. I delen "Container to load balance" bør du allerede ha angitt en korrekt container "sample-rails-app:0:3000", og deretter klikker du på "Add to load balancer".

For "Production listener port" velger du 80:HTTP; som målgruppenavn bruker du det vi opprettet tidligere - "sample-rails-app-alb-tg" og klikk på Neste trinn. La Automatisk skalering alternativene som de er, klikker du på Neste trinn og Opprett tjeneste.

Oppdater ECS-sikkerhetsgruppen

Du kan gå til siden for opprettede klynger og sjekke Oppgaver skal det være én oppgave som kjører. Tjenesten har startet den. Gå nå til EC2-tjenestesiden, klikk på Load Balancers og se detaljene til vår Application Load Balancer. Du bør ha DNS-navnet der. Kopier det og åpne det i nettleseren. Det skal lede deg til appen vår. Dessverre får vi "504 tidsavbrudd for gateway" feil. 

Problemet ligger i sikkerhetsgruppen i klyngen vår. Reglene for innkommende trafikk tillater ikke trafikk som kommer fra lastbalanseringen. For å fikse det, går du tilbake til EC2-panelet og klikker på Sikkerhetsgrupper kobling. Det er en ny gruppe som ble opprettet under opprettelsen av klyngen. Den bør ha et navn som begynner med "EC2Containertjeneste-eksempel-rails-app-klynge". Klikk på den og rediger de innkommende reglene. Ettersom vi ønsker å tillate all trafikk fra vår VPC, går du til Amazon VPC-panelet og sjekker hva som er din VPC IPv4 CIDR. Sett regeltypen til "All trafikk" og kilden til IPv4 CIDR. Lagre denne regelen, og prøv å laste inn balansererens DNS-navn. 

Forhåpentligvis ser du akkurat det samme som meg 🙂 .

Les mer

GraphQL Ruby. Hva med ytelse?

Skinner og andre transportmidler

Rails-utvikling med TMUX, Vim, Fzf + Ripgrep

Relaterte artikler

Programvareutvikling

Bygg fremtidssikre webapper: Innsikt fra The Codests ekspertteam

Oppdag hvordan The Codest utmerker seg når det gjelder å skape skalerbare, interaktive webapplikasjoner med banebrytende teknologi som gir sømløse brukeropplevelser på tvers av alle plattformer. Finn ut hvordan ekspertisen vår driver digital transformasjon og...

THECODEST
Programvareutvikling

Topp 10 Latvia-baserte programvareutviklingsselskaper

I vår nyeste artikkel kan du lese mer om Latvias beste programvareutviklingsselskaper og deres innovative løsninger. Oppdag hvordan disse teknologilederne kan bidra til å løfte virksomheten din.

thecodest
Løsninger for bedrifter og oppskalering

Grunnleggende om Java-programvareutvikling: En guide til vellykket outsourcing

Utforsk denne viktige veiledningen om vellykket outsourcing av Java-programvareutvikling for å øke effektiviteten, få tilgang til ekspertise og drive frem prosjektsuksess med The Codest.

thecodest
Programvareutvikling

Den ultimate guiden til outsourcing i Polen

Den kraftige økningen i outsourcing i Polen er drevet av økonomiske, utdanningsmessige og teknologiske fremskritt, noe som fremmer IT-vekst og et forretningsvennlig klima.

TheCodest
Løsninger for bedrifter og oppskalering

Den komplette guiden til verktøy og teknikker for IT-revisjon

IT-revisjoner sørger for sikre, effektive og kompatible systemer. Les hele artikkelen for å lære mer om viktigheten av dem.

The Codest
Jakub Jakubowicz CTO og medgrunnlegger

Abonner på vår kunnskapsbase og hold deg oppdatert på ekspertisen fra IT-sektoren.

    Om oss

    The Codest - Internasjonalt programvareutviklingsselskap med teknologisentre i Polen.

    Storbritannia - Hovedkvarter

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

    Polen - Lokale teknologisentre

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

      The Codest

    • Hjem
    • Om oss
    • Tjenester
    • Casestudier
    • Vet hvordan
    • Karriere
    • Ordbok

      Tjenester

    • Det rådgivende
    • Programvareutvikling
    • Backend-utvikling
    • Frontend-utvikling
    • Staff Augmentation
    • Backend-utviklere
    • Ingeniører i skyen
    • Dataingeniører
    • Annet
    • QA-ingeniører

      Ressurser

    • Fakta og myter om samarbeid med en ekstern programvareutviklingspartner
    • Fra USA til Europa: Hvorfor velger amerikanske oppstartsbedrifter å flytte til Europa?
    • Sammenligning av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinene), Eurasia (Tyrkia)
    • Hva er de største utfordringene for CTO-er og CIO-er?
    • The Codest
    • The Codest
    • The Codest
    • Retningslinjer for personver
    • Vilkår for bruk av nettstedet

    Opphavsrett © 2025 av The Codest. Alle rettigheter forbeholdt.

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