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.
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
ruby 2.6.6 rails 6.0 db: mysql 8.0 test: rspec
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.
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.
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.
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.
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.
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
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.
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.
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.
Wählen Sie dann den ECS-Cluster aus dem Menü links aus und klicken Sie auf Cluster erstellen. Dann wird der folgende Bildschirm angezeigt. Wählen Sie hier "EC2 Linux + Networking". Als nächstes kommen die Konfigurationsdetails. (* "AWS Fargate" wird später beschrieben)
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.
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. Dies erklärt auch nur das Einstellen der Einstellungen.
Fügen Sie nun zwei Container hinzu und klicken Sie auf Aufgabendefinition erstellen. Damit ist die Aufgabe abgeschlossen.
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.
--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.
--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.
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.
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.
[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"