[DOCKER] [AWS] So stellen Sie eine mit Rails 6 erstellte Webanwendung mithilfe von CircleCI (1) -Vorbereitung automatisch für ECR / ECS bereit [Containerbereitstellung]

Es ist uns gelungen, die von uns mithilfe von CircleCI erstellte Rails-Anwendung in Containern bereitzustellen. Daher werde ich sie hier als Memorandum schreiben. (Sobald die Readme-Datei usw. fertig ist, werden wir die eigentliche Anwendung in einem anderen Artikel vorstellen.)

Außerdem verwende ich derzeit Windows 10. Wenn Sie ein Mac sind, ersetzen Sie ihn bitte nach Bedarf. Ich denke jedoch, dass die anderen Dinge gleich sind, außer dass die Installationsmethode von aws-ecs-cli unterschiedlich ist. (Die Installation mit Windows dauerte etwas.)

Da die Sprache der AWS-Konsole auf Englisch eingestellt ist, ist es meines Erachtens einfacher, mit diesem Artikel fortzufahren, wenn Sie ihn auf Englisch einstellen. (Es wird empfohlen, da der Name des Befehls in AWS CLI mit der englischen Notation der Konsole übereinstimmt.)

Zielperson

Vorausgesetztes Wissen

Konfiguration in diesem Artikel

Untitled Diagram-Copy of Page-1 (1).png

Streben Sie die obige Konfiguration an.

Um den tatsächlichen Fluss in Worten zu erklären,

① Push to Github (Mit Ausnahme des Hauptzweigs werden nur der automatische Test und Rubocop ausgeführt.) (2) CircleCI erkennt Push und beginnt mit dem Aufbau. ③ Nach dem Übergeben von RSpec und Rubocop wird das Docker-Image erstellt und an ECR gesendet. (4) Aktualisieren Sie die ECS-Taskdefinition (fast die, die definiert, wie der Docker-Container gestartet wird, wie docker-compose.yml) mit dem neuesten Docker-Image. ⑤ Die EC2-Instanz wird gestartet und die Bereitstellung abgeschlossen.

Außerdem ist die persönlich entwickelte App, die ich tatsächlich erstellt habe, natürlich SSL-fähig mit Route53 und ACM, und ich hatte hier große Probleme, daher werde ich sie als separaten Artikel erneut schreiben. Stellen Sie sicher, dass Sie SSL verwenden, da dies für den tatsächlichen Betrieb unverzichtbar ist.

Umgebung

Vorbereitung

Im Vorbereitungsabschnitt werden wir vier Hauptaufgaben erledigen.

Installieren Sie das Tool

Installieren Sie die folgenden zwei.

Wenn Sie Windows verwenden, können Sie es unter Bezugnahme auf diesen Artikel installieren. Ich konnte es auf diese Weise installieren.

Mit diesen Tools können Sie VPCs, Subnetze, Cluster, Push-to-ECR, Neudefinitionen von Aufgaben usw. vom Terminal aus erstellen, ohne mit der Konsole herumspielen zu müssen.

Erstellen Sie ein IAM

Melden Sie sich bei der Konsole an, wählen Sie Dienst aus, suchen Sie nach IAM und klicken Sie auf. スクリーンショット 2020-11-15 234007.png Klicken Sie auf Benutzer und dann auf Benutzer hinzufügen スクリーンショット 2020-11-15 234204.png Klicken Sie ganz rechts auf Vorhandene Richtlinien anhängen und fügen Sie die folgenden beiden Richtlinien hinzu.

スクリーンショット 2020-11-15 234511.png Wenn Sie bestätigen können, dass es wie auf dem Bestätigungsbildschirm festgelegt angehängt ist, klicken Sie auf Benutzer erstellen スクリーンショット 2020-11-15 234545.png Anschließend werden auf dem nächsten Bildschirm der Zugriffsschlüssel und der geheime Schlüssel erstellt. Ich denke, dass eine Schaltfläche wie Download in CSV angezeigt wird, also klicken Sie darauf und speichern Sie die Informationen.

** Seien Sie vorsichtig beim Umgang damit, da es Fälle gibt, in denen Sie versehentlich Ihren geheimen Zugriffsschlüssel auf git gedrückt und Millionen von Rechnungen von Amazon erhalten haben. ** ** **

Richtlinie hinzufügen (Zuschuss)

Ich habe diese Richtlinie früher hinzugefügt, aber dies allein führt zu einem Fehler in der Berechtigung beim Ausführen des Befehls ecs-cli. Daher werde ich sie separat hinzufügen.

Wählen Sie in der IAM-Konsole Richtlinien aus und klicken Sie dann auf Richtlinien erstellen. Klicken Sie auf dem Bildschirm auf die Registerkarte Json und geben Sie den folgenden Code ein.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:AddRoleToInstanceProfile",
                "iam:CreateInstanceProfile",
                "iam:CreateRole",
                "iam:DeleteInstanceProfile",
                "iam:DeleteRole",
                "iam:DetachRolePolicy",
                "iam:PassRole",
                "iam:RemoveRoleFromInstanceProfile",
                "ec2:DeleteInternetGateway",
                "ec2:DeleteSecurityGroup",
                "ec2:DeleteRouteTable"
            ],
            "Resource": "*"
        }
    ]
}

Klicken Sie nach der Eingabe auf Richtlinie überprüfen. スクリーンショット 2020-11-16 014135.png Geben Sie einen Namen und eine Beschreibung Ihrer Wahl ein und klicken Sie auf Richtlinie erstellen. スクリーンショット 2020-11-16 014335.png

Geben Sie dem erstellten IAM-Benutzer als Nächstes die neu erstellte Richtlinie in ↑. Klicken Sie auf Benutzer und dann auf Berechtigungen hinzufügen スクリーンショット 2020-11-16 015106.png Klicken Sie direkt auf Vorhandene Richtlinien anhängen und wählen Sie die gerade erstellte Richtlinie aus スクリーンショット 2020-11-16 015146.png Klicken Sie im Bestätigungsbildschirm auf Berechtigungen hinzufügen, wenn Sie die richtige Richtlinie ausgewählt haben. スクリーンショット 2020-11-16 015207.png

Führen Sie "aws configure" im Terminal aus

Führen Sie aws configure im Terminal mit der Option --profile aus. Wenn Sie es ausführen, werden Sie interaktiv gefragt, geben Sie es also nacheinander richtig ein.

$ aws configure --Profil Benutzername erstellt

AWS Access Key ID #Zugriffsschlüssel beim Erstellen
AWS Secret Access Key #Geheimer Zugriffsschlüssel beim Erstellen
Default region name # ap-northeast-1 
Default output format # json 

Wenn Sie aws configure ausführen, wird das Verzeichnis .aws automatisch unter Ihrem Ausgangsverzeichnis generiert, und Informationen wie Zugriffsschlüssel werden dort wie unten gezeigt gespeichert. Überprüfen Sie dies daher bitte. (Kann nicht ganz zusammen sein)

~/.aws/credentials


[Nutzername]
aws_access_key_id=AKIAIOSFODNN7AJDIFK
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/gkjkAKJDKJ
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

~/.aws/config


[Profil Benutzername]
region = ap-northeast-1
output = json
[default]
region = ap-northeast-1
output = json

Erstellen eines Schlüsselpaars

Als nächstes erstellen wir ein Schlüsselpaar.

Wählen Sie Service → EC2-Konsole → Schlüsselpaar → Schlüsselpaar erstellen und geben Sie einen entsprechenden Schlüsselpaarnamen ein. Wählen Sie .pem als Dateierweiterung aus und klicken Sie auf Schlüsselpaar erstellen. スクリーンショット 2020-11-16 022846.png

Nach Abschluss wird die PEM-Datei automatisch heruntergeladen. Führen Sie den folgenden Befehl aus, um in das Verzeichnis ".ssh" zu wechseln und die Berechtigungen zu ändern.

$ mv Downloads/sample-app.pem .ssh/
$ chmod 600 ~/.ssh/sample-app.pem

** Damit ist die Vorbereitung abgeschlossen! Danke für deine harte Arbeit! ** ** ** Die Fortsetzung ist (2) Ich schreibe gerade einen Artikel für den Infrastrukturbau! Wir werden es hier veröffentlichen, sobald die Erstellung abgeschlossen ist. Bitte unterstützen Sie uns weiterhin! (Ich denke, ich kann es morgen erhöhen)

Vielen Dank für das Lesen bis zum Ende!

Es war ein langer Artikel. Wenn Sie also Vorschläge haben, wie z. B. Fehler in der Beschreibung, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

Recommended Posts

[AWS] So stellen Sie eine mit Rails 6 erstellte Webanwendung mithilfe von CircleCI (1) -Vorbereitung automatisch für ECR / ECS bereit [Containerbereitstellung]
[Teil 2] Testen und Bereitstellen von WEB-Diensten, die mit Rails + Nuxt + MySQL + Docker mit ECS / ECR / CircleCI erstellt wurden, automatisch für Terraform
[Für Super-Anfänger (mehr Squeeze)] Automatische Bereitstellung in AWS ECR / ECS mit Ruby2.6 x Rails6 x CircleCi [Hands-on-Format]
So stellen Sie die Rails-Anwendung in AWS bereit (Artikelzusammenfassung)
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Vorbereitung]
[Teil 1] Testen und Bereitstellen von WEB-Diensten, die mit Rails + Nuxt + MySQL + Docker mit ECS / ECR / CircleCI erstellt wurden, automatisch für Terraform
So migrieren Sie eine in einer lokalen Docker-Umgebung erstellte Webanwendung nach AWS
Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
[Java] Stellen Sie eine mit Eclipse + Maven + Ontology mit Heroku erstellte Webanwendung bereit
Bereitstellen einer Node.js-Anwendung auf einer ECS-Instanz mithilfe des Cloud Toolkit
So stellen Sie ein mit Java erstelltes System (Wicket-Spring-Boot) auf dem Campus-Server bereit
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
[Docker] Wie man mit einem Container in Heroku aktualisiert und wie man mit Migrate Error umgeht
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
[So fügen Sie ein Video mit Rails in haml ein]
Stellen Sie lokal entwickelte Java-Anwendungen mit Cloud Toolkit auf Alibaba Cloud ECS-Instanzen bereit
So generieren Sie automatisch ein ER-Diagramm bei der Migration mit Rails 6
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails
So gelangen Sie in einen Container, der auf AWS Fargate ausgeführt wird
So stellen Sie jQuery in Rails-Apps mit Webpacker bereit
Ich habe versucht, die automatische Bereitstellung mit CircleCI + Capistrano + AWS (EC2) + Rails durchzuführen
So stellen Sie eine Kotlin (Java) -App auf AWS fargate bereit
So registrieren Sie sich mit Tomcat als Kunde in Square
AWS Elastic Beanstalk # 1 mit Java von Grund auf neu Erstellen einer Java-Webanwendungsumgebung mit EB CLI-
[Rails 6] So erstellen Sie mit cocoon einen dynamischen Formular-Eingabebildschirm
So bedienen Sie automatisch einen in Java unter Windows erstellten Bildschirm
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Tomcat App Edition]
So veröffentlichen Sie eine Anwendung mithilfe der AWS (3) EC2-Instanzumgebungskonstruktion
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
Ich habe versucht, eine einfache Anwendung mit Dockder + Rails Scaffold zu erstellen
So benennen Sie ein Modell mit externen Schlüsseleinschränkungen in Rails um
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
So erstellen Sie einen Webserver auf einer EC2-Instanz von AWS