[DOCKER] [CircleCI von 0 herausfordern] AWS ECR / ECS verstehen

Hintergrund

Ich möchte einen Job in einem eigens entwickelten Unternehmen von unerfahrenen bekommen. Ich habe mich entschlossen, CircleCI zu studieren, um ein gutes Portfolio zu erstellen.

Der aktuelle Wissensstand ist die einfache Anwendungsentwicklung mit Ruby on Rails, die Versionsverwaltung mit git und die Bereitstellung mit heroku. Ich hoffe, dass dies für diejenigen hilfreich sein wird, die darüber nachdenken, CircleCI in Zukunft auf der gleichen Ebene wie ihr eigenes Memorandum auszuprobieren.

Endziele

AWS ECR / ECS verstehen. Versuchen Sie, die Anwendung manuell mit ECR und ECS bereitzustellen.

【Verwandter Artikel】 [CircleCI von 0 herausfordern] Lernen Sie die Grundlagen von CircleCI [CircleCI von 0 herausfordern] Erstellen Sie einen automatisierten Test (Rails6.0 / mysql8.0 / Rspec) [CircleCI von 0 herausfordern] AWS ECR / ECS verstehen [CircleCI von 0 herausfordern] Automatisch mit CircleCI / AWS (ECR / ECS) bereitstellen

Umgebung

ruby 2.6.6 rails 6.0 db: mysql 8.0 test: rspec

Inhaltsverzeichnis

  1. Was ist ECR?
  2. Was ist ECS?
  3. Stellen Sie ECR / ECS tatsächlich auf AWS bereit

1. Was ist ECR?

Über ECR

ECR ist eine Abkürzung für "Elastic Container Registry" und ein Container-Image-Management-System in AWS. Wenn Sie Docker bereits verwendet haben, kennen Sie wahrscheinlich Docker Hub, einen Cloud-Registrierungsdienst. Kurz gesagt, ECR ist die AWS-Version von Dokcer Hub.

ECR ist ein sehr nützlicher Dienst bei der Bereitstellung mit Containern unter AWS. Natürlich können Sie es mit Docker Hub betreiben, aber wenn Sie AWS in einer Produktionsumgebung verwenden, ist die Verwaltung mit ECR einfacher. ECR ist ein von Amazon verwalteter Dienst, dessen Sicherheit garantiert ist.

Es gibt keine neuen Konzepte oder Begriffe für ECR. Wenn Sie Docker Hub verwendet haben, werden Sie dies sofort verstehen.

2. Was ist ECS?

Über ECS

ECS ist eine Abkürzung für "Elastic Container Service" und ein System zur Ausführung / Verwaltung von Containern in AWS. Tatsächlich ist die oben erwähnte ECR auch eine Art ECS-Dienst. ECS ist ein System, mit dem Sie Container in AWS einfach starten, stoppen und verwalten können.

Wenn Sie Container zum Bereitstellen Ihrer Anwendung für die AWS-Produktion verwenden möchten, ist ECS ein Muss. Es gibt jedoch einige einzigartige Konzepte und Begriffe, mit denen man nur schwer anfangen kann. Lassen Sie uns zunächst die für ECS einzigartigen Begriffe und Konzepte verstehen.

Informationen zu ECS-Konzepten und -Begriffen

Cluster

Ein Amazon ECS-Cluster ist eine logische Gruppe von Aufgaben oder Diensten. Wenn Sie EC2 zum Ausführen von Aufgaben oder Diensten verwenden, ist der Cluster auch eine Gruppierung von Containerinstanzen. Wenn Sie einen Kapazitätsanbieter verwenden, ist der Cluster auch eine logische Gruppe von Kapazitätsanbietern.

AWS-Beamter sagt wie oben. ECS verwendet einen EC2-Server zum Ausführen von Containern, bei denen es sich um ein einzelnes Projekt oder mehrere EC2-Server für ein Projekt handeln kann. Ein Cluster ist eine Reihe von EC2 für dieses Projekt.

Bedienung

Mit dem Amazon ECS-Dienst können Sie eine bestimmte Anzahl von Instanzen einer Aufgabendefinition gleichzeitig in einem Amazon ECS-Cluster ausführen und verwalten. Wenn eine Aufgabe aus irgendeinem Grund fehlschlägt oder stoppt, startet der Amazon ECS Service Scheduler eine andere Instanz der Aufgabendefinition, um sie zu ersetzen und den Dienst so viele Aufgaben wie nötig zu behalten. Zusätzlich zur Aufrechterhaltung der erforderlichen Anzahl von Aufgaben im Dienst können Sie den Dienst optional hinter einem Load Balancer ausführen. Der Load Balancer verteilt den Datenverkehr auf die mit dem Dienst verbundenen Aufgaben.

In AWS Official ist es wie oben geschrieben. Das Konzept eines Dienstes ist sehr verwirrend, aber die einfache Antwort besteht darin, den Container mit dem Load Balancer zu verbinden und zu verwalten, welche Aufgabendefinitionen auf den Container angewendet werden. In Bezug auf Dienste denke ich, dass es einfacher zu verstehen ist, wenn Sie mit den Einstellungen fortfahren, während Sie tatsächlich Ihre Hände bewegen.

Aufgabe

Eine Aufgabe ist eine Sammlung verwandter Container. Es ist etwas schwer zu verstehen, deshalb erkläre ich es anhand eines konkreten Beispiels. Es gibt häufig zwei Containerkonfigurationen für Rails-Anwendungen: Webserver + Anwendungsserver. Wenn jedoch einer der Container fehlt, wird die Anwendung nicht gestartet. Container, die sich auf diese Weise auf den Anwendungsstart beziehen, werden in AWS als Aufgaben bezeichnet. In AWS muss eine Aufgabe festgelegt werden, um einen Container zu starten, der als Aufgabendefinition bezeichnet wird.


## 3. Stellen Sie ECR / ECS tatsächlich auf AWS bereit * Es wird davon ausgegangen, dass AWS VPC, ELB, RDS festgelegt und Dockerfile in der Entwicklungsumgebung erstellt wurden. In Bezug auf AWS [[AWS von 0 herausfordern] Rails-Apps mithilfe von EC2 und VPC Teil1 für AWS bereitstellen](https://qiita.com/shu1124/items/4a0337f3d9fa9227a705) In Bezug auf Docker [[Docker von 0 herausfordern] Erstellen Sie mit Docker eine Entwicklungsumgebung für Nginx, Puma, Rails6.0, MySQL](https://qiita.com/shu1124/items/ba370afcdfc99145e1dc) Wenn Sie sich bei AWS oder Docker nicht sicher sind, lesen Sie bitte.

Dateiorganisation

Dieses Mal werden wir eine vorhandene Anwendung verwenden. Die Dateistruktur ist wie folgt. Desktop/ ├ webapp/     ├ containers       └ nginx         └ Dockerfile         └ nginx.conf     ├ enviroment       └ db.env     ├ Dockerfile     ├ docker-compose.yml     ├ Gemfile     ├ Gemfile.lock

Erstellen Sie ein Repository mit ECR

Wenn Sie im AWS-Menü nach ECR suchen, finden Sie ECR (* In ECS befindet sich tatsächlich ein ECR-Element). Klicken Sie dann auf Repository erstellen. Anschließend wird der folgende Bildschirm angezeigt. Geben Sie daher einen beliebigen Namen für den Repository-Namen ein. Da das Repository für Dockerfile erforderlich ist, erstellen wir zwei Typen, einen für Nginx und einen für App. Es ist für die Datenbank nicht erforderlich, da sie RDS verwendet. スクリーンショット 2020-10-26 14.20.46.png

Als nächstes wird das erstellte Repository im ECR-Menü angezeigt. Wählen Sie es aus und drücken Sie auf die Push-Befehlsanzeige oben rechts. Wie unten gezeigt, werden vier Befehle angezeigt. Kopieren Sie sie und führen Sie sie im Terminal aus. スクリーンショット 2020-10-26 14.22.47.png

Terminal


(Für Nginx)
docker build -t nginx -f ./container/nginx/Dockerfile .
(Für App)
docker build -t app .

Terminal


$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

Damit sind die ECR-Einstellungen abgeschlossen. Der Anzeigebefehl push command erstellt das Bild und schiebt das Bild an die ECR. Mit anderen Worten, das lokale Docker-Image wird jetzt in AWS gespeichert.

Erstellen Sie einen Cluster mit ECS

Clustererstellung

Wählen Sie dann den ECS-Cluster aus dem Menü links aus und klicken Sie auf Cluster erstellen. Dann wird der folgende Bildschirm angezeigt. スクリーンショット 2020-10-26 14.36.02.png Wählen Sie hier "EC2 Linux + Networking". Als nächstes kommen die Konfigurationsdetails. (* "AWS Fargate" wird später beschrieben) スクリーンショット 2020-10-26 14.38.24.png

Ich werde nur den Teil erklären, der in den Einstellungen manipuliert werden soll.

Die anderen nicht erwähnten Teile sind standardmäßig in Ordnung. Dies vervollständigt den Cluster.

Aufgabenerstellung

Wählen Sie links im Menü eine Aufgabendefinition aus. Ein Bildschirm zur Auswahl der Kompatibilität des Boot-Typs wird angezeigt. Wählen Sie daher EC2 (* Fargate wird später beschrieben). Dann erscheint der folgende Einstellungsbildschirm. スクリーンショット 2020-10-26 14.51.25.png Dies erklärt auch nur das Einstellen der Einstellungen.

スクリーンショット 2020-10-26 15.11.51.png

Fügen Sie nun zwei Container hinzu und klicken Sie auf Aufgabendefinition erstellen. Damit ist die Aufgabe abgeschlossen.

Service hinzufügen

Wählen Sie den ECS-Cluster im Menü links aus und klicken Sie auf den soeben erstellten Cluster. Der Detailbildschirm wird angezeigt und das Menü wird unten angezeigt. Wählen Sie einen Dienst aus diesem Menü und klicken Sie auf die Schaltfläche Erstellen. スクリーンショット 2020-10-26 15.25.49.png

--Wählen Sie EC2 als Starttyp --Wählen Sie für die Aufgabendefinition die zuvor erstellte Aufgabe aus.

Drücken Sie nach Abschluss der obigen Eingabe den nächsten Schritt. Dann erscheint der folgende Bildschirm. スクリーンショット 2020-10-26 15.28.01.png

--Wählen Sie "Application Load Balancer" für den Lastausgleich. Anschließend wird ein Ort zur Auswahl des Load Balancer-Namens angezeigt. Wählen Sie also den erstellten Load Balancer aus

Drücken Sie nach Abschluss der obigen Eingabe den nächsten Schritt. Die Einstellungen werden danach fortgesetzt, aber die Standardeinstellungen sind in Ordnung. Damit ist der Service abgeschlossen.

ECS mit ssh verbinden ・ Zugriff mit Browser

Jetzt können Sie loslegen. Stellen Sie mit ssh eine Verbindung zu ECS her und prüfen Sie, ob ein Container vorhanden ist. Wählen Sie im ECS-Menü den Cluster aus, den Sie aus dem Cluster erstellt haben, und klicken Sie im Menü unten auf die ECS-Instanz. Da es ein Element namens EC2-Instanz gibt, können Sie das über ECS erstellte EC2 von dort aus überprüfen. Kopieren Sie die private EC2-IP und geben Sie Folgendes in das Terminal ein.

Terminal


$ ssh -i [Vom Schlüsselpaar] ec2-user@[Öffentliche IP]
(Bei Erfolg wird es so angezeigt)
ast login: Sat Oct 24 10:28:34 2020 from 56.97.30.125.dy.iij4u.or.jp

   __|  __|  __|
   _|  (   \__ \   Amazon Linux 2 (ECS Optimized)
 ____|\___|____/

For documentation, visit http://aws.amazon.com/documentation/ecs

Danach überprüfen wir den Container und das Image mit "Docker ps" und [Docker-Image]. Sie werden wahrscheinlich sehen, was Sie bisher erstellt haben. Lassen Sie uns zum Schluss in den Container gehen, eine Datenbank erstellen und migrieren.

Terminal


$ docker exec -it [Container ID] bash
$ rails db:create
$ rails db:migrate

Sie sollten nun in der Lage sein, Ihre Anwendung in Ihrem Browser zu sehen. Um mit einem Browser zu überprüfen, wählen Sie Load Balancer aus dem EC2-Menü und geben Sie den DNS-Namen des Load Balancers ein, der beim Erstellen des Dienstes im Browser angegeben wurde.

das ist alles.



Es ist eine Überprüfung, aber der allgemeine Ablauf ist wie folgt Docker-Image in ECR registrieren → Cluster erstellen (größtes Feld) → Aufgabe definieren (Containerbeziehung definieren) → Dienst erstellen (Cluster und Aufgabe verbinden, Load Balancer und Containereinstellungen verbinden) → Abschließen

Im nächsten Artikel werden wir ECS und CircleCI verbinden, um tatsächlich eine automatisierte Bereitstellung zu erstellen.

Zusammenfassung / Eindruck

Ich hatte es schwer, weil ECS zu einzigartig war, aber als ich es tatsächlich handhabte, fand ich es praktisch. Da Kenntnisse in AWS, Docker und CircleCI erforderlich sind, möchte ich die automatische Bereitstellung einrichten können, während ich auf die Artikel verweise, die ich bisher geschrieben habe.

Referenz

[Buch] "Einführung in die CircleCI-Praxis ──Beide Entwicklungsgeschwindigkeit und -qualität, hervorgerufen durch CI / CD Masato Urai (Autor), Tomoya Otake (Autor), Hirokuni Kim (Autor)"

【qiita】 "Ich habe gerade CircleCI gestartet und es daher leicht verständlich zusammengefasst" "[Circle CI] Einführung in die Rails-App (Informationen zum Einstellen der Datei)" "Auch Anfänger können das! Containerbereitstellung der Rails-Anwendung mit ECS x ECR x CircleCI

[Andere Seiten] "Automatische Bereitstellung in ECR / ECS mithilfe von CircleCI Orbs"

Recommended Posts

[CircleCI von 0 herausfordern] AWS ECR / ECS verstehen
[Herausforderung CircleCI von 0] Lernen Sie die Grundlagen von CircleCI
[Challenge CircleCI von 0] Erstellen Sie einen automatisierten Test (Rails6.0, mysql8.0, Rspec)