Šioje pamokoje norėčiau parodyti, kaip įdiegti pavyzdinę "Rails" programą naudojant "Amazon Elastic Container Service" (ECS).
Sukurkime jį paleisdami bėgiai new sample-rails-app, tada sukuriamas pagrindinis valdiklio veiksmas bėgiai g valdiklis Welcome index ir nustatant maršrutus į šakninį kelią kaip ”šaknis į: welcome#index".
Siekiame, kad šis sveikinimo puslapis būtų įdiegtas naudojant ECS.
"Amazon" ECR yra konteinerių registras. Jį naudosime savo programų atvaizdams saugoti ir iš jo traukti, kad jie veiktų ECS.
Eikite į savo AWS skydelis, ieškokite Elastinga talpykla Registras ir spustelėkite Pradėkite. Pamatysite toliau pateiktą ekraną:
Sukursime privačią saugyklą ir pavadinsime ją sample-rails-app.
Saugykla yra, bet ji tuščia. Norime, kad joje būtų mūsų programos atvaizdas. Tai kitas žingsnis.
# mesti klaidas, jei Gemfile buvo pakeistas nuo Gemfile.lock
RUN bundle config --global frozen 1
WORKDIR /app
COPY Gemfile Gemfile.lock ./
Paleisti paketą įdiegti
COPY . .
CMD ["rails", "server", "-b", "0.0.0.0.0"]
Tuomet turėtume sukurti atvaizdą ir perkelti jį į ECR saugyklą.
Prieš tai iš anksto sukurkime turtą naudodami `rails assets:precompile`.
Dabar eikite į sukurtą saugyklą. Ekrano viršuje pamatysite Peržiūrėti stūmimo komandas mygtuką, kuriame pateikiama išsami informacija, kaip tai padaryti.
Mano atveju (Linux) paleidžiu jį su šiomis AWS instrukcijomis:
Įsitikinkite, kad naudotojui leidžiama atlikti šią operaciją. Savo naudotojui pridėjau "AmazonElasticContainerRegistryPowerUser" politiką, kuri atrodo taip:
Noriu, kad išorinis pasaulis galėtų prisijungti tik prie mano taikomųjų programų apkrovos balansavimo įrenginio. Jis perduos srautą konteineriams, kurie veikia mūsų ECS klasterio viduje.
Eikite į EC2 paslaugos -> Apkrovos balansavimas -> Apkrovos balansavimo įrenginiai, spustelėkite Sukurti apkrovos balansavimo įrenginį, pasirinkite Paraiškų apkrovos balansavimo įrenginys ir spustelėkite Sukurti mygtuką.
Nustatykite jo pavadinimą į sample-rails-app-alb, naudokite numatytąjį VPC ir pasirinkite visus jo potinklius.
Mums liko Saugumo grupės ir Klausytojai ir maršruto parinkimas skyriai.
Saugumo grupės
Sukursime naują apkrovos balansavimo įrenginio saugumo grupę. Ji veikia kaip ugniasienė; nustatysime įeinančio ir išeinančio srauto taisykles. Norime priimti įeinantį http srautą (TCP 80 prievadas) ir leisti visą išeinantį srautą.
Norėdami tai padaryti, spustelėkite “Sukurti naują saugumo grupę” nuoroda.
Skyriuje “Pagrindinė informacija”, nustatykite pavadinimą ir aprašymą, palikite numatytąjį VPC.
Mano atveju - pavadinimas: “pavyzdys-rails-app-alb-sg”, aprašymas: “http iš išorės, visi iš vidaus”
Pridėkite įeinančią taisyklę, kurios tipas: HTTP ir šaltinis: "Anywhere-IPv4. Palikite išeinančias taisykles tokias, kokios jos yra.
Spustelėkite sukurti saugumo grupę, tada grįžkite į skirtuką, kuriame kūrėte taikomųjų programų apkrovos balansavimo įrenginį, atnaujinkite saugumo grupes ir pridėkite tą, kurią ką tik sukūrėme, pašalinkite numatytąją.
Klausytojai ir maršruto parinkimas
Šiame skirsnyje nustatysime, kur norime, kad apkrovos balansavimo įrenginys perduotų srautą. Palikite KlausytojasProtokolas ir Uostas kaip HTTP ir 80, nes būtent to norime, ir spustelėkite “Sukurti tikslinę grupę” nuoroda.
Nustatykite pavadinimą “sample-rails-app-alb-tg”. Pakeistas tik uosto numeris. Perduosime jį prievadui 3000, nes jis skirtas mūsų "Rails" programėlei. Nekreipkite dėmesio į kitą žingsnį (Registruoti tikslai) ir sukurkite tikslinę grupę.
Dabar grįžkite į skirtuką, kuriame kūrėme taikomųjų programų apkrovos balansavimo įrenginį, atnaujinkite tikslinę grupę ir pasirinkite tą, kurią ką tik sukūrėme.
Paruošėme savo programų apkrovos balansavimo įrenginį, dabar pasidarbuokime su ECS.
ECS klasterio kūrimas
Pamatysite daug bauginančių terminų - klasteris, užduotys, užduočių apibrėžimas, paslaugos. Kad būtų paprasčiau, galvokite apie klasterį kaip apie serverių (EC2 egzempliorių) grupę. Kiekviename iš jų paleidžiame užduotis, kurios yra tiesiog kartu veikiančių konteinerių grupė. Užduoties apibrėžtyje aprašoma, kurie konteineriai yra tam tikroje grupėje ir kokius išteklius norime jiems suteikti (atmintį, procesorių). Tarnybos stebi šias užduotis, kad įsitikintų, jog mūsų klasteryje visada veikia tinkamas sveikų užduočių skaičius.
Atsižvelgdami į tai, sukurkime savo klasterį.
Eikite į ECS puslapį ir spustelėkite Klasteriai nuorodą ir Sukurti klasterį mygtuką. Pasirinkite “EC2 + "Linux" tinklai” vieną ir spustelėkite Kitas žingsnis.
Nustatykite klasterio pavadinimą “sample-rails-app-cluster”. Pasirinkite EC2 egzemplioriaus tipą, aš pasirinkau "t2-micro", nes jis yra nemokamos pakopos plane. Instancijų skaičių palikite 1.
Skyriuje "Tinklas" naudokite numatytąjį VPC ir pasirinkite visus jo potinklius. Spustelėkite sukurti, šiek tiek palaukite ir vualia, sukurtas naujas ECS klasteris.
Užduoties apibrėžtis
Spustelėkite Užduočių apibrėžtys nuorodą, tada Sukurti naują užduoties apibrėžtį mygtuką. Pasirinkite EC2 parinktį ir spustelėkite Kitas žingsnis. Programa, kurią ketiname paleisti, yra labai paprasta, todėl mums reikia tik kelių parinkčių.
Nustatyti Užduoties apibrėžtis pavadinimą į “sample-rails-app”, tada eikite tiesiai į Konteinerių apibrėžtys skyrių ir spustelėkite “Pridėti konteinerį”. Pavadinkite konteinerį kaip “sample-rails-app” ir nustatykite vaizdo vietą formatu “repozitorija-url/image:tag”. Naujame naršyklės skirtuke eikite į ECR ir nukopijuokite vaizdo URI. Mano atveju jis buvo: “212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest”.
Nustatykite rekomenduojamą 300-500 MB atminties ribą. Dabar pats sudėtingiausias dalykas - prievadų atvaizdavimas.
Mūsų programa paleidžiama konteinerio viduje 3000 prievado prieigoje. Taigi kaip konteinerio prievadą įrašykite 3000. Kaip prievadą įvesime 0, o tai iš esmės reiškia, kad bus pasirinktas atsitiktinis prievadas. Laimei, mūsų taikomųjų programų apkrovos balansavimo įrenginys žinos šį prievadų atvaizdavimą ir galės teisingai nukreipti srautą. Šioje vienoje instancijoje galime vykdyti net kelias užduotis.
Pridėkite aplinkos kintamąjį RAILS_ENV ir nustatykite jį į gamyba.
Dabar spustelėkite Pridėti pridėti mūsų konteinerio apibrėžtį ir spustelėkite Sukurti užbaigti užduoties apibrėžimo sąranką.
Paslauga
Turime klasterį, apkrovos balansavimo įrenginį ir užduoties apibrėžtį. Dabar turime kaip nors paleisti šias užduotis savo klasteryje. Tai yra paslaugų užduotis. Eikite į naujai sukurtą klasterį, pasirinkite Paslaugos skirtuką ir spustelėkite Sukurti mygtuką.
Nustatykite paleidimo tipą EC2, pridėkite pavadinimą “pavyzdys-rails-app-service”. Nustatykite užduočių skaičių 1 ir spustelėkite Kitas žingsnis. Šiame puslapyje pasirinkite radijo mygtuką Application Load Balancer ir pasirinkite esamą IAM vaidmenį. Skyriuje “Container to load balancer” (Konteineris apkrovai balansuoti) jau turėjote įvesti teisingą konteinerį “sample-rails-app:0:3000”, tada spustelėkite “Add to load balancer” (Pridėti prie apkrovos balansavimo įrenginio).”
Kaip “Production listener port” pasirinkite 80:HTTP; kaip tikslinės grupės pavadinimą naudokite tą, kurį sukūrėme anksčiau - “sample-rails-app-alb-tg” ir spustelėkite Kitas žingsnis. Palikite Automatinis mastelio keitimas parinktis, spustelėkite Kitas žingsnis ir Sukurti paslaugą.
Atnaujinti ECS saugumo grupę
Galite pereiti į sukurto klasterio puslapį ir patikrinti Užduotys skirtukai, turėtų būti vykdoma viena užduotis. Paslauga ją paleido. Dabar eikite į EC2 paslaugos puslapį, spustelėkite apkrovos balansavimo įrenginius ir peržiūrėkite mūsų taikomųjų programų apkrovos balansavimo įrenginio informaciją. Ten turėtumėte turėti jo DNS pavadinimą. Nukopijuokite jį ir atidarykite naršyklėje. Jis turėtų nukreipti jus į mūsų programą. Deja, gauname “504 šliuzo laiko pertrauka” klaida.
Problema yra mūsų klasterio saugumo grupėje. Jos įeinančios taisyklės neleidžia srauto, gaunamo iš apkrovos balansavimo įrenginio. Norėdami ją ištaisyti, grįžkite į EC2 skydelį ir spustelėkite Saugumo grupės nuoroda. Yra nauja grupė, sukurta klasterio kūrimo proceso metu. Jos pavadinimas turėtų prasidėti “"EC2ContainerService-sample-rails-app-cluster”. Spustelėkite jį ir redaguokite įeinančias taisykles. Kadangi norime leisti bet kokį srautą iš mūsų VPC, eikite į “Amazon" VPC skydelį ir patikrinkite, koks yra jūsų VPC IPv4 CIDR. Nustatykite taisyklės tipą "Visas eismas”, o šaltinis - IPv4 CIDR. Išsaugokite šią taisyklę ir pabandykite įkelti balansavimo įrenginio DNS pavadinimą.