V tomto návodu bych vám rád ukázal, jak nasadit ukázkovou aplikaci Rails pomocí služby Amazon Elastic Container Service (ECS).
Vytvoříme ji spuštěním kolejnice new sample-rails-app, a poté vygenerovat základní akci řadiče rails g kontrolér Welcome index a nastavení tras do kořenové cesty jako `kořenové to: welcome#index".
Naším cílem je, aby tato uvítací stránka byla nasazena pomocí systému ECS.
Vytvoření úložiště pomocí služby Amazon Elastic Container Registry (ECR)
Amazon ECR je registr kontejnerů. Budeme jej používat k ukládání obrazů našich aplikací a jejich stahování z něj, aby běžely na ECS.
Přejděte na svůj AWS panel, hledejte Elastický kontejner Registr a klikněte na Začněte. Zobrazí se následující obrazovka:
Vytvoříme soukromé úložiště a pojmenujeme ho sample-rails-app.
Úložiště tam je, ale je prázdné. Chceme, aby obsahoval obraz naší aplikace. To je další krok.
# vyhodí chybu, pokud byl soubor Gemfile změněn od okamžiku Gemfile.lock
RUN bundle config --global frozen 1
WORKDIR /app
COPY Gemfile Gemfile.lock ./
Spustit instalaci balíčku
COPY .
CMD ["rails", "server", "-b", "0.0.0.0"]
Pak bychom měli vytvořit obraz a odeslat jej do úložiště ECR.
Ještě předtím si předkompilujme aktiva pomocí příkazu `rails assets:precompile`.
Nyní přejděte do vytvořeného úložiště. V horní části obrazovky se zobrazí položka Zobrazení příkazů push s podrobnými informacemi o tom, jak to provést.
V mém případě (Linux) jej spouštím pomocí těchto pokynů AWS:
Vytvoření nástroje pro vyrovnávání zatížení aplikací
Chci, aby se vnější svět mohl připojit pouze k mému zařízení pro vyrovnávání zatížení aplikací. Ten bude předávat provoz kontejnerům, které běží uvnitř našeho clusteru ECS.
Přejít na Služby EC2 -> Vyrovnávání zátěže -> Vyrovnávače zatížení, klikněte Vytvoření nástroje pro vyrovnávání zatížení, vyberte Vyrovnávač zatížení aplikací a klikněte na Vytvořit tlačítko.
Nastavte jeho název na sample-rails-app-alb, použijte výchozí síť VPC a vyberte všechny její podsítě.
Zbývá nám Skupiny zabezpečení a Posluchači a směrování sekce.
Skupiny zabezpečení
Vytvoříme novou skupinu zabezpečení pro náš vyrovnávač zatížení. Funguje jako firewall; nastavíme pravidla pro příchozí a odchozí provoz. Chceme přijímat příchozí provoz http (port TCP 80) a povolit veškerý odchozí provoz.
Chcete-li to provést, klikněte na "Vytvoření nové skupiny zabezpečení" odkaz.
V části "Základní údaje", nastavte název a popis, ponechte výchozí VPC.
V mém případě - název: "sample-rails-app-alb-sg", popis: "http zvenčí, vše zevnitř"
Přidejte pravidlo příchozího příjmu s typem: HTTP a zdroj: Kdekoli-IPv4. Pravidla pro odchozí hovory ponechte v původním znění.
Klikněte na vytvořit skupinu zabezpečení, pak se vraťte na kartu, kde jste vytvářeli nástroj Application Load Balancer, obnovte skupiny zabezpečení a přidejte tu, kterou jsme právě vytvořili, a odstraňte výchozí.
Posluchači a směrování
V této části definujeme, kam má vyrovnávač zátěže předávat přenosy. Ponechte PosluchačProtokol a Přístav jako HTTP a 80, protože to je přesně to, co chceme, a klikněte na "Vytvoření cílové skupiny" odkaz.
Nastavte název na "sample-rails-app-alb-tg". Jedinou změnou je číslo portu. Budeme ho předávat na port 3000, protože to je port pro naši aplikaci Rails. Další krok ignorujte (Registrované cíle) a vytvořte cílovou skupinu.
Nyní se vraťte na kartu, kde jsme vytvářeli nástroj Vyrovnávání zatížení aplikací, obnovte cílovou skupinu a vyberte tu, kterou jsme právě vytvořili.
Vyrovnávač aplikačního zatížení máme připravený, nyní si pohrajeme s ECS.
Vytvoření clusteru ECS
Setkáte se s mnoha děsivými termíny - cluster, úkoly, definice úkolů, služby. Pro zjednodušení si cluster představte jako skupinu serverů (instancí EC2). Na každé z nich spouštíme úlohy, což je jen skupina společně běžících kontejnerů. Definice úloh popisuje, které kontejnery jsou v dané skupině a jaké prostředky jim chceme přidělit (paměť, cpu). Služby tyto úlohy hlídají, aby v našem clusteru vždy běžel správný počet zdravých úloh.
S tímto vědomím vytvořme náš cluster.
Přejděte na stránku ECS a klikněte na položku Klastry odkaz a Vytvořit cluster tlačítko. Zvolte možnost "EC2 + Linux Networking" jeden a klikněte Další krok.
Nastavte název clusteru na "sample-rails-app-cluster". Vyberte typ instance EC2, já jsem si vybral t2-micro, protože je k dispozici v rámci tarifu Free Tier. Počet instancí ponechte jako 1.
V části Sítě použijte výchozí síť VPC a vyberte všechny její podsítě. Klikněte na tlačítko create, chvíli počkejte a voilá, máme vytvořený nový cluster ECS.
Definice úkolu
Klikněte na Definice úkolů odkaz, pak Vytvoření nové definice úlohy tlačítko. Vyberte EC2 a klikněte na možnost Další krok. Aplikace, kterou budeme spouštět, je velmi jednoduchá, takže zde potřebujeme jen několik možností.
Sada Definice úkolu název na "sample-rails-app", pak přejděte přímo na Definice kontejnerů a klikněte na tlačítko "Přidat kontejner". Pojmenujte kontejner jako "sample-rails-app" a nastavte umístění obrázku ve formátu "repository-url/image:tag". Na nové kartě prohlížeče přejděte do ECR a zkopírujte URI obrázku. V mém případě to bylo: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".
Nastavte limit paměti na doporučených 300-500 MB. Nyní přichází na řadu to nejsložitější - mapování portů.
Naše aplikace běží v kontejneru na portu 3000. Jako port kontejneru tedy zadejte 3000. Jako port hostitele zadáme 0, což v podstatě znamená, že se vybere náhodný port. Naštěstí náš nástroj Application Load Balancer bude toto mapování portů znát a bude schopen správně směrovat provoz. Na této jediné instanci můžeme dokonce spustit více úloh.
Přidání proměnné prostředí RAILS_ENV a nastavte ji na výroba.
Nyní klikněte na Přidat přidat definici kontejneru a kliknout na Vytvořit dokončit nastavení Definice úlohy.
Služba
Máme náš cluster, vyrovnávač zátěže a definici úlohy. Nyní musíme tyto úlohy nějak spustit uvnitř našeho clusteru. To je úkolem služeb. Přejděte do nově vytvořeného clusteru, vyberte položku Služby a klikněte na kartu Vytvořit tlačítko.
Nastavte typ spuštění na EC2, přidejte název "sample-rails-app-service". Nastavte počet úloh na 1 a klikněte na tlačítko Další krok. Na této stránce vyberte přepínač Application Load Balancer a vyberte pro něj existující roli IAM. V části "Kontejner pro vyvažování zátěže" byste již měli mít zadaný správný kontejner "sample-rails-app:0:3000" a poté klikněte na tlačítko "Přidat k vyvažování zátěže".
Pro "Production listener port" vyberte 80:HTTP; jako název cílové skupiny použijte ten, který jsme vytvořili dříve - "sample-rails-app-alb-tg" a klikněte na tlačítko Další krok. Zanechte Automatické škálování možnosti, klikněte na Další krok a Vytvořit službu.
Aktualizace skupiny zabezpečení ECS
Můžete přejít na stránku vytvořeného clusteru a zkontrolovat. Úkoly karty, měla by být spuštěna jedna úloha. Služba ji spustila. Nyní přejděte na stránku služby EC2, klikněte na položku Load Balancers a podívejte se na podrobnosti našeho nástroje Application Load Balancer. Měli byste tam mít jeho název DNS. Zkopírujte jej a otevřete v prohlížeči. Měl by vás nasměrovat na naši aplikaci. Bohužel se nám zobrazí hlášení "504 časový limit brány" chyba.
Problém je ve skupině zabezpečení našeho clusteru. Její příchozí pravidla nepovolují provoz přicházející z vyrovnávače zátěže. Chcete-li to napravit, vraťte se na panel EC2 a klikněte na tlačítko Skupiny zabezpečení odkaz. Během procesu vytváření clusteru byla vytvořena nová skupina. Její název by měl začínat "EC2ContainerService-sample-rails-app-cluster". Klikněte na něj a upravte pravidla příchozích hovorů. Protože chceme povolit jakýkoli provoz z našeho VPC, přejděte na panel Amazon VPC a zkontrolujte, jaký je váš IPv4 CIDR VPC. Nastavte typ pravidla na "Veškerý provoz" a zdroj na IPv4 CIDR. Uložte toto pravidlo a zkuste načíst název DNS balanceru.