[JAVA] De la création d'un environnement cloud AWS au déploiement d'une application Spring Boot (pour les débutants)

En tant qu'ingénieur d'application, je n'ai pas beaucoup d'expérience dans la conception d'infrastructure dans mon travail quotidien, mais j'ai été impressionné de pouvoir facilement créer une infrastructure d'infrastructure même si je n'ai presque aucune connaissance de l'infrastructure via AWS. Cette fois, pour les mêmes débutants que moi, je partagerai la procédure de la création de l'environnement cloud AWS au déploiement de l'application Spring Boot.

Diagramme de configuration environnementale

Pour la configuration AWS, nous adopterons une configuration redondante utilisant deux zones de disponibilité (AZ) dans la région de Tokyo. Les instances EC2 seront distribuées dans les deux AZ, et l'accès sera distribué via ALB (Load Balancer). De plus, l'instance RDS sera configurée en Multi-AZ afin qu'elle soit distribuée dans deux AZ comme dans EC2.

Tout d'abord, créez un VPC!

Chaque instance dans AWS doit se voir attribuer une adresse IP et être correctement acheminée afin qu'elle puisse atteindre les instances dans AWS à partir du réseau externe. Le service qui fournit un tel réseau virtuel est appelé Amazon Virtual Private Cloud (VPC).

À propos de la configuration du VPC

Bien que ce soit pratique, nous visons un environnement VPC proche de la bataille réelle. Ce VPC se compose de deux types: ** sous-réseau public ** pour les communications Internet et ** sous-réseau privé ** qui est bloqué sur Internet. Appliquez différents groupes de sécurité à chacun pour contrôler l'accès aux deux types de sous-réseaux. Le serveur AP est construit sur le sous-réseau public et le serveur DB est construit sur le sous-réseau privé. VPC構成詳細.jpg

Création de VPC

Après avoir enregistré un nouveau compte AWS, l'environnement VPC par défaut a déjà été créé, mais cette fois, nous allons créer le VPC suivant à partir de zéro sans l'utiliser. vpc構成図.jpg

    1. ʻAWS Management Console⇒ Cliquez surVPC ⇒ Sélectionnez VPC dans le menu de gauche ⇒ Appuyez sur le bouton Créer VPC`.
  1. Entrez un nom approprié sur l'écran de création de VPC, puis entrez la plage d'adresses IP dans le champ de bloc CIDR. (Entrez "10.0.0.0/16" cette fois.)
    1. Appuyez sur le bouton «Oui, créer». VPC作成.jpg

Création de sous-section

Créez un sous-réseau dans le VPC ci-dessus. Un sous-réseau ne peut pas être créé sur plusieurs zones de disponibilité, assurez-vous donc de spécifier une zone de disponibilité lors de sa création. Pour la répartition de la charge et la redondance, créez deux sous-réseaux pour le serveur AP et deux pour le serveur DB. subnet構成.jpg

    1. Sélectionnez Sous-réseau dans le menu de gauche ⇒ Cliquez sur le bouton Créer une sous-section.
  1. Entrez un nom approprié sur l'écran de création de sous-réseau, sélectionnez le VPC créé ci-dessus et entrez le bloc CIDR. (Le sous-réseau 1 est "10.0.0.0/24".) subnet1作成.jpg
    1. Suivez la même procédure que ci-dessus pour créer Subnet2, Subnet3 et Subnet4.
Subnet AZ Bloc d'adresse CIDR IPv4
public-subnet1 ap-northeast-1a 10.0.0.0/24
public-subnet2 ap-northeast-1c 10.0.1.0/24
private-subnet1 ap-northeast-1a 10.0.2.0/24
private-subnet2 ap-northeast-1c 10.0.3.0/24

Écran de la liste des sous-sections après la fin subnetList.jpg

Création d'une passerelle Internet (IGW) et d'une table de routage

La ** Internet Gateway (IGW) **, comme son nom l'indique, est la passerelle vers Internet et est installée pour communiquer entre le VPC et le réseau externe. En outre, si le sous-réseau créé ci-dessus est un sous-réseau public ou un sous-réseau privé est déterminé par la ** table de routage ** appliquée à ce sous-réseau. Destination: Le sous-réseau auquel la table de routage avec IGW défini comme cible de 0.0.0.0/0 est appliquée est le sous-réseau public. D'autre part, le sous-réseau auquel la table de routage (laissez la valeur par défaut) sans IGW comme cible de destination: 0.0.0.0/0 est appliquée est un sous-réseau privé. igw&rtb.jpg

    1. Sélectionnez ʻInternet Gateway dans le menu de gauche ⇒ Cliquez sur le bouton Create Internet Gateway`.
  1. Entrez un nom approprié et appuyez sur le bouton «Oui, créer». igw.jpg
    1. Appuyez sur le bouton «Joindre au VPC» pour établir un lien avec le VPC. igw attache.jpg
  2. Sélectionnez Route Table dans le menu de gauche ⇒ Cliquez sur le bouton Create Route Table.
  3. Pour créer une table de routage pour Subnet1, qui est un sous-réseau public, entrez un nom approprié, liez-le au VPC et appuyez sur le bouton «Oui, créer». rtb1.jpg
  4. Suivez la même procédure que ci-dessus pour générer public-rtb2. Cette fois, au lieu de créer une table de routage pour le sous-réseau privé, nous utiliserons la table de routage par défaut.
  5. Enregistrez l'IGW comme cible de la passerelle par défaut (destination 0.0.0.0/0) dans la table de routage du sous-réseau public. route.jpg Les informations d'itinéraire «10.0.0.0/16 local» dans la table d'itinéraire ne peuvent pas être modifiées ou supprimées avec les paramètres par défaut. Ce paramètre par défaut signifie que la communication au sein du VPC ne peut pas être contrôlée par la table de routage, ce qui signifie que la communication entre les sous-réseaux est possible au sein du même VPC.

Créer un groupe de sécurité

Un groupe de sécurité est un pare-feu pour chaque instance dans AWS qui peut contrôler l'accès entrant (entrant) et sortant (sortant). Au moins un groupe de sécurité doit être appliqué à chaque instance. VPC構成詳細.jpg

    1. Sélectionnez «Groupe de sécurité» dans le menu de gauche ⇒ Appuyez sur le bouton «Créer un groupe de sécurité».
  1. Pour créer un groupe de sécurité pour le serveur AP, entrez un nom approprié, liez-le au VPC et appuyez sur le bouton «Oui, créer». sg作成.jpg
    1. Suivez les mêmes étapes que ci-dessus pour créer un groupe de sécurité pour votre serveur DB. private sg.jpg
  2. Créez des règles entrantes et sortantes pour chaque groupe de sécurité. Par défaut, le trafic entrant n'est pas autorisé, il n'acceptera donc pas l'accès de n'importe où. D'autre part, sortant a des règles qui permettent l'accès à toutes les destinations / numéros de port par défaut. Gardez le port SSH 22 et le port d'application Web 8085 ouverts dans le groupe de sécurité du serveur AP pour un accès externe. public inbound.jpg D'autre part, le groupe de sécurité du serveur DB maintient le port Aurora 3306 ouvert pour autoriser uniquement l'accès à la base de données à partir du serveur AP. private sg rule.jpg

Ceci termine la construction de VPC.

Construire une instance RDS

RDS est un service de gestion de base de données relationnelle. Les 6 types de moteurs de base de données suivants peuvent être sélectionnés avec RDS. ・ Amazon Aurora ・ MySQL ・ MariaDB ・ PostgreSQL -Oracle · MS SQL Server Cette fois, nous allons construire Aurora DB. Aurora est le moteur de base de données relationnel propriétaire d'AWS compatible avec MySQL et aurait des performances de débit PostgreSQL jusqu'à 5x et 3x de MySQL. RDS.jpg

Créer un groupe de sous-réseaux

Comme condition préalable à la création d'une instance de base de données, vous devez spécifier un groupe de sous-réseaux de base de données dans le VPC. Un groupe de sous-réseaux de base de données nécessite des sous-réseaux dans au moins deux zones de disponibilité d'une région particulière. Vous devez sélectionner un groupe de sous-réseaux de base de données lorsque vous créez une instance de base de données sur votre VPC. Amazon RDS utilise son groupe de sous-réseaux de base de données et sa zone de disponibilité préférée pour sélectionner le sous-réseau et les adresses IP de ce sous-réseau à associer à l'instance de base de données.

    1. ʻAWS Management Console⇒ Cliquez surRDS ⇒ Sélectionnez Groupe sous-marin dans le menu de gauche ⇒ Appuyez sur le bouton Créer un groupe sous-marin`.
  1. Entrez le nom, etc. de manière appropriée, ajoutez deux sous-réseaux DB (sous-réseau privé1, sous-réseau privé2) et appuyez sur le bouton Créer. db subnet group1.jpg

Créer une instance de base de données

    1. Sélectionnez ʻInstance dans le menu de gauche ⇒ Appuyez sur le bouton Démarrer l'instance DB`.
  1. Sélectionnez Amazon Aurora sur l'écran de sélection du moteur. db1.jpg
    1. Sur l'écran des détails de la base de données, spécifiez la classe d'instance de base de données, etc., puis cliquez sur le bouton «Étape suivante».
  1. Spécifiez le VPC, le groupe de sous-réseaux DB, la zone de disponibilité préférée et le groupe de sécurité. db3.jpg
  2. Vous pouvez confirmer que l'instance de base de données est en cours de création une fois le paramétrage terminé. db4.jpg

Créer une instance EC2

Enfin, je suis arrivé à EC2. Amazon Elastic Compute Cloud (EC2) est un serveur virtuel dans AWS. Cette fois, nous allons créer deux instances pour la répartition de la charge. EC2.jpg

Créer une instance EC2

    1. Cliquez sur ʻAWS Management Console ⇒ ʻEC2 ⇒ Sélectionnez Instance dans le menu de gauche ⇒ Appuyez sur le bouton Créer une instance.
  1. Sélectionnez Amazon Linux comme type d'instance. ec21.jpg
    1. Sur l'écran de sélection du type d'instance, sélectionnez le type de l'offre gratuite. ec22.jpg
  2. Spécifiez le VPC et le sous-réseau sur l'écran des paramètres avancés. ec23.jpg
  3. Ajoutez du stockage. ec24.jpg
  4. Spécifiez le groupe de sécurité pour le serveur AP. ec25.jpg
  5. Enfin, téléchargez la paire de clés pour vous connecter à EC2 et appuyez sur le bouton Créer une instance pour terminer la création de l'instance. ec26.jpg

Association IP ELASTIQUE

L'attribution d'IP ELASTIC est requise pour attribuer une adresse IP publique statique aux instances EC2 ci-dessus.

    1. Sélectionnez ʻELASTIC IP dans le menu de gauche ⇒ Appuyez sur le bouton ʻAssign New Address. eip1.jpg
  1. Associez-vous à une instance EC2. eip2.jpg

Initialisation de l'environnement EC2

Entrez l'adresse IP ELASTIC ci-dessus à l'aide d'un client SSH tel que Tera Term pour accéder à l'instance EC2. ec27.jpg Connectez-vous avec la clé que vous avez téléchargée précédemment en utilisant l'utilisateur "ec2-user". ec28.jpg

tera term.jpg

Si vous parvenez à vous connecter, définissez les paramètres initiaux pour EC2.

#Mettez à jour le dernier logiciel
$ sudo yum update -y
#Changement de nom d'hôte
$ sudo hostname ec2-1-cinpo1
$ sudo vim /etc/sysconfig/network
HOSTNAME=ec2-cinpo1;
#Fichier hôte modifié et émis depuis AWS<Private IP>écrire.
$ echo "17X.XX.X.X30 ec2-cinpo1" |sudo tee -a /etc/hosts
#Confirmation du nom d'hôte
$ hostname -f
#Changement de fuseau horaire
# /etc/sysconfig/Édition de l'horloge
$ echo -e 'ZONE="Asia/Tokyo"\nUTC=false' | sudo tee /etc/sysconfig/clock
#Modifier le fichier de fuseau horaire
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
#Vérifiez le résultat
$ date
#Installation de Java 8
$ sudo yum install java-1.8.0-openjdk.x86_64
#Sélection Java 8
$ sudo alternatives --config java
#Vérifiez le résultat
$ java -version

Construisez un deuxième EC2.

Suivez les mêmes étapes que ci-dessus pour créer une deuxième instance EC2.

Portage des données vers l'environnement Aurora

#Installez le client MySQL pour vous connecter au serveur Aurora.
$ sudo yum install mysql
#Connectez-vous au serveur Aurora pour créer une nouvelle base de données ou des données de port.
$ mysql -h <Point de terminaison d'instance RDS> -u username -p
$ create database sampleDB

...Ce qui suit est omis...

mysql.jpg

Déployer l'application Spring Boot

    1. Utilisez le transfert SSH SCP de Tera Term pour télécharger l'application Spring Boot localement sur les deux instances EC2 ci-dessus.
  1. Une fois terminé, lancez l'application Spring Boot comme auparavant.
$ java -jar XXXXXXXX.jar

boot.jpg

    1. À ce stade, essayez d'accéder à ELASTIC IP: 8085 et vous devriez voir l'écran de l'application.

Créer un équilibreur de charge

Enfin, appliquez un équilibreur de charge (Application Load Balancer [ALB]) pour réaliser l'équilibrage de charge du serveur AP. ALB.jpg

Construire un groupe cible

Comme condition préalable à l'application d'ALB, vous devez enregistrer l'instance EC2 en tant que cible dans le groupe cible. ALB agit comme une destination unique pour les clients, distribuant le trafic entrant aux cibles enregistrées.

    1. Cliquez sur ʻAWS Management Console ⇒ ʻEC2 ⇒ Sélectionnez Groupe cible dans le menu de gauche ⇒ Appuyez sur le bouton Créer un groupe cible. ALB1.jpg
  1. Enregistrez la cible dans le groupe cible sélectionné sur l'écran de liste des groupes cibles. ALB2.jpg
    1. Enregistrez l'instance EC2 en tant que cible dans le groupe cible. ALB3.jpg

Bâtiment ALB

    1. Sélectionnez Load Balancer dans le menu de gauche ⇒ Appuyez sur le bouton Create Load Balancer et sélectionnez Application Load Balancer. ALB4.jpg
  1. Spécifiez le nom de manière appropriée et spécifiez l'écouteur, le sous-réseau, etc. ALB5.jpg
    1. Spécifiez le groupe de sécurité. ALB6.jpg
  2. Spécifiez le groupe cible créé précédemment. ALB7.jpg
  3. Il sera en cours de création et sera disponible dans une minute ou deux. ALB8.jpg

Contrôle de fonctionnement

Cela complète tout, de la création de l'environnement AWS au déploiement de l'application. http://<ALBのDNS名>:ポート/にアクセスすれば、アプリ画面が表示されたら完成です。 final1.jpg

Recommended Posts

De la création d'un environnement cloud AWS au déploiement d'une application Spring Boot (pour les débutants)
[Spring Boot] Comment créer un projet (pour les débutants)
De la création d'un projet Spring Boot à l'exécution d'une application avec VS Code
Comment écrire un test unitaire pour Spring Boot 2
Chargez un pot externe à partir du pot de graisse Spring Boot
Essayez Spring Boot de 0 à 100.
Étapes requises pour émettre des événements asynchrones Spring Boot
Présentation de Spring Boot2, un framework Java pour le développement Web (pour les débutants)
Comment créer un hinadan pour un projet Spring Boot à l'aide de SPRING INITIALIZR
Créez une application avec Spring Boot 2
02. J'ai créé une API pour me connecter de Spring Boot à MySQL (My Batis)
Créez une application avec Spring Boot
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
Créez une application Web Spring Boot qui utilise IBM Cloudant et déployez-la sur Cloud Foundry
Comment afficher les caractères saisis dans Spring Boot sur le navigateur et les liens de référence [Introduction à Spring Boot / Pour les débutants]
Création d'un environnement de connexion système SAP à l'aide de JCo sur un PC que même les débutants de Java peuvent faire
Étapes pour créer une application chameau simple avec les démarreurs Apache Camel Spring Boot
[Docker] Création d'un environnement pour utiliser Hugo
L'histoire de la transition de Spring Boot 1.5 à 2.1
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
[Spring Boot] Comment obtenir des propriétés dynamiquement à partir d'une chaîne contenue dans une URL
[Résolution d'erreur] Se produit lors de la tentative de création d'un environnement pour le printemps avec docker
Introduction du livre: Spring Boot Livre de référence recommandé pour les débutants!
Créez une application de recherche simple avec Spring Boot
Comment ajouter un chemin de classe dans Spring Boot
Introduction à Spring Boot + In-Memory Data Grid
Créer un environnement Laravel sur une instance AWS
[Rails] Création d'un environnement pour le développement d'applications Web
Créer un environnement de développement Spring Boot avec docker
Créez une application Web parfaitement adaptée à l'apprentissage [Spring Boot + Thymeleaf + PostgreSQL]
[Pour les débutants] Jusqu'à la création d'un environnement de développement d'applications Web utilisant Java sur Mac OS
<Installation par points> Que faire si vous ne pouvez pas continuer en raison d'une erreur lors de la création d'un environnement de développement pour l'apprentissage Rails.
Plans pour prendre en charge JDK 11 pour Eclipse et Spring Boot
Mémo pour créer un environnement Servlet sur EC2 d'AWS
Comment définir l'injection de dépendance Spring Boot (DI)
Comment utiliser un tableau pour la clé TreeMap
Créer un environnement de développement Ruby on Rails sur AWS Cloud9
Un mémorandum de dépendance à Spring Boot2 x Doma2
Comment créer un projet Spring Boot dans IntelliJ
Customizer pour Platform Transaction Manager ajouté à partir de Spring Boot 1.5
Livraison push de l'application Spring vers Firebase Cloud Messaging
Spring Boot Ce que les débutants ont tendance à avoir (@ComponentScan)
[Introduction à Spring Boot] Soumettez un formulaire à l'aide de thymeleaf
Un débutant en développement d'applications a essayé de créer une application de calculatrice Android
Comment démarrer par environnement avec Spring Boot de Maven
Un nouvel employé a tenté de créer une fonction d'authentification / autorisation à partir de zéro avec Spring Security
Que faire si le journal utilisant JUL n'est plus sorti dans le journal de l'application après le déploiement de l'application Spring Boot sur Tomcat en tant que guerre