Déployer des rails sur ECS Fargate avec AWS Copilot

Qu'est-ce que Copilot?

Copilot est le successeur de Amazon ECS CLI. Un outil de construction d'environnement développé pour faciliter l'exécution des conteneurs dans ECS. Les ressources AWS créées avec Copilot sont gérées par CloudFormation Contrairement à AWS CDK (un outil qui gère les modèles CloudFormation par programmation), vous avez rarement besoin d'écrire du code!

GitHub - aws/copilot-cli Wiki

Installation et préparation du copilote

Peut être installé avec homebrew ou directement avec curl

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

#Installer directement avec curl
$ 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

#Confirmation de version
$ copilot -v

Préparons d'autres éléments nécessaires

Créer un environnement ECS avec Copilot

Déployons réellement l'application Web sur ECS en utilisant Copilot!

Vous pouvez vous référer à l'état d'exécution du déploiement et au modèle CloudFormation à exécuter en suivant les étapes ci-dessous. Vous pouvez également vérifier les ressources AWS qui seront créées ici. ** AWS Console> CloudFormation> Stack **

1. Préparez l'application

Créez l'application que vous souhaitez déployer à l'aide de docker Cette fois, déployons cette application rails en utilisant copilot

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

** Réglage initial **

# 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

Si vous pouvez le confirmer sur http: // localhost: 3000, vous êtes prêt à partir!

C'est le mécanisme de l'application créée par Copilot Je vais créer ceux-ci un par un

--Application: Résumé des applications Copilot --Enviroment: un mécanisme pour diviser les applications par environnement tel que l'environnement de test et l'environnement de production --Service: application de conteneur fonctionnant sur ECS

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

2. Création d'une application copilote

Créer une application avec Copilot À ce moment-là, il vous sera demandé le nom de l'application, alors définissons-le

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

#Confirmation de l'application créée
$ copilot app init

3. Création d'un environnement copilote

En créant plusieurs environnements, vous pouvez diviser l'environnement en un environnement de test et un environnement de production. Il vous sera demandé de définir le VPC / sous-réseau lors de la création de l'environnement, Les paramètres par défaut généreront un nouveau VPC / sous-réseau / groupe de sécurité

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

#confirmation d'environnement
$ copilot env ls

** Si vous souhaitez utiliser un VPC / sous-réseau existant, ajoutez une option comme celle-ci ** À propos, le paramètre du groupe de sécurité est Il semble que Copilot ne le supporte pas encore et ne puisse pas être configuré

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

4. Création d'un service copilote

Ajouter un service de rails J'appelle des rails directement depuis ALB sans utiliser nginx, etc.

$ 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

#confirmation de service
$ copilot svc ls

Le Dockerfile ressemble à ceci Veuillez vous reporter ici pour la conversion Docker des rails! 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. Vérifiez le fichier de configuration

Vous êtes maintenant prêt à déployer! Vérifiez que le fichier de paramètres a été généré dans le répertoire racine du projet.

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

Vous pouvez définir les spécifications et les constantes des tâches dans manifest.yml La configuration de la voiture latérale ECS, etc. peut également être définie ici

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

Bien qu'il s'agisse d'une spécification de définition de tâche, Les nombres pris en charge sont fixes, donc si vous souhaitez le modifier, définissez-le dans cette plage.

Valeur CPU Valeur mémoire(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)Incrément de)
4096 (4 vCPU) 8192 (8 GB) ~ 30720 (30 GB) (1024 (1 GB)Incrément de)

6. Déployer

Déployez l'application avec Copilot

$ copilot deploy

Si le déploiement réussit, l'URL sera écrite dans la ligne de commande, donc Si vous accédez et ouvrez l'écran des rails, le déploiement est réussi! deploy.png

Supprimer l'application

Les ressources AWS créées avec Copilot peuvent être supprimées en bloc avec la commande delete Supprimons l'application créée cette fois

#Voir l'application copilot
$ copilot app ls
copilot-app

#Supprimer l'appli
$ copilot app delete copilot-app
Are you sure you want to delete application copilot-app? Yes

Recommended Posts

Déployer des rails sur ECS Fargate avec AWS Copilot
Déployer sur heroku avec Docker (Rails 6, MySQL)
Comment déployer Java sur AWS Lambda avec Serverless Framework
[AWS] Comment déployer automatiquement une application Web créée avec Rails 6 sur ECR / ECS à l'aide de CircleCI (1) Préparation [Déploiement de conteneur]
[Pour les super débutants (plus de pression)] Déploiement automatique sur AWS ECR / ECS avec Ruby2.6 x Rails6 x CircleCi [format pratique]
Comment déployer une application kotlin (java) sur AWS Fargate
Comment déployer l'application Rails sur AWS (résumé de l'article)
Connectez-vous au serveur Rails avec iPhone
Déployer des rails sur Docker vers heroku
Déployer l'application SpringBoot sur AWS EC2
Présentation de React to Rails avec react-rails
Comment déployer sur AWS à l'aide de NUXTJS S3 et CloudFront officiels? Avec docker-compose
Déploiement facile avec Capistrano + AWS (EC2) + Rails
Connaissances requises pour intégrer les applications Rails à AWS
Déployer sur Heroku [Ruby on Rails] Débutant
Essayez de déployer l'application Rails sur EC2-Part 2 (déploiement) -
Premiers pas avec Micronaut 2.x ~ Construction native et déploiement sur AWS Lambda ~
[AWS] Publier l'application Rails avec nginx + puma
Comment créer un environnement Rails 6 avec Docker
Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
[Rails] rails nouveau pour créer une base de données avec PostgreSQL
Déployez des applications Web Java sur Azure avec maven
Comment utiliser le framework Java avec AWS Lambda! ??
Je veux jouer avec Firestore de Rails
Comment créer une API avec GraphQL et Rails
Les débutants de Rails ont essayé de se lancer avec RSpec
Erreur lors du déploiement de rails5 + Mysql sur heroku avec Docker-compose
[Rails] Comment créer un environnement avec Docker
Essayez de résumer la disposition commune avec des rails
Déployer le bot Line avec rails5 + Docker + Heroku Note
[Rails] Je veux charger du CSS avec webpacker
Facile à afficher Hello World avec Rails + Docker
[Partie 2] Testez et déployez automatiquement les services WEB créés avec Rails + Nuxt + MySQL + Docker avec ECS / ECR / CircleCI pour terraformer
Soumettre une tâche à AWS Batch avec Java (Eclipse)
[Introduction à Docker x ECS] Déploiement ECS avec docker compose up
Comment pousser une application développée avec Rails vers Github
Exécutez Rubocop et RSpec sur CircleCI et déployez-le sur ECS
Comment supprimer un objet new_record construit avec Rails
Comment générer manuellement un JWT avec Knock in Rails
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
Je souhaite authentifier les utilisateurs auprès de Rails avec Devise + OmniAuth
[Comment insérer une vidéo dans un hameau avec Rails]