Selles õpetuses näitan teile, kuidas võtta kasutusele Railsi näidisrakendus, kasutades Amazon Elastic Container Service'i (ECS).
Loome selle, käivitades rööpad uus näidisrööpad-rakendus, seejärel genereeritakse põhiline kontrolleri tegevus rööbasteed g kontroller Tere tulemast indeks ja marsruutide määramine juurtepidi kui `juurtühi: welcome#index".
Meie eesmärk on näha seda tervituslehte ECSi abil kasutusele võetuna.
Luua repositoorium Amazon Elastic Container Registry (ECR) abil
Amazon ECR on konteinerite register. Me kasutame seda oma rakenduse kujutiste salvestamiseks ja tõmbame need sealt välja, et need ECS-is jookseksid.
Mine oma AWS paneel, otsi Elastne konteiner Register ja klõpsake Alusta. Näete allolevat ekraani:
Loome privaatse repositooriumi ja anname sellele nimeks sample-rails-app.
Hoidla on olemas, kuid see on tühi. Me tahame, et see sisaldaks meie rakenduse pilti. See on järgmine samm.
# vigu, kui Gemfile'i on muudetud alates Gemfile.lock'ist.
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"]
Seejärel peaksime looma kujutise ja lükkama selle ECR-i repositooriumi.
Enne seda kompileerime varad eelkompileerimisega `rails assets:precompile`.
Nüüd minge loodud repositooriumi. Ekraani ülaosas näete ekraani allosas Vaata push-käske nuppu üksikasjadega selle kohta, kuidas seda teha.
Minu puhul (Linux) käivitan seda nende AWS-i juhistega:
Veenduge, et teie kasutajal on lubatud seda toimingut teha. Lisasin oma kasutajale AmazonElasticContainerRegistryPowerUser poliitika, mis näeb välja selline:
Ma tahan, et välismaailmaga oleks võimalik ühendust luua ainult minu rakenduse koormuse tasakaalustaja (Application Load Balancer). See edastab liiklust konteineritele, mis töötavad meie ECS-i klastris.
Mine edasi EC2 teenused -> Koormuse tasakaalustamine -> Koormuse tasakaalustajad, klõpsake Koormuse tasakaalustaja loomine, valige Rakenduse koormuse tasakaalustaja ja klõpsake Loo nuppu.
Määra selle nimeks sample-rails-app-alb, kasutage oma vaikimisi VPC-d ja valige kõik selle alamvõrgud.
Meil on jäänud Turvarühmad ja Kuulajad ja marsruutimine sektsioonid.
Turvarühmad
Me loome meie koormuse tasakaalustaja jaoks uue turvarühma. See töötab nagu tulemüür; me kehtestame reeglid sissetulevale ja väljaminevale liiklusele. Me tahame aktsepteerida sissetulevat http-liiklust (TCP port 80) ja lubada kogu väljaminevat liiklust.
Selleks klõpsake nuppu "Uue turvarühma loomine" link.
Jaotises "Põhilised üksikasjad", määrake nimi ja kirjeldus, jätke vaikimisi VPC.
Minu puhul - nimi: "sample-rails-app-alb-sg", kirjeldus: "http väljastpoolt, kõik seestpoolt"
Lisa sissetuleva reegli Type: HTTP ja allikas: Anywhere-IPv4. Jäta väljaminevad reeglid nii, nagu nad on.
Klõpsake luua turvarühm, siis minge tagasi vahekaardile, kus te lootsite rakenduse koormuse tasakaalustaja, värskendage turvarühmi ja lisage see, mille me just lõime, eemaldage vaikimisi loodud.
Kuulajad ja marsruutimine
Selles jaotises määratleme, kuhu me tahame, et koormustasakaalustaja edastaks liiklust. Jäta KuulajaProtokoll ja Sadam kui HTTP ja 80, kuna see on täpselt see, mida me tahame, ja klõpsake "Sihtrühma loomine" link.
Määrake nimeks "sample-rails-app-alb-tg". Ainus muudatus on sadama number. Me anname selle edasi port 3000, kuna see on meie Rails rakenduse jaoks. Ignoreerige järgmist sammu (Registreeritud eesmärgid) ja luua sihtrühm.
Nüüd minge tagasi vahekaardile, kus me lõime rakenduse koormuse tasakaalustaja, värskendage sihtrühma ja valige see, mille me just lõime.
Meie rakenduse koormuse tasakaalustaja on valmis, nüüd mängime ECSiga.
ECS-klastri loomine
Seal on palju hirmuäratavaid termineid, mida te näete - klastrid, ülesanded, ülesannete määratlus, teenused. Et asi oleks lihtsam, mõtle klastrist kui serverite (EC2 instantside) grupist. Igaühel neist käivitame ülesandeid, mis on lihtsalt grupp konteinereid, mis töötavad koos. Ülesannete definitsioon kirjeldab, millised konteinerid on antud grupis ja milliseid ressursse me tahame neile anda (mälu, cpu). Teenused hoiavad neil ülesannetel silma peal, et meie klastris jookseks alati õige arv terveid ülesandeid.
Seda silmas pidades loome oma klastri.
Mine ECSi lehele ja klõpsa nupule Klastrid link ja Klastri loomine nuppu. Valige "EC2 + Linuxi võrgustik" üks ja klõpsake Järgmine samm.
Määrake klastri nimeks "sample-rails-app-cluster". Valige EC2 instantsi tüüp, mina võtsin t2-micro, kuna see on saadaval Free Tier paketi raames. Jäta instantside arvuks 1.
Kasutage võrguosas oma vaikimisi VPC-d ja valige kõik selle alamvõrgud. Vajuta Create, oota natuke ja voila, meil on uus ECS Cluster loodud.
Ülesande määratlus
Klõpsake nuppu Ülesannete määratlused link, siis Uue ülesande määratluse loomine nuppu. Valige EC2 valik ja klõpsake Järgmine samm. Rakendus, mida me käivitame, on väga lihtne, nii et meil on siin vaja ainult mõned valikud.
Komplekt Ülesande määratlus nimi "sample-rails-app", siis minge otse Konteineri määratlused sektsioonis ja klõpsake "Lisage konteiner". Konteineri nimi on "sample-rails-app" ja määrata pildi asukoht formaadis "repository-url/image:tag". Uues brauseri vahekaardis minge ECR-i, et kopeerida pildi URI. Minu puhul oli see: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".
Seadke oma mälupiiranguks soovitatav 300-500MiB. Nüüd kõige keerulisem asi - Port Mapping.
Meie rakendus töötab konteineri sees sadamas 3000. Seega pane 3000 konteineri porti. Me sisestame 0 kui host port, mis põhimõtteliselt tähendab, et ta valib juhusliku pordi. Õnneks teab meie rakenduse koormuse tasakaalustaja seda pordi kaardistamist ja suudab liiklust õigesti suunata. Me võime isegi mitu ülesannet sellel ühel instantsil käivitada.
Lisage keskkonnamuutuja RAILS_ENV ja seadistada see tootmine.
Nüüd klõpsa Lisa lisada meie konteineri määratlus ja klõpsata Loo et lõpetada ülesande määratluse seadistamine.
Teenus
Meil on meie klastri, koormuse tasakaalustaja ja ülesannete määratlus. Nüüd peame neid ülesandeid kuidagi meie klastri sees käivitama. See on teenuste ülesanne. Minge äsja loodud klastrisse, valige Teenused vahekaart ja klõpsa Loo nuppu.
Määrake käivitamise tüübiks EC2, lisage nimi "sample-rails-app-service". Määrake ülesannete arvuks 1 ja klõpsake Järgmine samm. Valige sellel lehel valikunupp Application Load Balancer ja valige selle jaoks olemasolev IAM-roll. "Container to load balance" sektsioonis peaks olema juba sisestatud õige konteiner "sample-rails-app:0:3000", seejärel klõpsake "Add to load balancer".
Valige "Tootmise kuulaja port" jaoks 80:HTTP; sihtrühma nimeks kasutage seda, mille me eelnevalt lõime - "sample-rails-app-alb-tg" ja klõpsake Järgmine samm. Jäta Automaatne skaleerimine valikud nagu nad on, klõpsake Järgmine samm ja Teenuse loomine.
ECSi turvarühma ajakohastamine
Saate minna loodud klastri lehele ja kontrollida Ülesanded vahekaardid, peaks olema üks ülesanne käimas. Teenus on selle käivitanud. Nüüd minge EC2 teenuse lehele, klõpsake Load Balancers ja vaadake meie Application Load Balancer'i andmeid. Sul peaks seal olema selle DNS nimi. Kopeeri see ja ava brauseris. See peaks suunama teid meie rakendusele. Kahjuks saame "504 gateway time-out" viga.
Probleem on meie klastri turvarühmas. Selle sissetulevad reeglid ei luba koormustasakaalustajalt sissetulevat liiklust. Selle parandamiseks minge tagasi EC2 paneelile ja klõpsake nuppu Turvarühmad link. On olemas uus rühm, mis loodi klastri loomise käigus. Selle nimi peaks algama sõnaga "EC2ContainerService-sample-rails-app-cluster". Klõpsake sellel ja redigeerige sissetulevaid reegleid. Kuna me tahame lubada mis tahes liiklust meie VPC-st, minge Amazon VPC-paneelile ja kontrollige, mis on teie VPC IPv4 CIDR. Määrake reegli tüübiks "Kogu liiklus" ja allikas IPv4 CIDR. Salvestage see reegel ja proovige laadida tasakaalustaja DNS-nime.