Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit

Was ist Copilot?

Copilot ist der Nachfolger von Amazon ECS CLI. Ein Tool zum Erstellen von Umgebungen, das entwickelt wurde, um die Ausführung von Containern in ECS zu vereinfachen. Mit Copilot erstellte AWS-Ressourcen werden von CloudFormation verwaltet Im Gegensatz zu AWS CDK (einem Tool, das CloudFormation-Vorlagen programmgesteuert verwaltet) müssen Sie selten Code schreiben!

GitHub - aws/copilot-cli Wiki

Installation und Vorbereitung des Copiloten

Kann mit Homebrew oder direkt mit Curl installiert werden

# homebrew
$ brew install aws/tap/copilot-cli

#Direkt mit Locke installieren
$ curl -Lo /usr/local/bin/copilot https://github.com/aws/copilot-cli/releases/download/v0.3.0/copilot-darwin-v0.3.0 && chmod +x /usr/local/bin/copilot && copilot --help

#Versionsbestätigung
$ copilot -v

Lassen Sie uns andere notwendige Gegenstände vorbereiten

Erstellen einer ECS-Umgebung mit Copilot

Stellen wir die Webanwendung mithilfe von Copilot tatsächlich für ECS bereit!

Sie können sich auf den Ausführungsstatus der Bereitstellung und die auszuführende CloudFormation-Vorlage beziehen, indem Sie die folgenden Schritte ausführen. Sie können auch die AWS-Ressourcen überprüfen, die hier erstellt werden. ** AWS Console> CloudFormation> Stack **

1. Bereiten Sie die Anwendung vor

Erstellen Sie die Anwendung, die Sie bereitstellen möchten, mit Docker Dieses Mal stellen wir diese Rails-App mit Copilot bereit

https://github.com/git-gen/copilot-rails-deploy

** Grundeinstellung **

# config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  database: ## RDS database ##
  host: ## RDS host ##
  username: ## RDS username ##
  password: ## RDS password ##

development:
  <<: *default

test:
  <<: *default

production:
  <<: *default
$ docker-compose build

$ docker-compose up -d

Wenn Sie es unter http: // localhost: 3000 bestätigen können, können Sie loslegen!

Dies ist der Mechanismus der von Copilot erstellten Anwendung Ich werde diese einzeln erstellen

--Anwendung: Zusammenfassung der Copilot-Anwendungen

85873795-7da9c480-b786-11ea-9990-9604a3cc5f01.png Environments · aws/copilot-cli Wiki · GitHub

2. Erstellen einer Copilot-Anwendung

Erstellen Sie eine Anwendung mit Copilot Zu diesem Zeitpunkt werden Sie nach dem Anwendungsnamen gefragt. Legen Sie ihn also fest

$ copilot app init
What would you like to name your application? [? for help]
> copilot-app

#Bestätigung der erstellten Anwendung
$ copilot app init

3. Erstellen einer Copilot-Umgebung

Durch Erstellen mehrerer Umgebungen können Sie die Umgebung in eine Testumgebung und eine Produktionsumgebung unterteilen. Sie werden aufgefordert, die VPC / das Subnetz beim Erstellen der Umgebung festzulegen. Die Standardeinstellungen generieren eine neue VPC / Subnetz / Sicherheitsgruppe

$ copilot env init
What is your environment's name? [? for help]
> development

#Umgebungsbestätigung
$ copilot env ls

** Wenn Sie eine vorhandene VPC / ein vorhandenes Subnetz verwenden möchten, fügen Sie eine Option wie diese hinzu ** Die Sicherheitsgruppeneinstellung ist übrigens Es scheint, dass Copilot es noch nicht unterstützt und nicht eingestellt werden kann

$ copilot env init \
 --import-vpc-id vpc-****** \
 --import-public-subnets subnet-******,subnet-****** \
 --import-private-subnets subnet-******

4. Erstellen eines Copilot-Dienstes

Schienen-Service hinzufügen Ich rufe Rails direkt von ALB an, ohne Nginx usw. zu verwenden.

$ copilot svc init

Which service type best represents your service's architecture?  [Use arrows to move, type to filter, ? for more help]
  > Load Balanced Web Service
    Backend Service

What do you want to name this Load Balanced Web Service? [? for help]
  > app

Which Dockerfile would you like to use for app?  [Use arrows to move, type to filter, ? for more help]
  > ./Dockerfile

#Servicebestätigung
$ copilot svc ls

Das Dockerfile sieht so aus Informationen zur Docker-Konvertierung von Rails finden Sie hier! https://docs.docker.com/compose/rails/

FROM ruby:2.7.0-alpine3.11

ENV LANG=C.UTF-8
ENV TZ=Asia/Tokyo

RUN apk update && \
  apk upgrade && \
  apk add --no-cache \
  gcc \
  g++ \
  git \
  libc-dev \
  libxml2-dev \
  linux-headers \
  make \
  nodejs \
  mariadb-dev \
  tzdata && \
  apk add --virtual build-packs --no-cache \
  build-base \
  curl-dev

RUN mkdir /app
WORKDIR /app

COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
RUN apk del build-packs

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

5. Überprüfen Sie die Einstellungsdatei

Jetzt können Sie loslegen! Überprüfen Sie, ob die Einstellungsdatei im Stammverzeichnis des Projekts generiert wurde.

copilot-rails-deploy/
 ├ copilot/
 │ ├ app/
 │ │ └ manifest.yml
 │ └ .workspace
 │...

Sie können Aufgabenspezifikationen und Konstanten in manifest.yml festlegen Hier kann auch die ECS-Seitenwagenkonfiguration usw. eingestellt werden

name: app
type: Load Balanced Web Service

image:
  build: ./Dockerfile
  port: 3000

http:
  path: "/"
  healthcheck: "/health_check"

cpu: 1024
memory: 2048
count: 1

variables:
  RAILS_ENV: development

Obwohl es sich um eine Aufgabendefinitionsspezifikation handelt, Die unterstützten Nummern sind fest. Wenn Sie sie ändern möchten, legen Sie sie innerhalb dieses Bereichs fest.

CPU-Wert Speicherwert(MiB)
256 (.25 vCPU) 512 (0.5 GB)、1024 (1 GB)、2048 (2 GB)
512 (.5 vCPU) 1024 (1 GB)、2048 (2 GB)、3072 (3 GB)、4096 (4 GB)
1024 (1 vCPU) 2048 (2 GB)、3072 (3 GB)、4096 (4 GB)、5120 (5 GB)、6144 (6 GB)、7168 (7 GB)、8192 (8 GB)
2048 (2 vCPU) 4096 (4 GB) ~ 16384 (16 GB) (1024 (1 GB)Inkrement von)
4096 (4 vCPU) 8192 (8 GB) ~ 30720 (30 GB) (1024 (1 GB)Inkrement von)

6. Bereitstellen

Stellen Sie die App mit Copilot bereit

$ copilot deploy

Wenn die Bereitstellung erfolgreich ist, wird die URL in die Befehlszeile geschrieben Wenn Sie auf den Schienenbildschirm zugreifen und diesen öffnen, ist die Bereitstellung erfolgreich! deploy.png

Anwendung entfernen

Mit Copilot erstellte AWS-Ressourcen können mit dem Befehl delete in großen Mengen gelöscht werden Löschen wir die diesmal erstellte App

#Siehe Copilot-App
$ copilot app ls
copilot-app

#Löschen Sie die App
$ copilot app delete copilot-app
Are you sure you want to delete application copilot-app? Yes

Recommended Posts

Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
[AWS] So stellen Sie eine mit Rails 6 erstellte Webanwendung mithilfe von CircleCI (1) -Vorbereitung automatisch für ECR / ECS bereit [Containerbereitstellung]
[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 eine Kotlin (Java) -App auf AWS fargate bereit
So stellen Sie die Rails-Anwendung in AWS bereit (Artikelzusammenfassung)
Stellen Sie mit dem iPhone eine Verbindung zum Rails-Server her
Stellen Sie Rails on Docker für Heroku bereit
Stellen Sie die SpringBoot-Anwendung in AWS EC2 bereit
Einführung in React to Rails mit React-Rails
Wie kann ich mit NUXTJS Official S3 und CloudFront für AWS bereitstellen? Mit Docker-Compose
Einfache Bereitstellung mit Capistrano + AWS (EC2) + Rails
Erforderliche Kenntnisse, um Rails-Apps zu AWS zu bringen
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Versuchen Sie, die Rails-App für EC2-Teil 2 (Bereitstellung) bereitzustellen.
Erste Schritte mit Micronaut 2.x ~ Native Build und Bereitstellung für AWS Lambda ~
[AWS] Veröffentlichen Sie die Rails-App mit Nginx + Puma
So erstellen Sie eine Rails 6-Umgebung mit Docker
Bereitstellung auf Ruby on Rails Elastic Beanstalk (EB-Bereitstellung)
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte mit Firestore von Rails spielen
So erstellen Sie eine API mit GraphQL und Rails
Rails-Anfänger haben versucht, mit RSpec zu beginnen
Fehler beim Bereitstellen von Rails5 + MySQL auf Heroku mit Docker-Compose
[Rails] So erstellen Sie eine Umgebung mit Docker
Versuchen Sie, das gemeinsame Layout mit Schienen zusammenzufassen
Stellen Sie Line Bot mit Rails5 + Docker + Heroku Note bereit
[Rails] Ich möchte CSS mit Webpacker laden
Mit Rails + Docker einfach Hallo Welt anzuzeigen
[Teil 2] Testen und Bereitstellen von WEB-Diensten, die mit Rails + Nuxt + MySQL + Docker mit ECS / ECR / CircleCI erstellt wurden, automatisch für Terraform
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
[Einführung in Docker x ECS] ECS-Bereitstellung mit Docker Compose
So pushen Sie mit Rails entwickelte Apps an Github
Führen Sie Rubocop und RSpec auf CircleCI aus und stellen Sie es in ECS bereit
So löschen Sie ein mit Rails erstelltes new_record-Objekt
So generieren Sie manuell ein JWT mit Knock in Rails
Bereitstellen auf Ruby on Rails Elastische Bohnenstange (Umgebungskonstruktion)
Ich möchte Benutzer mit Devise + OmniAuth bei Rails authentifizieren
[So fügen Sie ein Video mit Rails in haml ein]