[DOCKER] [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]

Nous avons réussi à déployer en conteneur l'application Rails créée par nous-mêmes à l'aide de CircleCI, je vais donc l'écrire ici sous forme de mémorandum. (De plus, dès que le fichier Readme, etc. sera prêt, nous présenterons l'application réelle dans un autre article.)

En outre, j'utilise actuellement Windows10, et si vous êtes un Mac, veuillez le remplacer si nécessaire. Cependant, je pense que les autres choses sont les mêmes sauf que la méthode d'installation de aws-ecs-cli est différente. (L'installation avec Windows a pris un peu de temps.)

De plus, étant donné que la langue de la console AWS est définie sur l'anglais, je pense qu'il est plus facile de poursuivre cet article si vous le définissez en anglais. (Il est recommandé car le nom de la commande dans AWS CLI correspond à la notation anglaise de la console.)

Personne cible

--Personnes qui ont un compte AWS

Connaissances préalables

Configuration visée dans cet article

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

Visez la configuration ci-dessus.

Pour expliquer le flux réel en mots,

① Push to Github (Seuls les tests automatiques et Rubocop sont exécutés à l'exception de la branche master.) (2) CircleCI détecte la poussée et commence la construction. ③ Après avoir passé RSpec et Rubocop, l'image du docker sera construite et poussée vers ECR. (4) Utilisez la dernière image Docker pour mettre à jour la définition de tâche ECS (qui définit presque comment démarrer le conteneur docker, comme docker-compose.yml). ⑤ L'instance EC2 est démarrée et le déploiement est terminé.

De plus, l'application développée personnellement que j'ai réellement créée est bien sûr compatible SSL avec Route53 et ACM, et j'ai eu beaucoup de problèmes ici, je vais donc l'écrire à nouveau dans un article séparé. Assurez-vous de faire SSL car il est indispensable pour le fonctionnement réel.

environnement

Préparation

Dans la section de préparation, nous ferons quatre choses principales.

Installez l'outil

Installez les deux suivants.

Si vous utilisez Windows, vous pouvez l'installer en vous référant à cet article. J'ai pu l'installer de cette façon.

Avec ces outils, vous pouvez créer des VPC, des sous-réseaux, des clusters, pousser vers ECR, redéfinir des tâches, etc. à partir du terminal sans avoir à jouer avec la console.

Créer un IAM

Connectez-vous à la console, sélectionnez le service, recherchez IAM et cliquez sur. スクリーンショット 2020-11-15 234007.png Cliquez sur Utilisateurs, puis sur Ajouter un utilisateur スクリーンショット 2020-11-15 234204.png Cliquez sur Joindre les stratégies existantes à l'extrême droite et attachez les deux stratégies suivantes.

スクリーンショット 2020-11-15 234511.png Si vous pouvez confirmer qu'il est attaché comme défini sur l'écran de confirmation, cliquez sur Créer un utilisateur スクリーンショット 2020-11-15 234545.png Ensuite, la clé d'accès et la clé secrète seront créées sur l'écran suivant. Je pense qu'un bouton comme télécharger sera affiché en csv, alors cliquez dessus et enregistrez les informations.

** Il semble qu'il y ait des cas où vous avez accidentellement poussé votre clé d'accès secrète vers git et reçu des millions de factures d'Amazon, alors soyez prudent lorsque vous la manipulez. ** **

Ajouter une stratégie (subvention)

J'ai ajouté cette politique plus tôt, mais cela seul provoquera une erreur autour de l'autorité lors de l'exécution de la commande ecs-cli, je vais donc l'ajouter séparément.

Dans la console IAM, sélectionnez Stratégies, puis Créer des stratégies. Cliquez sur l'onglet Json à l'écran et entrez le code ci-dessous.

{
    "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": "*"
        }
    ]
}

Après avoir entré, cliquez sur Vérifier la politique. スクリーンショット 2020-11-16 014135.png Entrez un nom et une description de votre choix et cliquez sur Créer une stratégie. スクリーンショット 2020-11-16 014335.png

Ensuite, donnez à l'utilisateur IAM créé la stratégie nouvellement créée dans ↑. Cliquez sur Utilisateurs, puis sur Ajouter des autorisations スクリーンショット 2020-11-16 015106.png Cliquez sur Joindre directement les politiques existantes et sélectionnez la politique que vous venez de créer スクリーンショット 2020-11-16 015146.png Sur l'écran de confirmation, cliquez sur Ajouter des autorisations si vous avez sélectionné la stratégie appropriée. スクリーンショット 2020-11-16 015207.png

Exécutez "aws configure" dans le terminal

Exécutez aws configure dans le terminal avec l'option --profile. Lorsque vous l'exécutez, il vous sera demandé de manière interactive, alors entrez-le correctement un par un.

$ aws configure --profile Nom d'utilisateur créé

AWS Access Key ID #Clé d'accès une fois créée
AWS Secret Access Key #Clé d'accès secrète une fois créée
Default region name # ap-northeast-1 
Default output format # json 

Lorsque vous exécutez aws configure, le répertoire .aws est automatiquement généré sous votre répertoire personnel et des informations telles que les clés d'accès y sont stockées comme indiqué ci-dessous, veuillez donc le vérifier. (Peut ne pas être complètement ensemble)

~/.aws/credentials


[Nom d'utilisateur]
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


[nom d'utilisateur du profil]
region = ap-northeast-1
output = json
[default]
region = ap-northeast-1
output = json

Créer une paire de clés

Ensuite, nous allons créer une paire de clés.

Sélectionnez Service → Console EC2 → paire de clés → Créer une paire de clés et saisissez un nom de paire de clés approprié. Sélectionnez .pem comme extension de fichier et cliquez sur Créer une paire de clés. スクリーンショット 2020-11-16 022846.png

Une fois terminé, le fichier .pem sera téléchargé automatiquement. Exécutez la commande suivante pour accéder au répertoire ".ssh" et modifier les autorisations.

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

** Ceci termine la préparation! Je vous remercie pour votre travail acharné! ** ** La suite est (2) J'écris actuellement un article pour la construction d'infrastructures! Nous le publierons ici dès que la création sera terminée, alors continuez à nous soutenir! (Je pense que je peux l'élever demain)

Merci d'avoir lu jusqu'au bout!

Ce fut un long article, donc si vous avez des suggestions, telles que des erreurs dans la description, je vous serais reconnaissant si vous pouviez commenter.

Recommended Posts

[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]
[Partie 2] Testez et déployez automatiquement les services WEB créés avec Rails + Nuxt + MySQL + Docker avec ECS / ECR / CircleCI pour terraformer
[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 l'application Rails sur AWS (résumé de l'article)
Déployer automatiquement des applications Web développées en Java à l’aide de Jenkins [Préparation]
[Partie 1] Testez et déployez automatiquement les services WEB créés avec Rails + Nuxt + MySQL + Docker avec ECS / ECR / CircleCI pour terraformer
Comment migrer une application Web créée dans un environnement Docker local vers AWS
Déployer des rails sur ECS Fargate avec AWS Copilot
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Spring Boot App Edition]
[Java] Déployer une application Web créée avec Eclipse + Maven + Ontology avec Heroku
Déployer une application Node.js sur une instance ECS à l'aide du Cloud Toolkit
Comment déployer un système réalisé avec Java (démarrage Wicket-Spring) sur le serveur du campus
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
[Docker] Comment mettre à jour à l'aide d'un conteneur dans Heroku et comment gérer l'erreur de migration
Comment déployer Java sur AWS Lambda avec Serverless Framework
[Comment insérer une vidéo dans un hameau avec Rails]
Déployez des applications Java développées localement avec Cloud Toolkit sur des instances Alibaba Cloud ECS
Comment générer automatiquement un diagramme ER lors de la migration avec Rails 6
Comment définir des variables d'environnement lors de l'utilisation de Payjp avec Rails
Comment accéder à un conteneur s'exécutant sur AWS Fargate
Comment déployer jQuery dans les applications Rails à l'aide de Webpacker
J'ai essayé le déploiement automatique avec CircleCI + Capistrano + AWS (EC2) + Rails
Comment déployer une application kotlin (java) sur AWS Fargate
Comment s'inscrire en tant que client dans Square à l'aide de Tomcat
AWS Elastic Beanstalk # 1 avec Java à partir de zéro - Création d'un environnement d'application Web Java à l'aide de l'interface de ligne de commande EB-
[Rails 6] Comment créer un écran de saisie de formulaire dynamique à l'aide de cocoon
Comment faire fonctionner automatiquement un écran créé en Java sous Windows
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Tomcat App Edition]
Comment publier une application à l'aide de la construction d'environnement d'instance AWS (3) EC2
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
J'ai essayé de créer une application simple en utilisant Dockder + Rails Scaffold
Comment renommer un modèle avec des contraintes de clé externes dans Rails
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
Comment créer un serveur Web sur une instance EC2 d'AWS