[AWS? Docker?] Résumez les connaissances nécessaires dans votre portefeuille de manière simple à comprendre [terraform? CircleCI?]

En écrivant cet article

Bonjour. Créez-vous un portfolio? Ceux qui créent un portefeuille moderne et d'une qualité insensée maintenant et pensent que cela devrait être fait. Ceux qui sont impatients car Docker, AWS, terraform et CircleCI sont traités comme des connaissances communes des ingénieurs.

** Je comprends vraiment. ** **

Même si je vis en tant qu'ingénieur, j'étais honnêtement impatient car je n'y comprenais rien. Les gens qui disent ** "AWS est tellement ~ w" "terraform best w" ** comme une évidence, je pensais que c'était vraiment un génie.

J'ai fait un portfolio! Il y a un article comme celui-ci, mais c'est vraiment incroyable! C'est un article qui donne envie de le faire, au contraire, c'est un article très difficile, ou c'est un article qui est facile à comprendre par lui-même, mais je ne le comprends pas complètement.

** Qu'est-ce que terraform? Où utilisez-vous Docker? Cela s'appelle AWS, mais qu'utilisez-vous réellement? ** **

En tant qu'ingénieur débutant plein de questions, je pensais que je serais heureux si j'avais quelque chose comme ça, alors j'ai décidé d'écrire une critique de l'article.

Si vous ne comprenez pas vraiment, vous ne saurez pas par où commencer ni comment chercher.

Travail suivant → Construction d'un environnement de développement moderne et prêt à être développé à l'aide de Rails, Nuxt et CircleCI (Introduction)

Auto-introduction

Un ingénieur ordinaire. Il y avait beaucoup de serveurs en Java et PHP, et Javascript y vivait. C'était ma première connaissance que je n'avais jamais expérimentée, et j'ai essayé de découvrir ce que je pouvais faire. La période de production est probablement inférieure à six mois.

La langue est Ruby (Rails) /Vue.js (Nuxt.js) → Rails est mis à jour de 5.2 à 6.0.3 en cours de route Docker / Docker Compose / nginx / openssl / MySQL / Vagrant dans l'environnement de développement AWS / ECS / ECR / CircleCI / terraform dans un environnement de production J'ai fait un tel portfolio en utilisant.

Fonction principale 飲食店サーチ動画.gif

Marquage / recherche d'utilisateurs プロフィール画面・ユーザタグ検索.gif

commentaire コメント・削除機能.gif

Recommandations des favoris / visites / suivis お気に入り・訪問機能.gif

etc

Objectifs de cet article

** Utilisation de Rails côté serveur et Nuxt.js côté frontal, Déplacer automatiquement CircleCI lorsqu'il est poussé vers git Image push vers AWS ECR construite avec une infrastructure codée terraform Déployez en production à l'aide d'ECS. ** **

Afin de faire la composition, les connaissances nécessaires sont faciles à comprendre Je peux en quelque sorte l'imaginer dans mon cerveau.

Remarque

Je ne suis pas très confiant car c'est une configuration / application d'infrastructure que j'ai trouvée inexpérimentée. Je pense qu'il y a une composition bien meilleure et meilleure. J'espère que vous pourrez prendre cela comme exemple. J'aimerais savoir s'il y a quelque chose qui dit normalement "c'est différent".

Ce sera incroyablement long. Accédez à la pièce que vous recherchez!

Composition globale

Qiita用インフラ構成.png

Explication

C'est devenu un flux.

Ne comprenez pas soudainement ... Je ferai de mon mieux pour expliquer chacun d'eux.

A. Technologie utilisée dans l'environnement de développement

Docker  Rails ou une machine virtuelle pour exécuter node.js. Comme vous pouvez le voir sur le logo, c'est comme une baleine transportant un conteneur sur le navire.

dockerlogo.png

Si vous le forcez, c'est comme un repas fixe. Baguettes, assiettes, lingettes et plats sont servis sur le plateau.

Docker est appelé ** "conteneur" ** et ** "image" **. ** L'image ** est comme une assiette, des baguettes ou une lingette à main dans l'exemple ci-dessus. Il est également fabriqué en servant du riz. Un ** conteneur ** est comme un plateau sur lequel les mettre.

** L'image ** est MySQL, ruby, node.js, etc. Vous pouvez également créer l'image en pétrissant le code source. ** Container ** est un système d'exploitation qui inclut une image (centOS, Linux, alpin, etc.) Le système d'exploitation est Mac ou Windows.

DockerCompose Un outil pour orchestrer le conteneur Docker ** ci-dessus **. Par exemple, l'image est comme une jolie serveuse qui apporte un repas avec de la nourriture à chaque table. Le logo de M. Taco de Docker Compose en est l'image.

En supposant que vous ayez des conteneurs MySQL / Rails / Nuxt Docker, démarrez-les en même temps De plus, vous pouvez définir chacun de ces ports et gérer les paramètres de commande au démarrage avec un fichier appelé docker-compose.yml. L'exécution de ces trois avec Docker n'est pas pratique car vous devez démarrer chaque conteneur Docker un par un. Docker Compose peut résoudre de tels problèmes.

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139313330342f62343162396562362d316663342d373433622d383863302d6635346638633763656532342e706e67.png

MySQL C'est une base de données. Par exemple, si vous souhaitez créer une application de bloc-notes, enregistrez le titre et le contenu du bloc-notes.

B. github C'est ici que vous enregistrez le code que vous avez écrit dur. Chaque fois que je le mets à jour, l'historique demeure et j'ai fait une erreur! C'est sûr même en disant. Vous pouvez le retourner immédiatement. Comment utiliser Introduction à la gestion de version Git-Let's master de Monkey-sensei Vous pouvez voir comment l'utiliser en une journée.

C. CircleCI Si vous êtes une entreprise moderne développée en interne, elle est introduite avec une forte probabilité. Service CI / CD de type Saas.

** CI signifie intégration continue. C'est ce qu'on appelle «l'intégration continue». ** ** intégration = intégration, Le but est de continuer à «intégrer» et à tester.

** CD signifie livraison ou déploiement continu. Cela s'appelle «livraison / déploiement continus». ** ** Livraison = Fait référence au déploiement dans l'environnement de production. Le fait est, gardons-le "déployable" sur une base continue.

CircleCI est un service qui peut les exécuter en coopération avec le github mentionné ci-dessus. C'est incroyable Circle CI! Pour faire simple, si vous l'enregistrez sur github, ferez-vous le test d'intégration sans autorisation et le déploierez-vous sans autorisation? C'est un super outil. cependant,

Ferez-vous le test d'intégration sans autorisation et le déploierez-vous sans autorisation?

Vous devez définir cette partie vous-même. C'est vraiment difficile à savoir. Hah. Malade. Les paramètres sont lus dans le fichier yml. Vous pouvez l'utiliser en liant CircleCI au référentiel github et en téléchargeant son fichier yml. C'est un peu ennuyeux, mais ce qui est exécuté dans CircleCI est synonyme de la commande exécutée dans la ligne de commande. Par exemple, si vous voulez exécuter un test de rspec en quelques mots, mettez une commande telle que bundle exec rspec dans yml et ce sera fait.

Hmmm, vous pouvez écrire une commande qui peut être exécutée sur la ligne de commande au format yml, donc cela semble relativement facile, n'est-ce pas? Allons-y confortablement!

référence: Je viens de démarrer CircleCI, donc je l'ai résumé d'une manière facile à comprendre

D. ECR ECR qui ne se mâche pas facilement de manière inattendue. ECR signifie ** Elastic Container Registry **.

** Elastic ** = Souvent trouvé dans les services AWS. Signifiant «flexible». ** Container ** = Vous avez mentionné plus tôt dans l'explication de Docker. Oui, c'est Obon. ** Registre ** = signifie "enregistrement".

En bref, ** Vous pouvez enregistrer de manière flexible des images (repas fixes) dans des conteneurs (Obon)! ** Un service. Dans ECR, il existe une unité appelée référentiel, et les images peuvent y être enregistrées.

Suivez brièvement la procédure en utilisant l'exemple d'un repas fixe.

C'est un endroit pour enregistrer des images dans les lapins et les coins. Cela ressemble à un réfrigérateur. J'utiliserai ECS pour mentir et manger!

E. ECS Ceci n'est pas non plus expliqué très brièvement. La vie n'est pas douce. ECS signifie ** Elastic Container Service **.

** Élastique ** = omis ** Conteneur ** = omis ** Service ** = Trop vague

Je ne sais pas si vous le démontez. En termes simples, il s'agit d'un ** outil d'orchestration similaire à ** Docker Compose. Démarrez le serveur en utilisant l'image enregistrée dans ECR.

Eh bien, j'ai utilisé Docker et Docker Compose dans l'environnement de développement, mais j'utilise ECR et ECS dans l'environnement de production. Dans AWS, il a trois lettres de manière cool, mais fondamentalement, la structure ne change pas beaucoup. (Je pense que c'est différent si tu regardes de près) Utilisez l'image et exécutez-la avec un outil d'orchestration.

ECS n'est pas aussi simple que ECR et est un mystère complexe, donc je l'expliquerai lentement plus tard. Tout d'abord, il est important de pouvoir imaginer le tableau dans son ensemble! Je pense qu'il est bon de connaître les détails plus tard.

référence: Arrangement conceptuel du service de conteneur Amazon EC2 (ECS)

F. Nuxt.js Il s'agit d'un framework progressif basé sur Vue.js utilisé sur la face avant. Ici, à l'aide de l'API, nous allons implémenter un écran qui permet la communication avec le côté serveur et que l'utilisateur peut toucher directement.

G. Ruby on Rails C'est le framework Ruby utilisé côté serveur cette fois. Ici, la requête API du front est acceptée et la réponse est renvoyée au format json. Il communique également avec la base de données.

H. ALB ALB signifie ** Application Load Balancer **. Il distribue joliment l'accès aux applications (Nuxt, Rails, etc.). Si l'accès est concentré sur une seule instance et qu'il tombe en panne, si vous créez plusieurs instances, des requêtes seront automatiquement envoyées à celle-ci. Pour le dire simplement, on se sent comme une sœur aînée dans un centre d'appels super génial.

"Je vais me connecter au département ●● ..."

Quel est le problème avec ELB? C'est ce que j'ai pensé. ELB semble être un terme général qui inclut ALB, CLB et NLB. (À l'origine, il a l'air différent, voir ci-dessous)

ELB est l'abréviation de «Elastic Load Balancing», qui était à l'origine un service d'équilibrage de charge dans AWS. Cependant, lorsque ALB a été développé ultérieurement comme une option supplémentaire, ELB a changé son nom en "Classic Load Balancer (CLB)". Et ELB est venu à être utilisé comme un terme général pour les services d'ALB et CLB. De plus, l'équilibreur de charge réseau (NLB) a maintenant été ajouté et son contenu est encore amélioré. En d'autres termes, ELB est un terme général pour les services d'équilibrage de charge AWS qui ont trois types d'équilibreurs de charge attrayants: ALB, CLB et NLB.

[Différence entre ALB et ELB] Glossaire AWS facile que même les débutants peuvent comprendre

I. Route53 Associez le domaine à votre compte AWS. Rendez le domaine acquis par votre nom.com, etc. disponible sur AWS. Il est difficile d'obtenir une image, mais sur Name.com, le domaine et AWS sont liés en réécrivant le paramètre de serveur de noms sur le serveur de noms affiché dans Route53.

J. ACM Les certificats peuvent être délivrés aux domaines enregistrés avec Route53. Comme c'est gratuit. C'est incroyable. Ceci est possible en ajoutant un paramètre à Route53 mentionné ci-dessus. Vous pouvez facilement le rendre toujours SSL. La conversion SSL signifie que vous pouvez accéder avec "https" au lieu de "http". Yay.

K. RDS Un serveur de base de données qui peut être utilisé sur AWS. Démarrez sur l'instance EC2.

L. terraform Vous pouvez gérer de manière centralisée le code que vous créez sur AWS. Il existe un outil de commande appelé terraform, et le fichier terraform qui y est défini peut être reflété sur AWS. Il existe également des commandes qui peuvent être exécutées de manière expérimentale, et c'est un excellent outil qui vous permet de confirmer à l'avance que le fichier de paramètres écrit est correct. Cependant, il y a probablement peu de gens qui le fabriquent à partir de terraform depuis le début ... (Les gens qualifiés peuvent le faire), donc je pense qu'il est préférable de s'y habituer d'abord.

M. VPC VPC signifie ** Amazon Virtual Private Cloud **. Un réseau virtuel associé à un compte AWS.

C'est comme un jardin miniature. C'est une image d'une zone distinguée par une clôture. Il est divisé en zones dans le monde, comme ap-nord-est (Tokyo).

Le concept de AZ (zone de disponibilité) et de sous-réseau est inclus dans le jardin miniature appelé VPC.

** AZ ** est divisé en plusieurs zones, telles que ap-nord-est-1a, ap-nord-est-1c, ap-nord-est-1d. Ces AZ ont essentiellement une copie du même contenu. Si un sinistre survient en 1a, il sera utilisé pour que la copie en 1c soit accessible.

Un ** sous-réseau ** est une zone subdivisée dans l'AZ. Les sous-zones ne peuvent pas traverser AZ. Les instances EC2, etc. peuvent être placées sur ce sous-réseau et attribuées sur le réseau. Hou la la! Ces sous-réseaux ont le concept de ** sous-réseau public **, qui est défini pour permettre à tout le monde de voir Internet, et de ** sous-réseau privé **, qui est défini pour empêcher tout le monde de voir Internet. Existe.

La couche est ** VPC> AZ> Subzone **.

Il y a Tokyo Disneyland et China Disneyland, et l'idée est que si Tokyo ne peut pas être frappé par un tremblement de terre, vous pouvez aller à Disneyland en Chine. Toontown est un sous-réseau public et la salle du personnel est un sous-réseau privé.

Sommaire

J'ai essayé de l'écrire à la hâte. Si vous pensez que vous êtes confus, je serais heureux si vous pouviez revenir et vous y référer. Je n'ai aucune expérience, mais à l'avenir, j'aimerais pouvoir travailler non seulement du côté serveur et de la réception, mais aussi sur AWS, l'infrastructure et UIUX en général. (Veuillez travailler ...)

S'il y a une réponse, je vais élever le modèle de ces configurations à git et écrire un article sur la procédure de création.

Articles que j'ai utilisés comme référence

Un excellent article qui donne l'impression que vous devriez le voir pour le moment [Server side set] Docker + Rails + Circle CI + Terraform pour créer un environnement avec du code et déployer automatiquement le conteneur sur ECS [Première moitié]

Et coupé le temps étant l'environnement de développement ceci si le "Bonjour, le monde." Nuxt.js + Rails (API) sur Hello World de Docker!

Si vous ne comprenez pas ECS et ECR, ceci Même les débutants peuvent le faire! Déploiement de conteneurs d'applications Rails avec ECS x ECR x CircleCI

Si vous êtes bloqué dans le réseau lors de l'utilisation d'ECS, ce Apprentissage de base du réseau Docker ~ Docker

J'ai aussi écrit quelque chose comme ça. Vagrant + Docker + Rails + Nuxt.js + MySQL + SSL

Recommended Posts

[AWS? Docker?] Résumez les connaissances nécessaires dans votre portefeuille de manière simple à comprendre [terraform? CircleCI?]
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio