Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)

Aperçu

Déployer une application créée avec Ruby on Rails Utilisez Elastic Beanstalk (EB) pour créer un environnement dans les plus brefs délais. Il est divisé en changement d'autorité IAM, construction d'environnement et déploiement EB. Veuillez noter que nous nous concentrerons sur un déploiement rapide, donc si vous avez besoin d'une gestion stricte.

table des matières

Changement d'autorité IAM Construction de l'environnement Déploiement EB

Déployer sur EB

  1. Commencez par effectuer les réglages initiaux. eb init (eb init -i pour la réinitialisation)

myapp


Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
・ ・ ・
22) af-south-1 : Africa (Cape Town)
(default is 3): 9 #Sélectionnez Tokyo
Enter Application Name
(default is "myapp"): 
Application myapp has been created.

It appears you are using Ruby. Is this correct?
(Y/n): 
Select a platform branch.
1) Ruby 2.7 running on 64bit Amazon Linux 2
2) Ruby 2.6 running on 64bit Amazon Linux 2
3) Ruby 2.5 running on 64bit Amazon Linux 2
4) Puma with Ruby 2.6 running on 64bit Amazon Linux
5) Puma with Ruby 2.5 running on 64bit Amazon Linux
6) Puma with Ruby 2.4 running on 64bit Amazon Linux
7) Passenger with Ruby 2.6 running on 64bit Amazon Linux
8) Passenger with Ruby 2.5 running on 64bit Amazon Linux
9) Passenger with Ruby 2.4 running on 64bit Amazon Linux
・ ・ ・
17) Passenger with Ruby 2.0 running on 64bit Amazon Linux (Deprecated)
18) Passenger with Ruby 1.9.3 running on 64bit Amazon Linux (Deprecated)
(default is 1): 4 
#Puisqu'il s'agit de cloud9, c'est Amazon Linux, mais ce qui est important c'est Puma et Ruby 2.Sélectionnez 6 (cette version)

Do you wish to continue with CodeCommit? (y/N) (default is n): <OK avec Enter>
Do you want to set up SSH for your instances?
(Y/n): <OK avec Enter>

Select a keypair.
1) cloudformation
2) [ Create new KeyPair ]
(default is 1): <Vous êtes libre de créer une paire de clés pour cela ou d'utiliser une clé préexistante.>

Le réglage initial est maintenant OK. Créons autour d'EC2 requis pour le déploiement. (Ce serait utile si vous pouviez faire quelque chose de bien ici aussi.)

  1. Créez le VPC, le sous-système et le groupe de sécurité requis. 2-1. Création de VPC Sélectionnez VPC dans le menu de la console AWS. Cliquez sur Créer un VPC. Entrez / sélectionnez comme suit Étiquette de nom: myapp-vpc (n'importe quel nom) Bloc d'adresse CIDR IPv4: 10.0.0.0/16 (spécifiez n'importe quel réseau) Cliquez sur Créer.

2-2. Création d'un sous-réseau Sélectionnez Sous-sous-réseau dans le menu de gauche. Créez le premier sous-réseau. Cliquez sur le bouton Créer un sous-réseau. Entrez comme suit. Balise de nom: myapp-subnet-1a (tout nom de sous-réseau) VPC: sélectionnez myapp-vpc. Zone de disponibilité: ap-nord-est-1a (choisissez-en une parmi les régions où vous créez le VPC) Bloc d'adresse CIDR IPv4: 10.0.0.0/24 (spécifié par la plage CIDR VPC pour chaque AZ) Créez un deuxième sous-réseau. Cliquez à nouveau sur le bouton Créer un sous-marin. Entrez comme suit. Balise de nom: myapp-subnet-1c (tout nom de sous-réseau) VPC: sélectionnez myapp-vpc. Zone de disponibilité: ap-nord-est-1c (choisissez-en une parmi les régions où vous créez le VPC) Bloc d'adresse CIDR IPv4: 10.0.1.0/24 (spécifié par la plage CIDR VPC pour chaque AZ)

2-3. Création d'une passerelle Internet (IGW) Sélectionnez dans le menu de gauche. Cliquez sur le bouton Créer IGW. Étiquette de nom: myapp-gateway Cliquez sur le bouton Créer. Sélectionnez la passerelle myapp-gateway dans la liste et sélectionnez Attacher au VPC dans l'action. VPC: sélectionnez myapp-vpc Cliquez sur Joindre. Cliquez sur la table de routage dans le menu de gauche. Sélectionnez la table de routage liée à myapp-vpc en vous référant à l'ID de VPC. Sélectionnez Routes dans les onglets en bas de la page et cliquez sur Modifier les routes. Cliquez sur Ajouter un itinéraire et entrez Destination: 0.0.0.0/0 Sélectionnez Internet Gateway à partir de la cible, puis sélectionnez myapp-gateway. Cliquez sur Enregistrer les itinéraires pour enregistrer.

2-4. Création d'un groupe de sécurité (créez-en deux pour deux régions et un pour RDS) Sélectionnez un groupe de sécurité dans le menu de gauche Cliquez sur Créer un groupe de sécurité et entrez: Security group name: myapp-security-group Description: (Tout va bien) VPC: sélectionnez myapp-vpc. Cliquez sur Créer pour créer un groupe de sécurité. Sélectionnez le groupe de sécurité que vous venez de créer dans la liste et cliquez sur Règles entrantes dans l'onglet en bas de l'écran. Cliquez sur Modifier les règles. Cliquez sur Ajouter une règle et entrez: Type: HTTP Description: HTTP Cliquez sur Enregistrer les règles pour enregistrer les règles. Répétez ceci pour en créer un autre.

Le groupe de sécurité pour RDS autorisera l'accès à partir de deux des groupes de sécurité que vous venez de créer. Autoriser les règles entrantes à entrer (accès) à partir des groupes de sécurité. Sélectionnons et ajoutons les deux groupes de sécurité mentionnés précédemment. 3.jpg

Ceci termine la création du VPC, du sous-système et du groupe de sécurité.

  1. Déployer sur EB C'est un peu plus. Déployons-nous. Revenez au terminal et utilisez la commande suivante pour configurer les paramètres de déploiement (y compris la création RDS et les paramètres ALB).
eb create <Nom de l'environnement EB> --instance_type <Spécifications EC2> --database.engine <Type de base de données> --database.username <DBusername> --elb-type application --vpc
#Exemple) eb create rails-app --instance_type t2.medium --database.engine mysql --database.username admin --elb-type application --vpc
Enter an RDS DB master password: 
Retype password to confirm: 

Enter the VPC ID: <ID du VPC créé>
Do you want to associate a public IP address? (Y/n): <Enter>
Enter a comma-separated list of Amazon EC2 subnets: <ID des deux sous-réseaux que vous avez créés>
Enter a comma-separated list of Amazon ELB subnets: <ID des deux sous-réseaux que vous avez créés>
Do you want the load balancer to be public? (Select no for internal) (Y/n): 
Enter a comma-separated list of Amazon VPC security groups:<ID des deux groupes de sécurité que vous avez créés>

Cela commencera à créer l'environnement de déploiement sur l'écran de la console EB. De plus, ajoutez les paramètres du RDS créé. (Les paramètres à régler peuvent être confirmés sur la console RDS → chaque écran RDS.)

eb setenv RDS_DB_NAME=◎◎ RDS_USERNAME=◎◎ RDS_PASSWORD=◎◎ RDS_HOSTNAME=◎◎ RDS_PORT=◎◎
Exemple) eb setenv RDS_DB_NAME=myapp RDS_USERNAME=admin RDS_PASSWORD=123456 RDS_HOSTNAME=database-1.cfwrsdfe64.ap-northeast-1.rds.amazonaws.com RDS_PORT=3306

Déployons-le.

eb deploy

Maintenant, vérifions l'URL dans la console EB.

4.jpg

An unhandled lowlevel error occurred. The application logs may have details. A été affiché. En effet, Ruby n'a pas créé ni défini de clé secrète pour l'environnement de production. Alors, configurons l'environnement de production Ruby ici.

  1. Définition des variables d'environnement et des clés secrètes ruby pour générer EB
#Sortie de clé secrète
rails credential:edit
<Clef secrète>
#Refléter les paramètres dans EB
eb setenv SECRET_KEY_BASE=<Clef secrète>

Parce que la précompilation CSS dans l'environnement de production est requise ...

python


RAILS_ENV=production bundle exec rake assets:precompile

myapp/config/environments/production.rb


config.assets.compile = true
  1. Déployez à nouveau
eb deploy

Vive le bon travail. Ceci termine le déploiement.

Résumé

Cette fois, j'ai utilisé AWS Elastic Beanstalk pour déployer une application Ruby. J'ai senti que c'était un très bon service de pouvoir créer facilement une configuration redondante comprenant des ressources telles que ALB et Autoscalling, et de pouvoir gérer toutes les ressources dans l'environnement élastique beanstalk. D'un autre côté, j'ai trouvé peu pratique que RDS ne soit pas créé par défaut et que S3 soit resté lorsque l'environnement a été supprimé (en raison de la politique de compartiment).

Autre

J'ajouterai quelques éléments à toucher après le déploiement et comment gérer les erreurs.

  1. Par défaut, la base de données est créée et migrée à chaque fois. Elastic Beanstalk> Environnement> myapp-env> Paramètres RAILS_SKIP_ASSET_COMPILATION(false → true) RAILS_SKIP_MIGRATIONS(false → true)

  2. À propos de l'erreur Si une erreur se produit, utilisez la commande suivante pour connaître le contenu actuel de l'erreur, alors agissez. eb logs

Pour les autres commandes eb, cliquez ici (https://qiita.com/yoshito410kam/items/712e96be87477aafdc89) A été utile.

Article de référence

J'ai fait référence à l'article suivant. Jusqu'à ce que vous déployez votre application Rails sur Elastic Beanstalk https://qiita.com/hiroeorz@github/items/c9dcdb9c648d7e8eae7f#rails%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E4%BD%9C%E6%88%90%E3%81%A8%E8%A8%AD%E5%AE%9A%E7%AD%89

Comment installer en spécifiant la version de Rails https://qiita.com/tanakayo/items/7b85261924eca1a5a3d6

Définir secret_token dans l'environnement de production (rails) https://qiita.com/takusemba/items/2ad25d3d0a007757c194

Ce que je suis entré en démarrant Rails 5 en production https://qiita.com/qqhann/items/7cd01f4b5cff4a31e053

aws EB CLI ref officiel https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb3-cmd-commands.html

Résumé des commandes utilisées dans Elastic Beanstalk https://qiita.com/yoshito410kam/items/712e96be87477aafdc89

Recommended Posts

Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
Déployer sur Ruby on Rails Elastic beanstalk (changement d'autorisation IAM)
Déployer sur Heroku [Ruby on Rails] Débutant
Comment utiliser Ruby on Rails
Comment déployer Bootstrap sur Rails
Déployer des rails sur Docker vers heroku
Préparation à l'introduction de jQuery dans Ruby on Rails
[Ruby on Rails] Comment utiliser redirect_to
Bouton [Ruby on Rails] pour revenir en haut
Déployer RAILS sur EC2
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
Déployer l'application Spring Boot sur Elastic Beanstalk
[Introduction] Créer une application Ruby on Rails
Résumé des méthodes de mise à jour de plusieurs colonnes [Ruby on Rails]
[Ruby on Rails] Comment écrire enum en japonais
[Ruby on Rails] Comment changer le nom de la colonne
[Mis à jour de temps en temps] Ruby on Rails Méthode pratique
[Ruby on Rails] Remplacez l'ID d'URL par le nom de la colonne
[Ruby On Rails] Comment réinitialiser DB dans Heroku
[Ruby on Rails] De la construction de MySQL au changement de base de données
(Ruby on Rails6) Comment créer un modèle et une table
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
Record d'apprentissage Ruby on rails -2020.10.04
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
Comment déployer avec heroku
Record d'apprentissage Ruby on rails-2020.10.07 ②
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
Record d'apprentissage de Ruby on rails -2020.10.06
Résumé de la validation Ruby on Rails
Mémorandum de base Ruby on Rails
<Installation de points> Introduction à Ruby on Rails5 Comparaison du code source
[Ruby on Rails] Élimination de Fat Controller-First, logic to model-
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
[Ruby on Rails] Restrictions de colonne lors de l'enregistrement dans DB (4 représentants)
Appliquer le CSS à une vue spécifique dans Ruby on Rails
Comment déployer l'application Rails sur AWS (résumé de l'article)
[Ruby on Rails] Read try (: [] ,: key)
Comment déployer Laravel sur CentOS 7
Variables Ruby on Rails, résumé constant