window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } 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 }) }, } } })() Wdrażanie aplikacji Rails za pomocą Amazon ECS - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2021-11-17
Software Development

Wdrażanie aplikacji Rails za pomocą Amazon ECS

The Codest

Marcin Doliwa

Software Engineer

W tym samouczku chciałbym pokazać, jak wdrożyć przykładową aplikację Rails przy użyciu usługi Amazon Elastic Container Service (ECS).

Utwórzmy go, uruchamiając rails new sample-rails-appa następnie generując podstawową akcję kontrolera rails g controller Welcome index i ustawienie tras do ścieżki głównej jako `root to: welcome#index".

Naszym celem jest wdrożenie tej strony powitalnej przy użyciu ECS.

Utwórz repozytorium za pomocą Amazon Elastic Container Registry (ECR)

Amazon ECR to rejestr kontenerów. Będziemy go używać do przechowywania obrazów naszych aplikacji i pobierania ich z niego, aby działały na ECS.

Przejdź do AWS panelszukać Elastyczny pojemnik
Rejestr
i kliknij Rozpocznij. Zobaczysz poniższy ekran:

repozytorium z Amazon Elastic Container Registry

Utworzymy prywatne repozytorium i nadamy mu nazwę sample-rails-app.

Repozytorium istnieje, ale jest puste. Chcemy, aby zawierało obraz naszej aplikacji. To jest następny krok.

# rzuca błędy, jeśli Gemfile został zmodyfikowany od czasu 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"]

Następnie powinniśmy utworzyć obraz i przesłać go do repozytorium ECR.

Zanim to nastąpi, wstępnie skompilujmy zasoby za pomocą `rails assets:precompile`.

Teraz przejdź do utworzonego repozytorium. W górnej części ekranu zobaczysz ikonę Wyświetl polecenia push ze szczegółowymi informacjami, jak to zrobić.

W moim przypadku (Linux), uruchamiam go z tymi instrukcjami AWS:

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

Upewnij się, że Twój użytkownik jest uprawniony do wykonywania tej operacji. Dodałem politykę AmazonElasticContainerRegistryPowerUser do mojego użytkownika, która wygląda następująco:

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

Mamy przygotowany nasz obraz docker.

Tworzenie modułu równoważenia obciążenia aplikacji

Chcę, aby świat zewnętrzny mógł łączyć się tylko z moim Application Load Balancer. Będzie on przekazywał ruch do kontenerów uruchomionych wewnątrz naszego klastra ECS.

Przejdź do Usługi EC2 -> Równoważenie obciążenia -> Load Balancerykliknij Tworzenie Load Balancerawybierz Równoważenie obciążenia aplikacji i kliknij przycisk Utwórz przycisk.

Ustaw jego nazwę na sample-rails-app-albUżyj domyślnej VPC i wybierz wszystkie jej podsieci.

Pozostaje nam Grupy zabezpieczeń i Odbiorniki i routing sekcje.

Grupy zabezpieczeń

Utworzymy nową grupę zabezpieczeń dla naszego load balancera. Działa ona jak firewall; ustawimy reguły dla ruchu przychodzącego i wychodzącego. Chcemy akceptować ruch przychodzący http (port TCP 80) i zezwalać na cały ruch wychodzący. 

Aby to zrobić, kliknij przycisk "Utwórz nową grupę zabezpieczeń" link.

W sekcji "Podstawowe szczegóły", ustaw nazwę i opis, pozostaw domyślny VPC.

W moim przypadku - nazwa: "sample-rails-app-alb-sg", opis: "http z zewnątrz, wszystko od wewnątrz"

Dodaj regułę przychodzącą z typem: HTTP i Źródło: Anywhere-IPv4. Pozostaw reguły wychodzące bez zmian.

Kliknij tworzenie grupy zabezpieczeńNastępnie wróć do zakładki, w której tworzyłeś Application Load Balancer, odśwież grupy zabezpieczeń i dodaj tę, którą właśnie utworzyliśmy, usuń domyślną.

Odbiorniki i routing

W tej sekcji zdefiniujemy, gdzie chcemy, aby load balancer przekazywał ruch. Pozostawić Słuchacz Protokół i Port jako HTTP i 80, ponieważ dokładnie tego chcemy, i kliknij "Tworzenie grupy docelowej" link.

Ustaw nazwę na "sample-rails-app-alb-tg". Jedyną zmianą jest numer portu. Przekażemy go do portu 3000, ponieważ jest to port dla naszej aplikacji Rails. Zignoruj następny krok (Zarejestrowane cele) i utwórz grupę docelową.

Teraz wróć do zakładki, w której tworzyliśmy Application Load Balancer, odśwież grupę docelową i wybierz tę, którą właśnie utworzyliśmy.

Mamy już gotowy Application Load Balancer, teraz pobawmy się ECS.

Tworzenie klastra ECS

Pojawi się wiele przerażających terminów - klaster, zadania, definicja zadań, usługi. Aby to uprościć, pomyśl o klastrze jako o grupie serwerów (instancji EC2). Na każdym z nich uruchamiamy zadania, które są po prostu grupą kontenerów działających razem. Definicja zadania opisuje, które kontenery znajdują się w danej grupie i jakie zasoby chcemy im przydzielić (pamięć, procesor). Usługi mają oko na te zadania, aby upewnić się, że zawsze jest odpowiednia liczba zdrowych zadań uruchomionych w naszym klastrze.

Mając to na uwadze, stwórzmy nasz klaster.

Przejdź do strony ECS i kliknij przycisk Klastry link i Utwórz klaster przycisk. Wybierz opcję "EC2 + Linux Networking" jeden i kliknij Następny krok. 

Ustaw nazwę klastra na "sample-rails-app-cluster". Wybierz typ instancji EC2, ja wybrałem t2-micro, ponieważ jest on dostępny w ramach planu Free Tier. Pozostaw liczbę instancji jako 1. 

W sekcji networking użyj domyślnego VPC i wybierz wszystkie jego podsieci. Klikamy create, czekamy chwilę i voila, mamy utworzony nowy klaster ECS.

Definicja zadania

Kliknij przycisk Definicje zadań link, a następnie Utwórz nową definicję zadania przycisk. Wybierz opcję EC2 i kliknij Następny krok. Aplikacja, którą zamierzamy uruchomić, jest bardzo prosta, więc potrzebujemy tylko kilku opcji. 

Zestaw Definicja zadania nazwa do "sample-rails-app", a następnie przejdź bezpośrednio do Definicje pojemników i kliknij "Dodaj pojemnik". Nazwij kontener jako "sample-rails-app" i ustaw lokalizację obrazu w formacie "repository-url/image:tag". W nowej karcie przeglądarki przejdź do ECR, aby skopiować identyfikator URI obrazu. W moim przypadku było to: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".

Ustaw limit pamięci na zalecane 300-500 MB. Teraz najtrudniejsza rzecz - mapowanie portów.

Nasza aplikacja działa wewnątrz kontenera na porcie 3000. Więc wpisz 3000 jako port kontenera. Wprowadzimy 0 jako port hosta, co w zasadzie oznacza, że wybierze on losowy port. Na szczęście nasz Application Load Balancer będzie znał to mapowanie portów i będzie w stanie prawidłowo kierować ruchem. Możemy nawet uruchomić wiele zadań na tej jednej instancji. 

Dodaj zmienną środowiskową RAILS_ENV i ustawić go na produkcja.

Teraz kliknij Dodaj aby dodać naszą definicję kontenera i kliknij Utwórz aby zakończyć konfigurację definicji zadania.

Usługa

Mamy nasz klaster, load balancer i definicję zadań. Teraz musimy jakoś uruchomić te zadania wewnątrz naszego klastra. Jest to zadanie usług. Przejdź do nowo utworzonego klastra, wybierz opcję Nasze Usługi i kliknij przycisk Utwórz przycisk. 

Ustaw typ uruchomienia na EC2, dodaj nazwę "sample-rails-app-service". Ustaw liczbę zadań na 1 i kliknij przycisk Następny krok. Na tej stronie należy wybrać przycisk radiowy Application Load Balancer i wybrać dla niego istniejącą rolę IAM. W sekcji "Kontener do równoważenia obciążenia" powinieneś już wprowadzić poprawny kontener "sample-rails-app:0:3000", a następnie kliknąć "Dodaj do równoważenia obciążenia".

Dla "Production listener port" wybierz 80:HTTP; jako nazwy grupy docelowej użyj tej, którą utworzyliśmy wcześniej - "sample-rails-app-alb-tg" i kliknij Następny krok. Odejść Automatyczne skalowanie kliknij przycisk Następny krok i Utwórz usługę.

Aktualizacja grupy zabezpieczeń ECS

Możesz przejść do strony utworzonego klastra i sprawdzić Zadania zakładki, powinno być uruchomione jedno zadanie. Usługa została uruchomiona. Teraz przejdź do strony usługi EC2, kliknij Load Balancers i zobacz szczegóły naszego Application Load Balancer. Powinna się tam znajdować jego nazwa DNS. Skopiuj ją i otwórz w przeglądarce. Powinna ona przekierować do naszej aplikacji. Niestety, otrzymujemy komunikat "Limit czasu bramki 504" błąd. 

Problem tkwi w grupie zabezpieczeń naszego klastra. Jej reguły przychodzące nie zezwalają na ruch przychodzący z load balancera. Aby to naprawić, należy wrócić do panelu EC2 i kliknąć na ikonę Grupy zabezpieczeń link. Istnieje nowa grupa, która została utworzona podczas procesu tworzenia klastra. Powinna mieć nazwę zaczynającą się od "EC2ContainerService-sample-rails-app-cluster". Kliknij na nią i edytuj reguły przychodzące. Ponieważ chcemy zezwolić na ruch z naszej VPC, przejdź do panelu Amazon VPC i sprawdź, jaki jest Twój VPC IPv4 CIDR. Ustaw typ reguły na "Cały ruch" i źródło do IPv4 CIDR. Zapisz tę regułę i spróbuj załadować nazwę DNS balancera. 

Mam nadzieję, że widzisz to samo co ja 🙂

Czytaj więcej

GraphQL Ruby. Co z wydajnością?

Szyny i inne środki transportu

Rails Development z TMUX, Vim, Fzf + Ripgrep

Powiązane artykuły

Software Development

Tworzenie przyszłościowych aplikacji internetowych: spostrzeżenia zespołu ekspertów The Codest

Odkryj, w jaki sposób The Codest wyróżnia się w tworzeniu skalowalnych, interaktywnych aplikacji internetowych przy użyciu najnowocześniejszych technologii, zapewniając płynne doświadczenia użytkowników na wszystkich platformach. Dowiedz się, w jaki sposób nasza wiedza napędza transformację cyfrową i biznes...

THEECODEST
Software Development

10 najlepszych firm tworzących oprogramowanie na Łotwie

Dowiedz się więcej o najlepszych łotewskich firmach programistycznych i ich innowacyjnych rozwiązaniach w naszym najnowszym artykule. Odkryj, w jaki sposób ci liderzy technologiczni mogą pomóc w rozwoju Twojej firmy.

thecodest
Rozwiązania dla przedsiębiorstw i scaleupów

Podstawy tworzenia oprogramowania Java: Przewodnik po skutecznym outsourcingu

Zapoznaj się z tym niezbędnym przewodnikiem na temat skutecznego tworzenia oprogramowania Java outsourcing, aby zwiększyć wydajność, uzyskać dostęp do wiedzy specjalistycznej i osiągnąć sukces projektu z The Codest.

thecodest
Software Development

Kompletny przewodnik po outsourcingu w Polsce

Wzrost liczby outsourcing w Polsce jest napędzany przez postęp gospodarczy, edukacyjny i technologiczny, sprzyjający rozwojowi IT i przyjazny klimat dla biznesu.

TheCodest
Rozwiązania dla przedsiębiorstw i scaleupów

Kompletny przewodnik po narzędziach i technikach audytu IT

Audyty IT zapewniają bezpieczne, wydajne i zgodne z przepisami systemy. Dowiedz się więcej o ich znaczeniu, czytając cały artykuł.

The Codest
Jakub Jakubowicz CTO & Współzałożyciel

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

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

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

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