Rails-sovelluksen käyttöönotto Amazon ECS:n avulla
Marcin Doliwa
Software Engineer
Tässä opetusohjelmassa haluan näyttää, miten esimerkin Rails-sovellus otetaan käyttöön Amazon Elastic Container Service (ECS) -palvelun avulla.
Luodaan se ajamalla rails new sample-rails-app, minkä jälkeen luodaan ohjaimen perustoiminto kiskot g ohjain Tervetuloa indeksi ja asettamalla reitit juuripolulle `root to: welcome#index'.
Tavoitteenamme on, että tämä tervetulosivu otetaan käyttöön ECS:n avulla.
Luo arkisto Amazon Elastic Container Registry (ECR) -palvelun avulla.
Amazon ECR on konttirekisteri. Käytämme sitä sovelluksemme kuvien tallentamiseen ja vedämme ne sieltä, jotta ne toimivat ECS:ssä.
Mene omaan AWS-paneeli, etsi Elastinen säiliö Rekisteri ja klikkaa Aloita. Näet alla olevan näytön:
Luomme yksityisen arkiston ja nimeämme sen nimellä sample-rails-app.
Arkisto on olemassa, mutta se on tyhjä. Haluamme sen sisältävän sovelluksemme kuvan. Tämä on seuraava vaihe.
# heittää virheitä, jos Gemfile-tiedostoa on muutettu Gemfile.lockin jälkeen.
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"]
Sitten meidän pitäisi rakentaa kuva ja työntää se ECR-tietovarastoon.
Ennen sitä, käännetään omaisuuserät valmiiksi komennolla `rails assets:precompile`.
Siirry nyt luotuun arkistoon. Näytön yläreunassa on näkymä Näytä push-komennot painiketta, jossa on lisätietoja siitä, miten tämä tehdään.
Omassa tapauksessani (Linux) käytän näitä AWS:n ohjeita:
Haluan, että ulkomaailma voi muodostaa yhteyden vain Application Load Balanceriin. Se välittää liikennettä ECS-klusterissamme toimiviin kontteihin.
Siirry osoitteeseen EC2-palvelut -> Kuormituksen tasapainottaminen -> Kuormituksen tasaajat, klikkaa Luo kuorman tasapainottaja, valitse Sovelluksen kuormituksen tasapainottaja ja napsauta Luo nappi.
Aseta sen nimeksi sample-rails-app-alb, käytä oletus-VPC:täsi ja valitse kaikki sen aliverkot.
Jäljelle jäävät Turvallisuusryhmät ja Kuuntelijat ja reititys osastot.
Turvallisuusryhmät
Luomme uuden suojausryhmän kuormantasaajallemme. Se toimii kuin palomuuri; asetamme säännöt saapuvalle ja lähtevälle liikenteelle. Haluamme hyväksyä saapuvan http-liikenteen (TCP-portti 80) ja sallia kaiken lähtevän liikenteen.
Tee tämä napsauttamalla "Luo uusi suojausryhmä" linkki.
Jaksossa "Perustiedot", aseta nimi ja kuvaus, jätä oletusarvoinen VPC.
Minun tapauksessani - nimi: "sample-rails-app-alb-sg", kuvaus: "http ulkopuolelta, kaikki sisäpuolelta"
Lisää saapuvan säännön tyyppi: HTTP ja Lähde: Anywhere-IPv4. Jätä lähtevät säännöt ennalleen.
Klikkaa luo suojausryhmä, palaa sitten välilehdelle, jossa luot Application Load Balancerin, päivitä suojausryhmät ja lisää juuri luomaamme suojausryhmää ja poista oletusryhmä.
Kuuntelijat ja reititys
Tässä osiossa määritetään, mihin haluamme kuormantasaajan ohjaavan liikennettä. Jätä KuuntelijaPöytäkirja ja Satama HTTP:ksi ja 80:ksi, koska haluamme juuri tämän, ja klikkaa "Luo kohderyhmä" linkki.
Aseta nimeksi "sample-rails-app-alb-tg". Ainoa muutos on portin numero. Me annamme sen portille 3000, koska se on Rails-sovelluksemme portti. Jätä seuraava vaihe huomiotta (Rekisteröidyt kohteet) ja luo kohderyhmä.
Mene nyt takaisin välilehdelle, jossa olimme luomassa Application Load Balanceria, päivitä kohderyhmä ja valitse juuri luomamme kohderyhmä.
Application Load Balancer on valmis, nyt pelataan ECS:n kanssa.
ECS-klusterin luominen
Tulet näkemään paljon pelottavia termejä - klusteri, tehtävät, tehtävien määrittely, palvelut. Yksinkertaistaaksesi asiaa ajattele klusteria palvelinryhmänä (EC2-instansseina). Jokaisella niistä ajetaan tehtäviä, jotka ovat vain ryhmä kontteja, jotka toimivat yhdessä. Tehtävien määrittelyssä kuvataan, mitkä kontit kuuluvat tiettyyn ryhmään ja mitä resursseja haluamme niille antaa (muistia, suorittimia). Palvelut pitävät silmällä näitä tehtäviä varmistaakseen, että klusterissamme on aina oikea määrä terveitä tehtäviä käynnissä.
Kun tämä on mielessä, luodaan klusterimme.
Siirry ECS-sivulle ja napsauta painiketta Klusterit linkki ja Luo klusteri nappi. Valitse "EC2 + Linux-verkko" yksi ja klikkaa Seuraava askel.
Aseta klusterin nimeksi "sample-rails-app-cluster". Valitse EC2-instanssityyppi, minä valitsin t2-micro-instanssin, koska se on saatavilla Free Tier -paketin sisällä. Jätä instanssien lukumääräksi 1.
Käytä verkko-osassa oletusarvoista VPC:täsi ja valitse kaikki sen aliverkot. Napsauta create, odota hetki ja voila, uusi ECS-klusteri on luotu.
Tehtävän määritelmä
Napsauta Tehtävän määritelmät linkki, sitten Luo uusi tehtävämäärittely nappi. Valitse EC2 ja napsauta Seuraava askel. Käyttämämme sovellus on hyvin yksinkertainen, joten tarvitsemme vain muutamia vaihtoehtoja.
Aseta Tehtävän määritelmä nimeksi "sample-rails-app", siirry sitten suoraan Säiliön määritelmät ja klikkaa "Lisää säiliö". Nimeä säiliö nimellä "sample-rails-app", ja aseta kuvan sijainti muodossa "repository-url/image:tag". Siirry uudessa selaimen välilehdessä ECR:ään kopioidaksesi kuvan URI:n. Minun tapauksessani se oli: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".
Aseta muistiraja suositeltuun 300-500MiB:iin. Nyt kaikkein hankalin asia - porttikartoitus.
Sovelluksemme toimii kontin sisällä portissa 3000. Laita siis 3000 kontin portiksi. Kirjoitamme isäntäportiksi 0, mikä tarkoittaa periaatteessa sitä, että se valitsee satunnaisen portin. Onneksi Application Load Balancer tietää tämän porttikuvauksen ja pystyy ohjaamaan liikenteen oikein. Voimme jopa suorittaa useita tehtäviä tässä yksittäisessä instanssissa.
Lisää ympäristömuuttuja RAILS_ENV ja aseta sen arvoksi tuotanto.
Klikkaa nyt Lisää lisätäksesi säiliömäärittelymme ja napsauta Luo päättääksesi Task Definition -asetukset.
Palvelu
Meillä on klusteri, kuorman tasapainottaja ja tehtävämäärittely. Nyt meidän on jotenkin suoritettava nämä tehtävät klusterissamme. Tämä on palveluiden tehtävä. Siirry äskettäin luotuun klusteriin, valitse Palvelut välilehteä ja napsauta Luo nappi.
Aseta käynnistystyypiksi EC2, lisää nimi "sample-rails-app-service". Aseta tehtävien lukumääräksi 1 ja napsauta Seuraava askel. Valitse tällä sivulla valintapainike Application Load Balancer ja valitse sille olemassa oleva IAM-rooli. "Container to load balancer" -kohtaan sinun pitäisi olla jo syöttänyt oikea kontti "sample-rails-app:0:3000" ja napsauta sitten "Add to load balancer".
Valitse "Tuotannon kuuntelijan portiksi" 80:HTTP; käytä kohderyhmän nimeksi aiemmin luotua nimeä -"sample-rails-app-alb-tg" ja klikkaa Seuraava askel. Jätä Automaattinen skaalaus vaihtoehdot sellaisina kuin ne ovat, napsauta Seuraava askel ja Luo palvelu.
Päivitä ECS Security Group -ryhmä
Voit siirtyä luodun klusterin sivulle ja tarkistaa kohdan Tehtävät välilehdillä pitäisi olla yksi tehtävä käynnissä. Palvelu on käynnistänyt sen. Siirry nyt EC2-palvelusivulle, valitse Load Balancers ja katso Application Load Balancerin tiedot. Siellä pitäisi olla sen DNS-nimi. Kopioi se ja avaa selaimessa. Sen pitäisi ohjata sinut sovellukseemme. Valitettavasti saamme näkyviin "504 yhdyskäytävän aikakatkaisu" virhe.
Ongelma on klusterimme turvallisuusryhmässä. Sen saapuvat säännöt eivät salli kuormantasaajasta tulevaa liikennettä. Korjaa se palaamalla EC2-paneeliin ja napsauttamalla kohtaa Turvallisuusryhmät linkki. Uusi ryhmä luotiin klusterin luomisprosessin aikana. Sen nimen pitäisi alkaa kirjaimella "EC2ContainerService-sample-rails-sovellusklusteri". Napsauta sitä ja muokkaa saapuvia sääntöjä. Koska haluamme sallia kaiken liikenteen VPC:stämme, siirry Amazon VPC -paneeliin ja tarkista, mikä on VPC:n IPv4 CIDR. Aseta sääntötyypiksi "Kaikki liikenne" ja lähde IPv4 CIDR. Tallenna tämä sääntö ja yritä ladata tasapainottajan DNS-nimi.